diff options
| author | 2024-08-19 15:47:52 +0000 | |
|---|---|---|
| committer | 2024-08-19 15:47:52 +0000 | |
| commit | c9f170ca81d92dbb14ac8046c84959be374a31f2 (patch) | |
| tree | 638314e5cd2375cd361f46fe6fd692e903709332 | |
| parent | 7b945edaea7a93773655045fcfcd7866966d912a (diff) | |
| parent | 377e629c70211a2cbc38ea0a80b6b8bdd02a9a27 (diff) | |
Merge "Use public API to determine apk-in-apex" into main
| -rw-r--r-- | services/core/java/com/android/server/rollback/RollbackPackageHealthObserver.java | 48 |
1 files changed, 36 insertions, 12 deletions
diff --git a/services/core/java/com/android/server/rollback/RollbackPackageHealthObserver.java b/services/core/java/com/android/server/rollback/RollbackPackageHealthObserver.java index e084813b893c..e91097cbd8f8 100644 --- a/services/core/java/com/android/server/rollback/RollbackPackageHealthObserver.java +++ b/services/core/java/com/android/server/rollback/RollbackPackageHealthObserver.java @@ -16,6 +16,8 @@ package com.android.server.rollback; +import static android.content.pm.Flags.provideInfoOfApkInApex; + import android.annotation.AnyThread; import android.annotation.NonNull; import android.annotation.Nullable; @@ -23,6 +25,7 @@ import android.annotation.WorkerThread; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; +import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.VersionedPackage; import android.content.rollback.PackageRollbackInfo; @@ -486,19 +489,40 @@ public final class RollbackPackageHealthObserver implements PackageHealthObserve */ @AnyThread 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. - String apexPackageName = mApexManager.getActiveApexPackageNameContainingPackage( - packageName); - if (apexPackageName != null) { - packageName = apexPackageName; - } - PackageManager pm = mContext.getPackageManager(); - try { - return pm.getModuleInfo(packageName, 0) != null; - } catch (PackageManager.NameNotFoundException ignore) { - return false; + + if (Flags.refactorCrashrecovery() && provideInfoOfApkInApex()) { + // Check if the package is listed among the system modules. + boolean isApex = false; + try { + isApex = (pm.getModuleInfo(packageName, 0 /* flags */) != null); + } catch (PackageManager.NameNotFoundException e) { + //pass + } + + // Check if the package is an APK inside an APEX. + boolean isApkInApex = false; + try { + final PackageInfo pkg = pm.getPackageInfo(packageName, 0 /* flags */); + isApkInApex = (pkg.getApexPackageName() != null); + } catch (PackageManager.NameNotFoundException e) { + // pass + } + return isApex || isApkInApex; + } else { + // Check if the package is an APK inside an APEX. If it is, use the parent APEX package + // when querying PackageManager. + String apexPackageName = mApexManager.getActiveApexPackageNameContainingPackage( + packageName); + if (apexPackageName != null) { + packageName = apexPackageName; + } + + try { + return pm.getModuleInfo(packageName, 0) != null; + } catch (PackageManager.NameNotFoundException ignore) { + return false; + } } } |