Save package dex usage info after secondary dex reconciliation
Bug: 1833991
Test: add a bogus entry to /syste/data/package-dex-usage.list
adb shell cmd package reconcile-secondary-dex-files
com.android.google.gms
wait a bit and check the bogus entry is gone
(cherry picked from commit b109741102)
Change-Id: I23248b11ea07bceb6527f55bf62618d1b2c3d83d
Merged-In: Ic07126bfb8730933081a5e010e3c357d338786e8
This commit is contained in:
@@ -291,6 +291,7 @@ public class DexManager {
|
||||
return;
|
||||
}
|
||||
Set<String> dexFilesToRemove = new HashSet<>();
|
||||
boolean updated = false;
|
||||
for (Map.Entry<String, DexUseInfo> entry : useInfo.getDexUseInfoMap().entrySet()) {
|
||||
String dexPath = entry.getKey();
|
||||
DexUseInfo dexUseInfo = entry.getValue();
|
||||
@@ -311,7 +312,8 @@ public class DexManager {
|
||||
Slog.d(TAG, "Could not find package when compiling secondary dex " + packageName
|
||||
+ " for user " + dexUseInfo.getOwnerUserId());
|
||||
// Update the usage and continue, another user might still have the package.
|
||||
mPackageDexUsage.removeUserPackage(packageName, dexUseInfo.getOwnerUserId());
|
||||
updated = mPackageDexUsage.removeUserPackage(
|
||||
packageName, dexUseInfo.getOwnerUserId()) || updated;
|
||||
continue;
|
||||
}
|
||||
ApplicationInfo info = pkg.applicationInfo;
|
||||
@@ -322,7 +324,8 @@ public class DexManager {
|
||||
flags |= StorageManager.FLAG_STORAGE_CE;
|
||||
} else {
|
||||
Slog.e(TAG, "Could not infer CE/DE storage for package " + info.packageName);
|
||||
mPackageDexUsage.removeUserPackage(packageName, dexUseInfo.getOwnerUserId());
|
||||
updated = mPackageDexUsage.removeUserPackage(
|
||||
packageName, dexUseInfo.getOwnerUserId()) || updated;
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -338,8 +341,13 @@ public class DexManager {
|
||||
}
|
||||
}
|
||||
if (!dexStillExists) {
|
||||
mPackageDexUsage.removeDexFile(packageName, dexPath, dexUseInfo.getOwnerUserId());
|
||||
updated = mPackageDexUsage.removeDexFile(
|
||||
packageName, dexPath, dexUseInfo.getOwnerUserId()) || updated;
|
||||
}
|
||||
|
||||
}
|
||||
if (updated) {
|
||||
mPackageDexUsage.maybeWriteAsync();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -378,6 +378,8 @@ public class PackageDexUsage extends AbstractStatsBase<Void> {
|
||||
|
||||
/**
|
||||
* Remove all the records about package {@code packageName} belonging to user {@code userId}.
|
||||
* @return true if the record was found and actually deleted,
|
||||
* false if the record doesn't exist
|
||||
*/
|
||||
public boolean removeUserPackage(String packageName, int userId) {
|
||||
synchronized (mPackageUseInfoMap) {
|
||||
@@ -402,6 +404,8 @@ public class PackageDexUsage extends AbstractStatsBase<Void> {
|
||||
/**
|
||||
* Remove the secondary dex file record belonging to the package {@code packageName}
|
||||
* and user {@code userId}.
|
||||
* @return true if the record was found and actually deleted,
|
||||
* false if the record doesn't exist
|
||||
*/
|
||||
public boolean removeDexFile(String packageName, String dexFile, int userId) {
|
||||
synchronized (mPackageUseInfoMap) {
|
||||
|
||||
Reference in New Issue
Block a user