rk平台上遇到bbbs_9.79.19.92.apk系统内置无法使用(切换各种安装目录 加签名也不行) 手动安装却可以
编写RC开机自启脚本
此方案通过编写一个Shell脚本,并将它配置为一个系统服务,在开机完成时触发执行安装指定apk。
目录结构
device/rockchip/rk3576/bbbs_9.79.19.92/ myapk_installer.rc , Android.mk , bbbs_9.79.19.92.apk , install_myapk.sh
- 编写安装脚本
创建脚本文件,例如 install_myapk.sh,内容如下:
#!/system/bin/sh# 检查是否已安装过if["$(getprop persist.sys.myapk.installed)"="1"];thenexit0filog-tMyApkInstaller"Starting APK installation..."# 等待系统服务完全就绪(可选,但手动执行时不需要)# 保留一行 sleep 可避免时机问题,但手动执行时其实无影响sleep2# 执行安装pminstall-r/system/preloads/bbbs_9.79.19.92.apkif[$?-eq0];thensetprop persist.sys.myapk.installed1log-tMyApkInstaller"Installation succeeded"elselog-tMyApkInstaller"Installation failed (exit code:$?)"fi如果你更我一样系统再win下去创建脚本 需要去掉install_myapk.sh中的win换行符号 不然脚本容易执行不了
sed -i ‘s/\r$//’ install_myapk.sh
- 添加启动服务
在系统的init.rc或特定产品的init.xxx.rc文件中,添加服务定义:
编写myapk_installer.rc 内容如下
servicemyapk_installer /system/bin/sh /system/bin/install_myapk.sh class main user root group root shell disabled oneshot seclabel u:r:shell:s0 on property:sys.boot_completed=1start myapk_installer- 放置APK和脚本到指定分区
编写Android.mk文件 内容如下
LOCAL_PATH :=$(call my-dir)# APK 预置到 /system/preloadsinclude$(CLEAR_VARS)LOCAL_MODULE :=bbbs_9.79.19.92.apk LOCAL_MODULE_CLASS :=ETC LOCAL_SRC_FILES :=bbbs_9.79.19.92.apk LOCAL_MODULE_PATH :=$(TARGET_OUT)/preloads LOCAL_MODULE_TAGS :=optional include$(BUILD_PREBUILT)# 安装脚本预置到 /system/bininclude$(CLEAR_VARS)LOCAL_MODULE :=install_myapk.sh LOCAL_MODULE_CLASS :=EXECUTABLES LOCAL_SRC_FILES :=install_myapk.sh LOCAL_MODULE_PATH :=$(TARGET_OUT_EXECUTABLES)LOCAL_MODULE_TAGS :=optional include$(BUILD_PREBUILT)- 添加编译
b/device.mk中加入
PRODUCT_PACKAGES+=\install_myapk.sh\bbbs_9.79.19.92.apk PRODUCT_COPY_FILES+=\device/rockchip/rk3576/bbbs_9.79.19.92/myapk_installer.rc:/system/etc/init/myapk_installer.rc测试与验证
adb shellsh/system/bin/install_myapk.sh#验证内置后的脚本是否可以正常运行adb shell getprop persist.sys.myapk.installed#查看是否执行安装adb shell setprop persist.sys.myapk.installed0#可重新设值反复验证