一、準(zhǔn)備一個apk包悠咱,以及一個Android.mk文件
其中Android.mk的內(nèi)容如下:
LOCAL_CERTIFICATE指簽名方式蒸辆,如果是platform,代表簽名成系統(tǒng)軟件, 如果還是PRESIGND析既,表示用的是apk原本的簽名躬贡。
- 非含有SO庫的mk文件
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
$(warning "MyApp of LOCAL_PATH is $(LOCAL_PATH)")#打印輸出
# Module name should match apk name to be installed
LOCAL_MODULE := MyApp
LOCAL_MODULE_TAGS := optional
#不管是user 還是eng 版本都會編譯此app
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED
include $(BUILD_PREBUILT)
- 含有SO庫的mk文件
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
$(warning "MyApp of LOCAL_PATH is $(LOCAL_PATH)")
# Module name should match apk name to be installed
LOCAL_MODULE := MyApp_SO
LOCAL_MODULE_TAGS := optional
#不管是user 還是eng 版本都會編譯此app
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
#so庫存放的路徑,與apk同級目錄下
LOCAL_PREBUILT_JNI_LIBS := lib/x86_64/libnative-lib.so
#@lib/x86/libtest.so \ //注意前面要用tab鍵隔開
#@lib/x86/libtest2.so //這是你需要添加的so 如果是 armeabi-v7a 直接替換掉armeabi
LOCAL_CERTIFICATE := platform
#表示app已經(jīng)簽名
include $(BUILD_PREBUILT)
二眼坏、在package/apps/目錄下創(chuàng)建文件夾
- 比如創(chuàng)建TestApp文件夾拂玻,然后把apk與mk文件拷貝導(dǎo)MyApp目錄中;
- 如果是含有SO庫的apk包宰译,需要提取SO庫文件放到apk的同級目錄下檐蚜。如:MyApp目錄;
三囤屹、在build/make/target/product/core.mk加入該Module名字
如: ~/AndroidFramework/android-8.1.0_r1$ vim build/make/target/product/core.mk
四熬甚、然后重新make
- 運行make編譯后可以在~/AndroidFramework/android-8.1.0_r1/out/target/product/generic_x86_64/system/app/MyApp 目錄下看到已經(jīng)打包進(jìn)入系統(tǒng);
- 如果是含有so包的apk肋坚,在make編譯之后乡括,可以在MyApp目錄下看到lib文件夾以及文件夾內(nèi)的so庫肃廓;
- 運行emulator 啟動模擬器就可以在系統(tǒng)中看到內(nèi)置的apk(注:內(nèi)置apk是無法刪除的)
關(guān)于另外幾種應(yīng)用內(nèi)置方法:
安卓系統(tǒng)預(yù)置應(yīng)用apk的幾種方式