在定制系统开发中经常遇到需要将一下第三方资源或代码集成编译到系统固件包中,比如预装apk、预置特定目录文件、开源项目代码或者自己新建的项目代码。
一、预装apk
-
在
device/rockchip/CPU_TYPE/PRODUCT_TYPE/
目录下新建一个preinstall_del
目录(可以卸载,恢复出厂操作后能恢复) -
在
device/rockchip/CPU_TYPE/PRODUCT_TYPE/
目录下新建一个preinstall_del_forever
目录(可以彻底卸载,恢复出厂操作后无法恢复) -
在
device/rockchip/CPU_TYPE/PRODUCT_TYPE/
目录下新建一个preinstall
目录(不可卸载) -
把 apk 拷贝到
device/rockchip/CPU_TYPE/PRODUCT_TYPE/preinstall*相应
目录下 -
编译 android
二、预添加自定义目录和文件
比如想把一些依赖资源放到system/media目录下,参照下述方式:
1.在device/rockchip/common/目录下新建自定义目录media,将需要预加的文件放入该目录
2.device/rockchip/CPU_TYPE/device.mk中添加编译拷贝指令,将文件拷贝到system/media
3.完整编译img包
例如:device/rockchip/r356x/device.mk中添加
PRODUCT_COPY_FILES += \
device/rockchip/common/media/system/fonts/jlink.ttf:system/fonts/jlink.ttf \
device/rockchip/common/media/system/media/battery.txt:system/media/battery.txt
三、编译新增的项目代码到系统img中
1.编辑项目Android.mk为系统文件,比如系统apk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
#使用系统签名
LOCAL_CERTIFICATE := platform
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_RESOURCE_DIR += $(LOCAL_PATH)/res
# 此apk 限制为32 bit
LOCAL_MULTILIB := 32
LOCAL_MODULE_TARGET_ARCH := arm
APP_ABI := armeabi-v7a arm64-v8a armeabi
LOCAL_PREBUILT_JNI_LIBS := \
lib/armeabi-v7a/lib***jni.so \
lib/armeabi-v7a/lib***.so
LOCAL_SDK_VERSION := current
LOCAL_MIN_SDK_VERSION := 21
LOCAL_PROGUARD_ENABLED:= disabled
LOCAL_DEX_PREOPT := false
LOCAL_PACKAGE_NAME := Launcher
include $(BUILD_PACKAGE)
2.device/rockchip/CPU_TYPE/device.mk中添加编译打包指令
#添加源代码编译最终结果文件的名称
PRODUCT_PACKAGES += \
Launcher
3.完整编译img包