目标
将APK内置到系统中
流程
一、为应用在apps中创建应用目录,并将apk拷贝至目录
Example:
- 内置路径:packages/apps/TestApp
- 应用目录:TestApp
- 应用名称:TestApp.apk
二、为应用创建Android.mk
在应用目录下创建Android.mk文件
LOCAL_PATH:= $(call my-dir)
# Android.mk通常需要定义好LOCAL_PATH,表示当前工作路径,函数my-dir是编译系统提供的,返回当前路径
include $(CLEAR_VARS)
# 这一步操作主要是清空之前定义的LOCAL_XXX开头的变量,是必须要的操作。CLEAR_VARS 变量由Build System提供。并指向一个指定的GNU Makefile,由它负责清理很多LOCAL_xxx,例如:LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES等等。但不清理LOCAL_PATH.
# 这个清理动作是必须的,因为所有的编译控制文件由同一个GNU Make解析和执行,其变量是全局的。所以清理后才能避免相互影响。
LOCAL_MODULE_TAGS := optional
#始终编译该应用,不管是user 还是eng 版本都会编译此app
LOCAL_MODULE := TestApp
#模块名称
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
# 定义编译模块所需的源文件,应用名称必须要匹配一致
LOCAL_PRIVILEGED_MODULE := true
#增加权限
#将apk编进“/system/priv-app/目录”,如果为false,或者不加这句话,就会编进“/system/app” 目录, 二者区别在于前者的权限要高于后者,即不可卸载
LOCAL_MODULE_CLASS := APPS
#定义编译完成之后的类型:除了APPS,还有ETC,EXECUTABLES(.bin)SHARED_LIBRARIES(.so) 等选择值
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
#定义编译完成之后模块的后缀
LOCAL_CERTIFICATE := platform
#定义使用原app签名可用选择项platform,shared,media
include $(BUILD_PREBUILT)
#定义编译出来的目标文件,如动态库,静态库,jar包以及apk
三、将应用添加至编译打包项中
-
在Device中,找到Devices.mk文件,
- 在PRODUCT_PACKAGES中添加应用目录+=TestApp
Example
路径:device/rockchip/rk3399pro/device.mk
PRODUCT_PACKAGES += \
memtrack.$(TARGET_BOARD_PLATFORM) \
WallpaperPicker \
Launcher3 \
libcrypto_vendor.vendor\
TestApp
四、重新编译文件
首次编译:
make -j64
#64表示CPU进程数