问题描述:
下载三个apk(http://pan.baidu.com/s/1geS25r1):
在android5.0 及以上平台:
1、将331.apk 替换掉系统内置的/system/vendor/app/SkyAppStore/SkyAppStore.apk ,并 rm -rf /data/data/com.tianci.appstore。rm -rf /data/app/com.tianci.appstore-xxx。 然后重启电视
2、pm install -r /mnt/usb/sda1/523.apk,恢复出厂设置:保留应用。问题1:
3、再次pm install -r /mnt/usb/sda1/622.apk,。 问题2:
问题:
1、电视重启后,通过pm path com.tianci.appstore发现,系统用的是system下的,而不是data下的
2、再次安装新的后,pm path com.tianci.appstore 使用的是data/app/com.tianci.appstore-2。而com.tianci.appstore-1还在。
任务:
1、查android源码,找出问题1/2的原因
2、提供解决方案:如何避免com.tianci.appstore-1垃圾的产生。
问题1产生的原因:
系统恢复出厂设置时会删除packages.xml和packages.list文件,这两个文件中记录的是系统已安装的应用信息,包括用户应用和系统应用,系统再次开机时,回会先扫描system下的app安装,之后才会扫描data下面的app进行安装,其中扫描安装过程中会调用一下两个判断(位于PackageManagerService.java):
if (mPackages.containsKey(pkg.packageName) || mSharedLibraries.containsKey(pkg.packageName)) {
throw new PackageManagerException(INSTALL_FAILED_DUPLICATE_PACKAGE,"Application package " +pkg.packageName+ " already installed. Skipping duplicate.");
}
这个判断是检查该apk是否已被安装过,若已被安装过得apk包含这个apk信息,则直接抛出异常不再重复安装,所以对于系