diff options
4 files changed, 14 insertions, 4 deletions
diff --git a/core/java/android/os/storage/StorageManager.java b/core/java/android/os/storage/StorageManager.java index 48e2827f19e1..dbf042063364 100644 --- a/core/java/android/os/storage/StorageManager.java +++ b/core/java/android/os/storage/StorageManager.java @@ -273,12 +273,15 @@ public class StorageManager { public static final int FLAG_STORAGE_CE = IInstalld.FLAG_STORAGE_CE; /** {@hide} */ public static final int FLAG_STORAGE_EXTERNAL = IInstalld.FLAG_STORAGE_EXTERNAL; + /** @hide */ + public static final int FLAG_STORAGE_SDK = IInstalld.FLAG_STORAGE_SDK; /** {@hide} */ @IntDef(prefix = "FLAG_STORAGE_", value = { FLAG_STORAGE_DE, FLAG_STORAGE_CE, - FLAG_STORAGE_EXTERNAL + FLAG_STORAGE_EXTERNAL, + FLAG_STORAGE_SDK, }) @Retention(RetentionPolicy.SOURCE) public @interface StorageFlags {} diff --git a/services/core/java/com/android/server/pm/AppDataHelper.java b/services/core/java/com/android/server/pm/AppDataHelper.java index 0b0d1458c8de..c24bfec5fb43 100644 --- a/services/core/java/com/android/server/pm/AppDataHelper.java +++ b/services/core/java/com/android/server/pm/AppDataHelper.java @@ -218,8 +218,9 @@ final class AppDataHelper { final String seInfo = pkgSeInfo + seInfoUser; final int targetSdkVersion = pkg.getTargetSdkVersion(); + final boolean usesSdk = !pkg.getUsesSdkLibraries().isEmpty(); final CreateAppDataArgs args = Installer.buildCreateAppDataArgs(volumeUuid, packageName, - userId, flags, appId, seInfo, targetSdkVersion); + userId, flags, appId, seInfo, targetSdkVersion, usesSdk); args.previousAppId = previousAppId; return batch.createAppData(args).whenComplete((ceDataInode, e) -> { diff --git a/services/core/java/com/android/server/pm/Installer.java b/services/core/java/com/android/server/pm/Installer.java index 742cc0237cec..36bad3e604d5 100644 --- a/services/core/java/com/android/server/pm/Installer.java +++ b/services/core/java/com/android/server/pm/Installer.java @@ -92,6 +92,7 @@ public class Installer extends SystemService { public static final int FLAG_STORAGE_DE = IInstalld.FLAG_STORAGE_DE; public static final int FLAG_STORAGE_CE = IInstalld.FLAG_STORAGE_CE; public static final int FLAG_STORAGE_EXTERNAL = IInstalld.FLAG_STORAGE_EXTERNAL; + public static final int FLAG_STORAGE_SDK = IInstalld.FLAG_STORAGE_SDK; public static final int FLAG_CLEAR_CACHE_ONLY = IInstalld.FLAG_CLEAR_CACHE_ONLY; public static final int FLAG_CLEAR_CODE_CACHE_ONLY = IInstalld.FLAG_CLEAR_CODE_CACHE_ONLY; @@ -190,12 +191,16 @@ public class Installer extends SystemService { // We explicitly do NOT set previousAppId because the default value should always be 0. // Manually override previousAppId after building CreateAppDataArgs for specific behaviors. static CreateAppDataArgs buildCreateAppDataArgs(String uuid, String packageName, - int userId, int flags, int appId, String seInfo, int targetSdkVersion) { + int userId, int flags, int appId, String seInfo, int targetSdkVersion, + boolean usesSdk) { final CreateAppDataArgs args = new CreateAppDataArgs(); args.uuid = uuid; args.packageName = packageName; args.userId = userId; args.flags = flags; + if (usesSdk) { + args.flags |= FLAG_STORAGE_SDK; + } args.appId = appId; args.seInfo = seInfo; args.targetSdkVersion = targetSdkVersion; diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java index d3665749a7f8..86d7b517ea76 100644 --- a/services/core/java/com/android/server/pm/Settings.java +++ b/services/core/java/com/android/server/pm/Settings.java @@ -4190,10 +4190,11 @@ public final class Settings implements Watchable, Snappable { // Accumulate all required args and call the installer after mPackages lock // has been released final String seInfo = AndroidPackageUtils.getSeInfo(ps.getPkg(), ps); + final boolean usesSdk = !ps.getPkg().getUsesSdkLibraries().isEmpty(); final CreateAppDataArgs args = Installer.buildCreateAppDataArgs( ps.getVolumeUuid(), ps.getPackageName(), userHandle, StorageManager.FLAG_STORAGE_CE | StorageManager.FLAG_STORAGE_DE, - ps.getAppId(), seInfo, ps.getPkg().getTargetSdkVersion()); + ps.getAppId(), seInfo, ps.getPkg().getTargetSdkVersion(), usesSdk); batch.createAppData(args); } else { // Make sure the app is excluded from storage mapping for this user |