Android 系统内置apk

一、准备一个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目录中;
    创建TestApp文件夹

    拷贝apk与mk文件导TestApp文件件

  • 如果是含有SO库的apk包,需要提取SO库文件放到apk的同级目录下。如:MyApp目录;
    图片.png

三、在build/make/target/product/core.mk加入该Module名字

如: ~/AndroidFramework/android-8.1.0_r1$ vim build/make/target/product/core.mk

core.mk文件中添加TestApp文件夹名

四、然后重新make

  1. 运行make编译后可以在~/AndroidFramework/android-8.1.0_r1/out/target/product/generic_x86_64/system/app/MyApp 目录下看到已经打包进入系统;
    未含有SO库的文件夹
  2. 如果是含有so包的apk,在make编译之后,可以在MyApp目录下看到lib文件夹以及文件夹内的so库;
    含有SO库的文件夹

  1. 运行emulator 启动模拟器就可以在系统中看到内置的apk(注:内置apk是无法删除的)
    内置应用,无法删除

关于另外几种应用内置方法:
安卓系统预置应用apk的几种方式

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容