如何把應用程序app編譯進android係統
把常用的應用程序編譯到img文件中,就成了係統的一部分,用戶不必自己安裝,當然也卸載不了;同時也可以刪減係統自帶的應用程序,精簡係統;
1.\build\target\product 目錄下generic.mk文件:
- PRODUCT_PACKAGES := \
- AccountAndSyncSettings \
- DeskClock \
- AlarmProvider \
- Bluetooth \
- Calculator \
- Calendar \
- Camera \
- testMid \
- CertInstaller \
- DrmProvider \
- Email \
- Gallery3D \
- LatinIME \
- Launcher2 \
- Mms \
- Music \
我們添加一個testMid \ 應用名稱。
2.把testMid包放入
\packages\apps 目錄下,修改android.mk文件。
- LOCAL_PATH:= $(call my-dir)
- include $(CLEAR_VARS)
- LOCAL_MODULE_TAGS := optional
- LOCAL_SRC_FILES := $(call all-subdir-java-files)
- LOCAL_PACKAGE_NAME := testMid
- LOCAL_CERTIFICATE := platform
- include $(BUILD_PACKAGE)
注:LOCAL_PACKAGE_NAME := testMid (包名必須和generic.mk中添加的相同)
編譯源碼,可以看到在
\out\target\product\smdkv210\system\app
目錄下生存了testMid.apk了。這時system.img也包含了此應用。
-------------------------------------------------------------------
特殊情況:有時,應用需要包含jar包,這時的app導入源碼時會出現問題:
MODULE.TARGET.JAVA_LIBRARIES.libarity already defined by ... stop
由於 LOCAL_STATIC_JAVA_LIBRARIES := libarity 會引發錯誤信息。
目前解決方法是:
\build\core 目錄下修改base_rules.mk
注釋掉錯誤信息:
ifdef $(module_id)
#$(error $(LOCAL_PATH): $(module_id) already defined by $($(module_id)))
endif
$(module_id) := $(LOCAL_PATH)
--重新編譯,這時可以通過了。
(2)、刪除原廠(Telchips)帶源碼的應用程序,如DTV_DVBT
在/device/telechips/m801/device.mk
注釋掉相應語句:
# PRODUCT_PACKAGES += \
# SampleDVBTPlayer \
同時,在/out/target/product/m801/system/app 找到相應的.APK包,並刪除
最後更新:2017-04-03 12:55:50