Merge "Extend isModule check for apk-in-apex" into rvc-dev am: e0b24a3fee

Change-Id: I520c343027d61b59ed0aaf39dc7ddbd32bde6b69
This commit is contained in:
Gavin Corkery
2020-04-21 11:16:06 +00:00
committed by Automerger Merge Worker

View File

@@ -25,6 +25,7 @@ import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.content.pm.PackageInstaller; import android.content.pm.PackageInstaller;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.pm.PackageManagerInternal;
import android.content.pm.VersionedPackage; import android.content.pm.VersionedPackage;
import android.content.rollback.PackageRollbackInfo; import android.content.rollback.PackageRollbackInfo;
import android.content.rollback.RollbackInfo; import android.content.rollback.RollbackInfo;
@@ -41,10 +42,13 @@ import android.util.Slog;
import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.GuardedBy;
import com.android.internal.util.FrameworkStatsLog; import com.android.internal.util.FrameworkStatsLog;
import com.android.server.LocalServices;
import com.android.server.PackageWatchdog; import com.android.server.PackageWatchdog;
import com.android.server.PackageWatchdog.FailureReasons; import com.android.server.PackageWatchdog.FailureReasons;
import com.android.server.PackageWatchdog.PackageHealthObserver; import com.android.server.PackageWatchdog.PackageHealthObserver;
import com.android.server.PackageWatchdog.PackageHealthObserverImpact; import com.android.server.PackageWatchdog.PackageHealthObserverImpact;
import com.android.server.pm.ApexManager;
import com.android.server.pm.parsing.pkg.AndroidPackage;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.File; import java.io.File;
@@ -71,6 +75,7 @@ public final class RollbackPackageHealthObserver implements PackageHealthObserve
private final Context mContext; private final Context mContext;
private final Handler mHandler; private final Handler mHandler;
private final ApexManager mApexManager;
private final File mLastStagedRollbackIdsFile; private final File mLastStagedRollbackIdsFile;
// Staged rollback ids that have been committed but their session is not yet ready // Staged rollback ids that have been committed but their session is not yet ready
@GuardedBy("mPendingStagedRollbackIds") @GuardedBy("mPendingStagedRollbackIds")
@@ -85,6 +90,7 @@ public final class RollbackPackageHealthObserver implements PackageHealthObserve
dataDir.mkdirs(); dataDir.mkdirs();
mLastStagedRollbackIdsFile = new File(dataDir, "last-staged-rollback-ids"); mLastStagedRollbackIdsFile = new File(dataDir, "last-staged-rollback-ids");
PackageWatchdog.getInstance(mContext).registerHealthObserver(this); PackageWatchdog.getInstance(mContext).registerHealthObserver(this);
mApexManager = ApexManager.getInstance();
} }
@Override @Override
@@ -302,6 +308,18 @@ public final class RollbackPackageHealthObserver implements PackageHealthObserve
* Returns true if the package name is the name of a module. * Returns true if the package name is the name of a module.
*/ */
private boolean isModule(String packageName) { private boolean isModule(String packageName) {
// Check if the package is an APK inside an APEX. If it is, use the parent APEX package when
// querying PackageManager.
PackageManagerInternal pmi = LocalServices.getService(PackageManagerInternal.class);
AndroidPackage apkPackage = pmi.getPackage(packageName);
if (apkPackage != null) {
String apexPackageName = mApexManager.getActiveApexPackageNameContainingPackage(
apkPackage);
if (apexPackageName != null) {
packageName = apexPackageName;
}
}
PackageManager pm = mContext.getPackageManager(); PackageManager pm = mContext.getPackageManager();
try { try {
return pm.getModuleInfo(packageName, 0) != null; return pm.getModuleInfo(packageName, 0) != null;