diff options
| -rw-r--r-- | services/core/java/com/android/server/am/ProcessList.java | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/am/ProcessList.java b/services/core/java/com/android/server/am/ProcessList.java index 2def50efee60..1ad0bcea711c 100644 --- a/services/core/java/com/android/server/am/ProcessList.java +++ b/services/core/java/com/android/server/am/ProcessList.java @@ -135,6 +135,7 @@ import com.android.server.Watchdog; import com.android.server.am.ActivityManagerService.ProcessChangeItem; import com.android.server.compat.PlatformCompat; import com.android.server.pm.dex.DexManager; +import com.android.server.pm.parsing.pkg.AndroidPackage; import com.android.server.pm.pkg.PackageStateInternal; import com.android.server.wm.ActivityServiceConnectionsHolder; import com.android.server.wm.WindowManagerService; @@ -2379,6 +2380,8 @@ public final class ProcessList { final String[] targetPackagesList = sharedPackages.length == 0 ? new String[]{app.info.packageName} : sharedPackages; + final boolean hasAppStorage = hasAppStorage(pmInt, app.info.packageName); + pkgDataInfoMap = getPackageAppDataInfoMap(pmInt, targetPackagesList, uid); if (pkgDataInfoMap == null) { // TODO(b/152760674): Handle inode == 0 case properly, now we just give it a @@ -2401,6 +2404,12 @@ public final class ProcessList { bindMountAppsData = false; } + if (!hasAppStorage) { + bindMountAppsData = false; + pkgDataInfoMap = null; + allowlistedAppDataInfoMap = null; + } + int userId = UserHandle.getUserId(uid); StorageManagerInternal storageManagerInternal = LocalServices.getService( StorageManagerInternal.class); @@ -2488,6 +2497,17 @@ public final class ProcessList { } } + private boolean hasAppStorage(PackageManagerInternal pmInt, String packageName) { + final AndroidPackage pkg = pmInt.getPackage(packageName); + if (pkg == null) { + Slog.w(TAG, "Unknown package " + packageName); + return false; + } + final PackageManager.Property noAppStorageProp = + pkg.getProperties().get(PackageManager.PROPERTY_NO_APP_DATA_STORAGE); + return noAppStorageProp == null || !noAppStorageProp.getBoolean(); + } + @GuardedBy("mService") void startProcessLocked(ProcessRecord app, HostingRecord hostingRecord, int zygotePolicyFlags) { startProcessLocked(app, hostingRecord, zygotePolicyFlags, null /* abiOverride */); |