微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 手机设计讨论 > MTK手机平台交流 > FOTA/OTA之後启动第三方APP出現APP Crash

FOTA/OTA之後启动第三方APP出現APP Crash

时间:10-02 整理:3721RD 点击:
[DESCRIPTION]

用FOTA下载OTA包,下载完毕更新;
更新完毕后点击多个三方APP无法进入,提示报错(这些APK都是正常安装,非预置)。
报错信息类似:
Caused by: java.io.IOException: Failed to remove obsolete file fROM /data/dalvikcache/
ARM/data@app@jp.naver.line.android-1@base.apk@classes.dex when searching for dex
file /data/app/jp.naver.line.android-1/base.apk: Permission denied

[SOLUTION]

1.如果apk之前有安装过,OTA升级后会检测到该apk的odex是旧的需要重新去提取,但是因为这个apk贵司长时间没有使用,L版本上默认PackageManagerService判断超过7天,则开机时不会做dexopt而报这种错误,此时一般重启之后这些apk会正常运行。


上述code中 mDexOptLRUThresholdInMills的值是7天,即若此apk上次使用时间(then=pkg.mLastPackageUsageTIMEInMills)+7天还小于当前时间(now),则此apk被判别为never不会被使用的apk,所以就不做dexopt了。那么异常时会出现上面的log。
2.发生异常时如果点击了这几个apk且发现其无法使用(无法使用的原因可能是boot.oat有更新,此时apk的odex档是旧的,需要重新提取才可正常运行),即此时mLastPackageUsageTimeInMills会更新。
所以重新开机后这个条件if (then + mDexOptLRUThresholdInMills < now)就不会满足,即这几个apk会做dexopt,此时能够正确提取odex,这时apk能够正常运行。
3. 这是Google在L版本上的机制,不建议修改,如果需要规避,可以将i.remove();这行给注释掉,即超7天时仍可以正常提取odex.

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top