MTK-Android12 静默安装脚本实现静默安装app

MTK-Android12 静默安装脚本实现静默安装app 提示通过脚本实现静默安装app文章目录前言 - 需求一、 涉及到的知识点1、静默安装-资源包拷贝2、静默安装脚本编写-配置开机启动-实现安装二、 参考资料静默安装参考拷贝资源参考开机自启脚本实现参考三、实现方案大佬实现方案个人实现方案1、 预置安装资源到系统2、拷贝脚本实现3、将拷贝脚本作为开机服务-开机自启配置编译模块-将可执行文件放到指定目录配置编译模块脚本-实现拷贝工作开机脚本init.rc 文件中配置开机自启-配置服务on post-fs-data 路径下授可执行文件权限创建自定义的开机自启服务开机后sys.boot_completed 自启服务四、功能验证查看拷贝脚本-拷贝资源是否已经成功/system/bin/ 下查看可执行脚本/system/preloadapp/ 下查看预制的apk 资源包logcat 日志验证实际机器看一下安装-app是否真的安装成功总结-思考前言 - 需求这里讲的是静默安装的功能之前做过几篇静默安装笔记其实已经实现功能的但是都是基于代码层面也就是基于Framework APK或者 应用App来实现的。看到大佬的博客用脚本来实现 Android 10.0 静默安装脚本实现静默安装app我觉得很有意义自己也实现一遍。但是两者思想一样实际实现方案完全不一样 都可以供参考。不同版本、不同芯片平台要求不一样导致的个人的更加通用。一、 涉及到的知识点首先要搞清楚这个需求涉及到哪些知识点这里特别列出来 其实就是一个大纲。1、静默安装-资源包拷贝总得准备需要静默安装的资源包apk吧2、静默安装脚本编写-配置开机启动-实现安装如上1中安装的apk资源包准备好后就可以进行安装了那么安装一定是通过脚本安装的所以务必要求静默安装的脚步静默安装脚本肯定需要执行那么其实就是一个服务开机自启服务二、 参考资料静默安装参考直接上大神的一篇如果版本低于Android11 可以参考Android 10.0 静默安装脚本实现静默安装app其它自己之前笔记PMS安装apk之界面跳转Android13-包安装器PackageInstaller-之apk安装流程MTK-Android13-包安装器PackageInstaller 静默安装实现RK-Android11-PackageInstaller安装器自动安装功能实现拦截adb install/uninstall安装 - 安装流程分析RK3576-Android15-整合PackageInstaller实现静默安装功能拷贝资源参考MTK-Android12拷贝apk文件到指定目录-如system目录下开机内置拷贝二进制文件到/system/bin目录-并实现开机自启二进制脚本服务预制资源-拷贝文件-/system/lib/ 目录-拷贝可执行文件/system/bin/-拷贝文件到/system/etc/permissions目录系统拷贝文件到data分区-/data/system目录-实战拷贝资源到vendor分区Rk-内置应用作为系统Launcher-内置APK-拷贝文件-替换开机动画拷贝预置资源到vendor分区-/vendor/lib目录/vendor/lib/hw目录-vendor/etc目录-拷贝可执行文件配置系统拷贝预置资源-拷贝到/system/bin目录-拷贝可执行文件并启动-拷贝到product/etc分区-拷贝到system/etc分区开机自启脚本实现参考开机内置拷贝二进制文件到/system/bin目录-并实现开机自启二进制脚本服务三、实现方案大佬实现方案Android 10.0 静默安装脚本实现静默安装app个人实现方案1、 预置安装资源到系统如上篇笔记详细做了相关说明MTK-Android12拷贝apk文件到指定目录-如system目录下2、拷贝脚本实现我直接把拷贝脚本放出来了可直接使用batch_install.sh#!/system/bin/shTAGBatchPreInstallAPKAPK_STORE_DIR/system/preloadappMARK_FILE/data/preinstall_all_apks.markSLEEP_DELAY20 log-t$TAG Batch PreInstall Start, delay ${SLEEP_DELAY}s wait system ready sleep${SLEEP_DELAY}if[-f ${MARK_FILE}];then log-t$TAGMark file exist, all apks already installed, skipexit0 fiif[!-d ${APK_STORE_DIR}];then log-t$TAGError: APK dir ${APK_STORE_DIR} not foundexit1 fiforAPK_FILE in ${APK_STORE_DIR}/*.apk;do[!-f${APK_FILE}]continuelog-t$TAGlog-t$TAGHandle apk: ${APK_FILE}# PKG_NAME$(aapt2 dump badging ${APK_FILE} 2/dev/null | grep package: | awk {print $2} | sed s/name//g | sed s/\//g)PKG_NAME$(pm dump packages-f${APK_FILE}2/dev/null|grep package|head-n1|cut-d-f2|cut-d/-f1)if[-z${PKG_NAME}];then log-t$TAGFailed parse package name, skip this apkcontinuefi log-t$TAGParse package name: ${PKG_NAME}pm list packages ${PKG_NAME}|grep-q ${PKG_NAME}if[$?-eq0];then log-t$TAGApp ${PKG_NAME} already installed, skipcontinuefi log-t$TAGStart install ${PKG_NAME}pm install-r${APK_FILE}INSTALL_RET$?if[${INSTALL_RET}-eq0];then log-t$TAGInstall ${PKG_NAME} SUCCESSelselog-t$TAGInstall ${PKG_NAME} FAILED, ret${INSTALL_RET}fi done touch ${MARK_FILE}log-t$TAG All APK Batch Install Finish, write mark file exit03、将拷贝脚本作为开机服务-开机自启参考之前笔记文章 开机内置拷贝二进制文件到/system/bin目录-并实现开机自启二进制脚本服务配置编译模块-将可执行文件放到指定目录配置模块名称batch_install配置编译模块脚本-实现拷贝工作如上Android.mk文件LOCAL_PATH:$(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE:batch_installLOCAL_MODULE_TAGS:optionalLOCAL_MODULE_CLASS:EXECUTABLESLOCAL_SRC_FILES:fise/batch_install.shLOCAL_MODULE_PATH:$(TARGET_OUT)/binLOCAL_CHECK_ELF_FILES:falseinclude $(BUILD_PREBUILT)开机脚本init.rc 文件中配置开机自启-配置服务路径\system\core\rootdir\init.rcon post-fs-data 路径下授可执行文件权限on post-fs-data......chmod0755/system/bin/batch_install chown0.0/system/bin/batch_install创建自定义的开机自启服务service batch_install/system/bin/batch_installclassmain user rootgrouproot seclabel u:r:system_server:s0 disabled oneshot开机后sys.boot_completed 自启服务on property:sys.boot_completed1......startbatch_install四、功能验证查看拷贝脚本-拷贝资源是否已经成功/system/bin/ 下查看可执行脚本/system/preloadapp/ 下查看预制的apk 资源包logcat 日志验证开机后logcat验证说上说明开机后 开机自启执行了脚本自动安装脚本实际机器看一下安装-app是否真的安装成功查看更多应用有木有静默安装的apk,如下 已经有了的静默安装成功。总结-思考这里面通过脚本实现静默安装功能子啊实际开发中各种原因可以作为一种预案对于安装脚本可以自行优化有优化的空间。时间上、日志显示上方便验证和差错