阅读:9887回复:5
Android OTA升级的问题
我们客户最近反映了一个问题,之前给他们出的一版S905X-6.0的固件,他们发现Google play service自动更新后,play store里面没法更新Youtube了,这个问题也不是重点,没必要去纠结为什么没法更新的问题, 客户想要的是Youtube更新,给他们推送OTA差分升级就可以,顺便把一些他们之前提的其他问题一块也解决了一起更新。
问题来了,Youtube是打包在/system/preinstall/ 目录下面,做过Amlogic的同学都知道,他们给的一个安装APK的补丁,主要是开机启动service,运行/system/bin/preinstall.sh脚本: MARK=/data/local/symbol_thirdpart_apks_installed 脚本里面定义了一个文件:MARK=/data/local/symbol_thirdpart_apks_installed 第一次开机是没有这个文件的,所以会执行安装命令,安装完成后touch这个文件,以后就不会再执行安装命令了。因为OTA升级后,这个文件依然存在,所以不会安装/system/preinstall/ 目录下的APK,对于这个问题我刚开始还琢磨了许久,想了很多种方法,考虑了各种问题,后来发现是我想多了,当时是晚上真的是头脑不清晰。今天早上过来略加思索,马上明白过来,原来乳此简单,果然是早上头脑清醒。只需要修改一下脚本里的这个文件MARK=/data/local/symbol_thirdpart_apks_installed就好了。比如我现在是OTA升级v1版本,修改为MARK=/data/local/symbol_thirdpart_apks_installed_v1就好了。 但是OTA升级之后发现,apk依然没有更新,这时候不要慌,看看到底发生了什么,检查了一下,发现安装命令确实有执行过了,MARK=/data/local/symbol_thirdpart_apks_installed_v1已经创建了,于是删掉这个文件,手动执行了一下脚本,发现: booting the first time, so pre-install some APKs.原来是apk已经存在,所以安装失败了,检查一下脚本的安装命令: find $PKGS -name "*\.apk" -exec sh /system/bin/pm install {} \;改成: find $PKGS -name "*\.apk" -exec sh /system/bin/pm install -r {} \; 加上 -r 强制覆盖就解决了 |
|
最新喜欢:VastSt...
|
沙发#
发布于:2019-09-25 12:10
|
|
|
板凳#
发布于:2020-12-29 22:13
今天在想preinstall这个脚本的原理,就是每次开机时检测mask文件,如果mask不存在就安装apk,并创建mask,但存在一个问题,如果用户删除这个预装的应用,再想使用这个应用时就只能恢复出厂设置了。因此,我修改了一下脚本:
#!/system/bin/sh MARK=/data/local/symbol_thirdpart_apks_installed PKGS=/vendor/preinstall/ for i in `busybox find $PKGS -name "*.apk"`; do pkg=`echo $i|cut -d '/' -f 4|cut -d '.' -f 1` installed=`pm list package $pkg` if [ -z $installed ]; then /system/bin/pm install $i fi done 要求apk以包名命名,比如qqmusic.apk。 即使应用被用户删除,下次重启时检测到包名不存在时还会自动安装。 脚本写得有点丑,后面有时间再优化一下cut语句 |
|
地板#
发布于:2020-12-30 09:30
老铁不错,shell语句用的出神入化,确实是个不错的方法。
|
|
|
4楼#
发布于:2020-12-30 09:34
|
|
|
5楼#
发布于:2020-12-31 11:41
|
|