一、准备一个apk包,以及一个Android.mk文件
其中Android.mk的内容如下:
LOCAL_CERTIFICATE指签名方式,如果是platform,代表签名成系统软件, 如果还是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已经签名
include $(BUILD_PREBUILT)
二、在package/apps/目录下创建文件夹
- 比如创建TestApp文件夹,然后把apk与mk文件拷贝导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 目录下看到已经打包进入系统;
- 如果是含有so包的apk,在make编译之后,可以在MyApp目录下看到lib文件夹以及文件夹内的so库;
- 运行emulator 启动模拟器就可以在系统中看到内置的apk(注:内置apk是无法删除的)
关于另外几种应用内置方法:
安卓系统预置应用apk的几种方式