在开发过程中,有一部分apk,我们是需要出厂内置好的,例如输入法、客户定制app等,这里内置分两种,一种是只内置apk,不含apk源码,一种是包含apk源码。
一、如何将apk内置到系统
1、首先将apk放到系统源码中
1.1. 可以直接放在 packages/apps/ 下面
1.2. 也可以自己创建一个文件,专门存放需要内置的apk
2、在apk同目录下添加 Android.mk 文件,例如我们这里内置SystemToolService.apk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
#源码编译出的apk名称
LOCAL_PACKAGE_NAME
#存储您要构建的模块的名称,每个模块名称必须唯一,且不含任何空格.如果未设置,则默认使用
LOCAL_MODULE := SystemToolService
#编译的java文件文件路径
LOCAL_SRC_FILES := SystemToolService.apk
#这个主要用于是 eng、user还是 userdebug 版本参与编译; optional值所有版本都参与编译
LOCAL_MODULE_TAGS := optional
#标识所编译模块放置的位置, APPS表示放置在/system/app目录下。
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
#可以为testkey、platform、shared、media、PRESIGNED(使用原签名),platform代表为系统应用
LOCAL_CERTIFICATE := platform
include $(BUILD_PREBUILT)
(注:1)默认预置apk到system/app/目录,LOCAL_MODULE_PATH:= $(TARGET_OUT_APPS) 普通系统apk,不可卸载
2)LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS) 放在该目录下的apk可以卸载,卸载后,恢复出厂设置时,应用不会恢复。
3)LOCAL_MODULE_PATH := $(TARGET_OUT)/priv-app/ 放在该目录下的apk可以获得系统权限,系统核心apk,不可卸载(或者加入一句: LOCAL_CERTIFICATE:= PRESIGNED)。
4)?LOCAL_MODULE_PATH := $(TARGET_OUT)/vendor/operator/app, 预置APK使得用户可以卸载,并且恢复出厂设置时能够恢复
3、添加到系统中编译
打开AndroidAOSP/build/make/target/product/handheld_product.mk,加入我们的apk模块
然后整体编译,编译成功
刷机测试,内置完成
二、如何将apk源码内置到系统
1、准备工作一样,只是将应用的源码,app目录放到源码中
2、创建Android.mk文件
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
#这个主要用于是 eng、user还是 userdebug 版本参与编译; optional值所有版本都参与编译
LOCAL_MODULE_TAGS := optional
#编译的java文件文件路径
LOCAL_SRC_FILES := $(call all-java-files-under, app/src/main/java)
#需要编译的 AndroidManifest.xml 文件
LOCAL_MANIFEST_FILE := app/src/main/AndroidManifest.xml
#编译的资源文件文件路径
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/app/src/main/res
#编译出的apk的名称
LOCAL_PACKAGE_NAME := XXXX
#apk 签名
LOCAL_CERTIFICATE := platform
#LOCAL_PRIVATE_PLATFORM_APIS := true
LOCAL_SDK_VERSION =current
include $(BUILD_PACKAGE)
include $(CLEAR_VERS)
include $(call all-makefiles-under,$(LOCAL_PATH))
3、同上内置apk一样,将模块放到系统编译中,然后就可以编译刷机测试了。
希望对开发的你有所帮助。