1 原理
在Android源码中添加一个全新的系统级应用,该应用是 需要一个用于集成的apk文件、Android.mk文件 以及 相关的配置文件。
2 修改方案(Android O P Q)
在AOSP/package/apps/路径下 添加一个全新的应用XXX_server,添加对应的Android.mk文件,如下所示:
LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := XXXServer.apk
LOCAL_MODULE_CLASS := APPS
#可以为user、eng、tests、optional,optional代表在任何版本下都编译
LOCAL_MODULE_TAGS := optional
#编译模块的名称
LOCAL_MODULE := XXXServer
#可以为testkey、platform、shared、media、PRESIGNED(使用原签名),platform代表为系统应用
LOCAL_CERTIFICATE := platform
#应用输出路径,此处为system/app
LOCAL_MODULE_PATH := $(TARGET_OUT)/app
#不设置或者设置为false,安装位置为system/app,如果设置为true,则安装位置为system/priv-app?
LOCAL_PRIVILEGED_MODULE := false
#module的后缀,可不设置
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_DEX_PREOPT := false #不进行预先优化,一般第三方应用会避免优化,而导致APP各种异常
include $(BUILD_PREBUILT)
接下来在该目录下 添加对应的 package/apps/XXXServer/XXXServer.apk文件。这样该目录就完成了编辑。
然后我们再修改下系统的配置文件(根据项目的实际需求,一般是在aosp/device/ 目录下找到对应的mk文件,对PRODUCT_PACKAGES变量进行添加,这里仅采用一种通用的方式供参考)同时修改文件
build/make/target/product/sdk_base.mk
build/make/target/product/generic_no_telephony.mk
给PRODUCT_PACKAGES 环境变量 添加新任务,如下所示:
@@ -49,7 +49,8 @@ PRODUCT_PACKAGES := \
EasterEgg \
WallpaperPicker \
WidgetPreview \
+ XXXServer \
# Define the host tools and libs that are parts of the SDK.
-include sdk/build/product_sdk.mk