android系统预装App

  1. ./vendor/firefly/apps/ 目录下新建 FDeviceTest 文件夹
  2. 将 Apk 放到FDeviceTest
  3. 解压 apk,把 lib 文件夹放到 FDeviceTest 中
  4. 编写 Android.mk 文件,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
###############################################################################
# RKDeviceTest
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := FDeviceTest
LOCAL_MODULE_CLASS := APPS
#optional 该模块所有编译版本下都编译
#user 该模块只在user编译版本下才编译
#eng 该模块只在eng编译版本下才编译
#tests 该模块只在tests编译版本下才编译
LOCAL_MODULE_TAGS := optional
#编译链接后的目标文件的文件名
LOCAL_BUILT_MODULE_STEM := package.apk
LOCAL_DEX_PREOPT := false
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
#LOCAL_PROPRIETARY_MODULE 控制生成路径到system/vendor/lib,否则就是system/lib
#设置true,则LOCAL_PRIVILEGED_MODULE 优先级高,如果设置为false 则LOCAL_MODULE_PATH优先级高
LOCAL_PRIVILEGED_MODULE := true
#testkey 普通apk,默认情况下使用,默认为使用apk自己的签名
#platform 使用平台签名
#shared 使用共享签名,该apk需要和home/contacts进行共享数据
#media 使用媒体签名,该apk是media/download系统中的一环
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_OVERRIDES_PACKAGES := DeviceTest
#构建系统生成模块时所用的源文件列表
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
#LOCAL_REQUIRED_MODULES :=
ifeq ($(strip $(TARGET_ARCH)), arm)
#只适用编译第三方app,且app依赖了so库 *
LOCAL_PREBUILT_JNI_LIBS := \
lib/arm/libdrm_devicetest.so \
lib/arm/libserial_port.so \
lib/arm/libgti_android.so \
lib/arm/libgti_detect.so \
lib/arm/libopencv_java3.so \
lib/arm/librknn_api.so \
lib/arm/librknn-jni.so
else ifeq ($(strip $(TARGET_ARCH)), arm64)
LOCAL_PREBUILT_JNI_LIBS := \
lib/arm64/libdrm_devicetest.so \
lib/arm64/libserial_port.so \
lib/arm64/libgti_android.so \
lib/arm64/libgti_detect.so \
lib/arm64/libopencv_java3.so \
lib/arm64/librknn_api.so \
lib/arm64/librknn-jni.so
endif
include $(BUILD_PREBUILT)
  1. 父目录的 apps.mk 中添加应用名
1
2
3
4
5
6
PRODUCT_PACKAGES += \
FDeviceTest \
FireflyDemo \
rk_ssd_demo \
GooglePinyin \
rk_openpose_demo_rga
  1. /system/app 和 /system/priv-app 有什么区别?
    /system/priv-app 是进程可以保持始终运行,并且能拿到最多的权限;坏处是无法正常升级,因为一被 kill 马上又被拉起来,并且升级完成后,再起来的还是旧版本的 service。
    所以,我们的应用被预装到终端手机 ROM 中时,为了保活,并且尽量减少终端厂商的工作量,如果能解决升级的问题,对于终端厂商来说就只需要把应用 push 到   下就可以了。没有找到解决升级的办法,最终采用的方案往往是 push 到,系统通过一个 service(如 phone)来 bind 我们的 service,一旦 disconnect 之后再来 bind,实现保活。
发布于

2022-04-28

更新于

2023-08-18

许可协议

评论