diff options
5 files changed, 251 insertions, 28 deletions
diff --git a/core/java/android/content/pm/parsing/ApkLite.java b/core/java/android/content/pm/parsing/ApkLite.java index 0127adc346a2..71cfd1b1e1cb 100644 --- a/core/java/android/content/pm/parsing/ApkLite.java +++ b/core/java/android/content/pm/parsing/ApkLite.java @@ -139,6 +139,39 @@ public class ApkLite { */ private final boolean mIsSdkLibrary; + /** + * Indicates whether this application's data will be cleared on a failed restore. + */ + private final boolean mClearUserDataAllowed; + + /** + * Set to <code>false</code> if the application does not wish to permit any OS-driven + * backups of its data; <code>true</code> otherwise. + */ + private final boolean mBackupAllowed; + + /** + * When set, the default data storage directory for this app is pointed at + * the device-protected location. + */ + private final boolean mDefaultToDeviceProtectedStorage; + + /** + * If {@code true} this app requests full external storage access. + */ + private final boolean mRequestLegacyExternalStorage; + + /** + * Indicates whether this application has declared its user data as fragile, causing the + * system to prompt the user on whether to keep the user data on uninstall. + */ + private final boolean mUserDataFragile; + + /** + * Indicates whether this application's data will be cleared on a failed restore. + */ + private final boolean mClearUserDataOnFailedRestoreAllowed; + public ApkLite(String path, String packageName, String splitName, boolean isFeatureSplit, String configForSplit, String usesSplitName, boolean isSplitRequired, int versionCode, int versionCodeMajor, int revisionCode, int installLocation, @@ -149,7 +182,10 @@ public class ApkLite { String requiredSystemPropertyName, String requiredSystemPropertyValue, int minSdkVersion, int targetSdkVersion, int rollbackDataPolicy, Set<String> requiredSplitTypes, Set<String> splitTypes, - boolean hasDeviceAdminReceiver, boolean isSdkLibrary) { + boolean hasDeviceAdminReceiver, boolean isSdkLibrary, boolean clearUserDataAllowed, + boolean backupAllowed, boolean defaultToDeviceProtectedStorage, + boolean requestLegacyExternalStorage, boolean userDataFragile, + boolean clearUserDataOnFailedRestoreAllowed) { mPath = path; mPackageName = packageName; mSplitName = splitName; @@ -183,6 +219,12 @@ public class ApkLite { mRollbackDataPolicy = rollbackDataPolicy; mHasDeviceAdminReceiver = hasDeviceAdminReceiver; mIsSdkLibrary = isSdkLibrary; + mClearUserDataAllowed = clearUserDataAllowed; + mBackupAllowed = backupAllowed; + mDefaultToDeviceProtectedStorage = defaultToDeviceProtectedStorage; + mRequestLegacyExternalStorage = requestLegacyExternalStorage; + mUserDataFragile = userDataFragile; + mClearUserDataOnFailedRestoreAllowed = clearUserDataOnFailedRestoreAllowed; } public ApkLite(String path, ArchivedPackageParcel archivedPackage) { @@ -219,6 +261,12 @@ public class ApkLite { mRollbackDataPolicy = 0; mHasDeviceAdminReceiver = false; mIsSdkLibrary = false; + mClearUserDataAllowed = archivedPackage.clearUserDataAllowed; + mBackupAllowed = archivedPackage.backupAllowed; + mDefaultToDeviceProtectedStorage = archivedPackage.defaultToDeviceProtectedStorage; + mRequestLegacyExternalStorage = archivedPackage.requestLegacyExternalStorage; + mUserDataFragile = archivedPackage.userDataFragile; + mClearUserDataOnFailedRestoreAllowed = archivedPackage.clearUserDataOnFailedRestoreAllowed; } /** @@ -511,6 +559,9 @@ public class ApkLite { return mRollbackDataPolicy; } + /** + * Indicates if this app contains a {@link android.app.admin.DeviceAdminReceiver}. + */ @DataClass.Generated.Member public boolean isHasDeviceAdminReceiver() { return mHasDeviceAdminReceiver; @@ -524,11 +575,62 @@ public class ApkLite { return mIsSdkLibrary; } + /** + * Indicates whether this application's data will be cleared on a failed restore. + */ + @DataClass.Generated.Member + public boolean isClearUserDataAllowed() { + return mClearUserDataAllowed; + } + + /** + * Set to <code>false</code> if the application does not wish to permit any OS-driven + * backups of its data; <code>true</code> otherwise. + */ + @DataClass.Generated.Member + public boolean isBackupAllowed() { + return mBackupAllowed; + } + + /** + * When set, the default data storage directory for this app is pointed at + * the device-protected location. + */ + @DataClass.Generated.Member + public boolean isDefaultToDeviceProtectedStorage() { + return mDefaultToDeviceProtectedStorage; + } + + /** + * If {@code true} this app requests full external storage access. + */ + @DataClass.Generated.Member + public boolean isRequestLegacyExternalStorage() { + return mRequestLegacyExternalStorage; + } + + /** + * Indicates whether this application has declared its user data as fragile, causing the + * system to prompt the user on whether to keep the user data on uninstall. + */ + @DataClass.Generated.Member + public boolean isUserDataFragile() { + return mUserDataFragile; + } + + /** + * Indicates whether this application's data will be cleared on a failed restore. + */ + @DataClass.Generated.Member + public boolean isClearUserDataOnFailedRestoreAllowed() { + return mClearUserDataOnFailedRestoreAllowed; + } + @DataClass.Generated( - time = 1643063342990L, + time = 1693422809896L, codegenVersion = "1.0.23", sourceFile = "frameworks/base/core/java/android/content/pm/parsing/ApkLite.java", - inputSignatures = "private final @android.annotation.NonNull java.lang.String mPackageName\nprivate final @android.annotation.NonNull java.lang.String mPath\nprivate final @android.annotation.Nullable java.lang.String mSplitName\nprivate final @android.annotation.Nullable java.lang.String mUsesSplitName\nprivate final @android.annotation.Nullable java.lang.String mConfigForSplit\nprivate final @android.annotation.Nullable java.util.Set<java.lang.String> mRequiredSplitTypes\nprivate final @android.annotation.Nullable java.util.Set<java.lang.String> mSplitTypes\nprivate final int mVersionCodeMajor\nprivate final int mVersionCode\nprivate final int mRevisionCode\nprivate final int mInstallLocation\nprivate final int mMinSdkVersion\nprivate final int mTargetSdkVersion\nprivate final @android.annotation.NonNull android.content.pm.VerifierInfo[] mVerifiers\nprivate final @android.annotation.NonNull android.content.pm.SigningDetails mSigningDetails\nprivate final boolean mFeatureSplit\nprivate final boolean mIsolatedSplits\nprivate final boolean mSplitRequired\nprivate final boolean mCoreApp\nprivate final boolean mDebuggable\nprivate final boolean mProfileableByShell\nprivate final boolean mMultiArch\nprivate final boolean mUse32bitAbi\nprivate final boolean mExtractNativeLibs\nprivate final boolean mUseEmbeddedDex\nprivate final @android.annotation.Nullable java.lang.String mTargetPackageName\nprivate final boolean mOverlayIsStatic\nprivate final int mOverlayPriority\nprivate final @android.annotation.Nullable java.lang.String mRequiredSystemPropertyName\nprivate final @android.annotation.Nullable java.lang.String mRequiredSystemPropertyValue\nprivate final int mRollbackDataPolicy\nprivate final boolean mHasDeviceAdminReceiver\nprivate final boolean mIsSdkLibrary\npublic long getLongVersionCode()\nprivate boolean hasAnyRequiredSplitTypes()\nclass ApkLite extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genConstructor=false, genConstDefs=false)") + inputSignatures = "private final @android.annotation.NonNull java.lang.String mPackageName\nprivate final @android.annotation.NonNull java.lang.String mPath\nprivate final @android.annotation.Nullable java.lang.String mSplitName\nprivate final @android.annotation.Nullable java.lang.String mUsesSplitName\nprivate final @android.annotation.Nullable java.lang.String mConfigForSplit\nprivate final @android.annotation.Nullable java.util.Set<java.lang.String> mRequiredSplitTypes\nprivate final @android.annotation.Nullable java.util.Set<java.lang.String> mSplitTypes\nprivate final int mVersionCodeMajor\nprivate final int mVersionCode\nprivate final int mRevisionCode\nprivate final int mInstallLocation\nprivate final int mMinSdkVersion\nprivate final int mTargetSdkVersion\nprivate final @android.annotation.NonNull android.content.pm.VerifierInfo[] mVerifiers\nprivate final @android.annotation.NonNull android.content.pm.SigningDetails mSigningDetails\nprivate final boolean mFeatureSplit\nprivate final boolean mIsolatedSplits\nprivate final boolean mSplitRequired\nprivate final boolean mCoreApp\nprivate final boolean mDebuggable\nprivate final boolean mProfileableByShell\nprivate final boolean mMultiArch\nprivate final boolean mUse32bitAbi\nprivate final boolean mExtractNativeLibs\nprivate final boolean mUseEmbeddedDex\nprivate final @android.annotation.Nullable java.lang.String mTargetPackageName\nprivate final boolean mOverlayIsStatic\nprivate final int mOverlayPriority\nprivate final @android.annotation.Nullable java.lang.String mRequiredSystemPropertyName\nprivate final @android.annotation.Nullable java.lang.String mRequiredSystemPropertyValue\nprivate final int mRollbackDataPolicy\nprivate final boolean mHasDeviceAdminReceiver\nprivate final boolean mIsSdkLibrary\nprivate final boolean mClearUserDataAllowed\nprivate final boolean mBackupAllowed\nprivate final boolean mDefaultToDeviceProtectedStorage\nprivate final boolean mRequestLegacyExternalStorage\nprivate final boolean mUserDataFragile\nprivate final boolean mClearUserDataOnFailedRestoreAllowed\npublic long getLongVersionCode()\nprivate boolean hasAnyRequiredSplitTypes()\nclass ApkLite extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genConstructor=false, genConstDefs=false)") @Deprecated private void __metadata() {} diff --git a/core/java/android/content/pm/parsing/ApkLiteParseUtils.java b/core/java/android/content/pm/parsing/ApkLiteParseUtils.java index 7e673969aa5e..066ff6896ac8 100644 --- a/core/java/android/content/pm/parsing/ApkLiteParseUtils.java +++ b/core/java/android/content/pm/parsing/ApkLiteParseUtils.java @@ -40,6 +40,7 @@ import android.util.Pair; import android.util.Slog; import com.android.internal.util.ArrayUtils; +import com.android.internal.util.XmlUtils; import libcore.io.IoUtils; @@ -446,6 +447,13 @@ public class ApkLiteParseUtils { int overlayPriority = 0; int rollbackDataPolicy = 0; + boolean clearUserDataAllowed = true; + boolean backupAllowed = true; + boolean defaultToDeviceProtectedStorage = false; + String requestLegacyExternalStorage = null; + boolean userDataFragile = false; + boolean clearUserDataOnFailedRestoreAllowed = true; + String requiredSystemPropertyName = null; String requiredSystemPropertyValue = null; @@ -484,6 +492,23 @@ public class ApkLiteParseUtils { "extractNativeLibs", true); useEmbeddedDex = parser.getAttributeBooleanValue(ANDROID_RES_NAMESPACE, "useEmbeddedDex", false); + + clearUserDataAllowed = parser.getAttributeBooleanValue(ANDROID_RES_NAMESPACE, + "allowClearUserDataOnFailedRestore", true); + backupAllowed = parser.getAttributeBooleanValue(ANDROID_RES_NAMESPACE, + "allowBackup", true); + defaultToDeviceProtectedStorage = parser.getAttributeBooleanValue( + ANDROID_RES_NAMESPACE, + "defaultToDeviceProtectedStorage", false); + userDataFragile = parser.getAttributeBooleanValue(ANDROID_RES_NAMESPACE, + "hasFragileUserData", false); + clearUserDataOnFailedRestoreAllowed = parser.getAttributeBooleanValue( + ANDROID_RES_NAMESPACE, + "allowClearUserDataOnFailedRestore", true); + + requestLegacyExternalStorage = parser.getAttributeValue(ANDROID_RES_NAMESPACE, + "requestLegacyExternalStorage"); + rollbackDataPolicy = parser.getAttributeIntValue(ANDROID_RES_NAMESPACE, "rollbackDataPolicy", 0); String permission = parser.getAttributeValue(ANDROID_RES_NAMESPACE, @@ -604,6 +629,9 @@ public class ApkLiteParseUtils { return input.skip(message); } + boolean isRequestLegacyExternalStorage = XmlUtils.convertValueToBoolean( + requestLegacyExternalStorage, targetSdkVersion < Build.VERSION_CODES.Q); + return input.success( new ApkLite(codePath, packageSplit.first, packageSplit.second, isFeatureSplit, configForSplit, usesSplitName, isSplitRequired, versionCode, @@ -613,7 +641,9 @@ public class ApkLiteParseUtils { overlayIsStatic, overlayPriority, requiredSystemPropertyName, requiredSystemPropertyValue, minSdkVersion, targetSdkVersion, rollbackDataPolicy, requiredSplitTypes.first, requiredSplitTypes.second, - hasDeviceAdminReceiver, isSdkLibrary)); + hasDeviceAdminReceiver, isSdkLibrary, clearUserDataAllowed, backupAllowed, + defaultToDeviceProtectedStorage, isRequestLegacyExternalStorage, + userDataFragile, clearUserDataOnFailedRestoreAllowed)); } private static boolean isDeviceAdminReceiver( diff --git a/core/java/android/content/pm/parsing/PackageLite.java b/core/java/android/content/pm/parsing/PackageLite.java index 51dbde3c79ff..4638af752d33 100644 --- a/core/java/android/content/pm/parsing/PackageLite.java +++ b/core/java/android/content/pm/parsing/PackageLite.java @@ -112,6 +112,33 @@ public class PackageLite { * Indicates if this package is a sdk. */ private final boolean mIsSdkLibrary; + /** + * Indicates whether this application's data will be cleared on a failed restore. + */ + private final boolean mClearUserDataAllowed; + /** + * Set to <code>false</code> if the application does not wish to permit any OS-driven + * backups of its data; <code>true</code> otherwise. + */ + private final boolean mBackupAllowed; + /** + * When set, the default data storage directory for this app is pointed at + * the device-protected location. + */ + private final boolean mDefaultToDeviceProtectedStorage; + /** + * If {@code true} this app requests full external storage access. + */ + private final boolean mRequestLegacyExternalStorage; + /** + * Indicates whether this application has declared its user data as fragile, causing the + * system to prompt the user on whether to keep the user data on uninstall. + */ + private final boolean mUserDataFragile; + /** + * Indicates whether this application's data will be cleared on a failed restore. + */ + private final boolean mClearUserDataOnFailedRestoreAllowed; public PackageLite(String path, String baseApkPath, ApkLite baseApk, String[] splitNames, boolean[] isFeatureSplits, String[] usesSplitNames, @@ -148,6 +175,12 @@ public class PackageLite { mSplitApkPaths = splitApkPaths; mSplitRevisionCodes = splitRevisionCodes; mTargetSdk = targetSdk; + mClearUserDataAllowed = baseApk.isClearUserDataAllowed(); + mBackupAllowed = baseApk.isBackupAllowed(); + mDefaultToDeviceProtectedStorage = baseApk.isDefaultToDeviceProtectedStorage(); + mRequestLegacyExternalStorage = baseApk.isRequestLegacyExternalStorage(); + mUserDataFragile = baseApk.isUserDataFragile(); + mClearUserDataOnFailedRestoreAllowed = baseApk.isClearUserDataOnFailedRestoreAllowed(); } /** @@ -426,11 +459,62 @@ public class PackageLite { return mIsSdkLibrary; } + /** + * Indicates whether this application's data will be cleared on a failed restore. + */ + @DataClass.Generated.Member + public boolean isClearUserDataAllowed() { + return mClearUserDataAllowed; + } + + /** + * Set to <code>false</code> if the application does not wish to permit any OS-driven + * backups of its data; <code>true</code> otherwise. + */ + @DataClass.Generated.Member + public boolean isBackupAllowed() { + return mBackupAllowed; + } + + /** + * When set, the default data storage directory for this app is pointed at + * the device-protected location. + */ + @DataClass.Generated.Member + public boolean isDefaultToDeviceProtectedStorage() { + return mDefaultToDeviceProtectedStorage; + } + + /** + * If {@code true} this app requests full external storage access. + */ + @DataClass.Generated.Member + public boolean isRequestLegacyExternalStorage() { + return mRequestLegacyExternalStorage; + } + + /** + * Indicates whether this application has declared its user data as fragile, causing the + * system to prompt the user on whether to keep the user data on uninstall. + */ + @DataClass.Generated.Member + public boolean isUserDataFragile() { + return mUserDataFragile; + } + + /** + * Indicates whether this application's data will be cleared on a failed restore. + */ + @DataClass.Generated.Member + public boolean isClearUserDataOnFailedRestoreAllowed() { + return mClearUserDataOnFailedRestoreAllowed; + } + @DataClass.Generated( - time = 1693264166050L, + time = 1693423910860L, codegenVersion = "1.0.23", sourceFile = "frameworks/base/core/java/android/content/pm/parsing/PackageLite.java", - inputSignatures = "private final @android.annotation.NonNull java.lang.String mPackageName\nprivate final @android.annotation.NonNull java.lang.String mPath\nprivate final @android.annotation.NonNull java.lang.String mBaseApkPath\nprivate final @android.annotation.Nullable java.lang.String[] mSplitApkPaths\nprivate final @android.annotation.Nullable java.lang.String[] mSplitNames\nprivate final @android.annotation.Nullable java.lang.String[] mUsesSplitNames\nprivate final @android.annotation.Nullable java.lang.String[] mConfigForSplit\nprivate final @android.annotation.Nullable java.util.Set<java.lang.String> mBaseRequiredSplitTypes\nprivate final @android.annotation.Nullable java.util.Set<java.lang.String>[] mRequiredSplitTypes\nprivate final @android.annotation.Nullable java.util.Set<java.lang.String>[] mSplitTypes\nprivate final int mVersionCodeMajor\nprivate final int mVersionCode\nprivate final int mTargetSdk\nprivate final int mBaseRevisionCode\nprivate final @android.annotation.Nullable int[] mSplitRevisionCodes\nprivate final int mInstallLocation\nprivate final @android.annotation.NonNull android.content.pm.VerifierInfo[] mVerifiers\nprivate final @android.annotation.NonNull android.content.pm.SigningDetails mSigningDetails\nprivate final @android.annotation.Nullable boolean[] mIsFeatureSplits\nprivate final boolean mIsolatedSplits\nprivate final boolean mSplitRequired\nprivate final boolean mCoreApp\nprivate final boolean mDebuggable\nprivate final boolean mMultiArch\nprivate final boolean mUse32bitAbi\nprivate final boolean mExtractNativeLibs\nprivate final boolean mProfileableByShell\nprivate final boolean mUseEmbeddedDex\nprivate final boolean mIsSdkLibrary\npublic java.util.List<java.lang.String> getAllApkPaths()\npublic long getLongVersionCode()\nprivate boolean hasAnyRequiredSplitTypes()\nclass PackageLite extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genConstructor=false, genConstDefs=false)") + inputSignatures = "private final @android.annotation.NonNull java.lang.String mPackageName\nprivate final @android.annotation.NonNull java.lang.String mPath\nprivate final @android.annotation.NonNull java.lang.String mBaseApkPath\nprivate final @android.annotation.Nullable java.lang.String[] mSplitApkPaths\nprivate final @android.annotation.Nullable java.lang.String[] mSplitNames\nprivate final @android.annotation.Nullable java.lang.String[] mUsesSplitNames\nprivate final @android.annotation.Nullable java.lang.String[] mConfigForSplit\nprivate final @android.annotation.Nullable java.util.Set<java.lang.String> mBaseRequiredSplitTypes\nprivate final @android.annotation.Nullable java.util.Set<java.lang.String>[] mRequiredSplitTypes\nprivate final @android.annotation.Nullable java.util.Set<java.lang.String>[] mSplitTypes\nprivate final int mVersionCodeMajor\nprivate final int mVersionCode\nprivate final int mTargetSdk\nprivate final int mBaseRevisionCode\nprivate final @android.annotation.Nullable int[] mSplitRevisionCodes\nprivate final int mInstallLocation\nprivate final @android.annotation.NonNull android.content.pm.VerifierInfo[] mVerifiers\nprivate final @android.annotation.NonNull android.content.pm.SigningDetails mSigningDetails\nprivate final @android.annotation.Nullable boolean[] mIsFeatureSplits\nprivate final boolean mIsolatedSplits\nprivate final boolean mSplitRequired\nprivate final boolean mCoreApp\nprivate final boolean mDebuggable\nprivate final boolean mMultiArch\nprivate final boolean mUse32bitAbi\nprivate final boolean mExtractNativeLibs\nprivate final boolean mProfileableByShell\nprivate final boolean mUseEmbeddedDex\nprivate final boolean mIsSdkLibrary\nprivate final boolean mClearUserDataAllowed\nprivate final boolean mBackupAllowed\nprivate final boolean mDefaultToDeviceProtectedStorage\nprivate final boolean mRequestLegacyExternalStorage\nprivate final boolean mUserDataFragile\nprivate final boolean mClearUserDataOnFailedRestoreAllowed\npublic java.util.List<java.lang.String> getAllApkPaths()\npublic long getLongVersionCode()\nprivate boolean hasAnyRequiredSplitTypes()\nclass PackageLite extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genConstructor=false, genConstDefs=false)") @Deprecated private void __metadata() {} diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 64e8f7a16eba..8faadba759fa 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -116,7 +116,11 @@ import android.content.pm.UserPackage; import android.content.pm.VerifierDeviceIdentity; import android.content.pm.VersionedPackage; import android.content.pm.overlay.OverlayPaths; +import android.content.pm.parsing.ApkLite; +import android.content.pm.parsing.ApkLiteParseUtils; import android.content.pm.parsing.PackageLite; +import android.content.pm.parsing.result.ParseResult; +import android.content.pm.parsing.result.ParseTypeImpl; import android.content.res.Resources; import android.database.ContentObserver; import android.graphics.Bitmap; @@ -6301,33 +6305,32 @@ public class PackageManagerService implements PackageSender, TestUtilityService @Override public ArchivedPackageParcel getArchivedPackage(String apkPath) { - final ParsedPackage parsedPackage; - try (PackageParser2 pp = mInjector.getPreparingPackageParser()) { - parsedPackage = pp.parsePackage(new File(apkPath), - getDefParseFlags() | ParsingPackageUtils.PARSE_COLLECT_CERTIFICATES, false); - } catch (PackageManagerException e) { - throw new IllegalArgumentException("Failed parse", e); + ParseTypeImpl input = ParseTypeImpl.forDefaultParsing(); + ParseResult<ApkLite> result = ApkLiteParseUtils.parseApkLite(input.reset(), + new File(apkPath), ParsingPackageUtils.PARSE_COLLECT_CERTIFICATES); + if (result.isError()) { + throw new IllegalArgumentException(result.getErrorMessage(), result.getException()); } + final ApkLite apk = result.getResult(); ArchivedPackageParcel archPkg = new ArchivedPackageParcel(); - archPkg.packageName = parsedPackage.getPackageName(); - archPkg.signingDetails = parsedPackage.getSigningDetails(); + archPkg.packageName = apk.getPackageName(); + archPkg.signingDetails = apk.getSigningDetails(); - long longVersionCode = parsedPackage.getLongVersionCode(); - archPkg.versionCodeMajor = (int) (longVersionCode >> 32); - archPkg.versionCode = (int) longVersionCode; + archPkg.versionCodeMajor = apk.getVersionCodeMajor(); + archPkg.versionCode = apk.getVersionCode(); - archPkg.targetSdkVersion = parsedPackage.getTargetSdkVersion(); + archPkg.targetSdkVersion = apk.getTargetSdkVersion(); // These get translated in flags important for user data management. - archPkg.clearUserDataAllowed = parsedPackage.isClearUserDataAllowed(); - archPkg.backupAllowed = parsedPackage.isBackupAllowed(); + archPkg.clearUserDataAllowed = apk.isClearUserDataAllowed(); + archPkg.backupAllowed = apk.isBackupAllowed(); archPkg.defaultToDeviceProtectedStorage = - parsedPackage.isDefaultToDeviceProtectedStorage(); - archPkg.requestLegacyExternalStorage = parsedPackage.isRequestLegacyExternalStorage(); - archPkg.userDataFragile = parsedPackage.isUserDataFragile(); + apk.isDefaultToDeviceProtectedStorage(); + archPkg.requestLegacyExternalStorage = apk.isRequestLegacyExternalStorage(); + archPkg.userDataFragile = apk.isUserDataFragile(); archPkg.clearUserDataOnFailedRestoreAllowed = - parsedPackage.isClearUserDataOnFailedRestoreAllowed(); + apk.isClearUserDataOnFailedRestoreAllowed(); return archPkg; } diff --git a/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageUtils.java b/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageUtils.java index d9ad3537c56c..2d55b9f8e16a 100644 --- a/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageUtils.java +++ b/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageUtils.java @@ -513,17 +513,21 @@ public class ParsingPackageUtils { // parseBaseAppBasicFlags pkg // Default true - .setBackupAllowed(true) - .setClearUserDataAllowed(true) - .setClearUserDataOnFailedRestoreAllowed(true) + .setBackupAllowed(lite.isBackupAllowed()) + .setClearUserDataAllowed(lite.isClearUserDataAllowed()) + .setClearUserDataOnFailedRestoreAllowed( + lite.isClearUserDataOnFailedRestoreAllowed()) .setAllowNativeHeapPointerTagging(true) .setEnabled(true) .setExtractNativeLibrariesRequested(true) // targetSdkVersion gated .setAllowAudioPlaybackCapture(targetSdk >= Build.VERSION_CODES.Q) .setHardwareAccelerated(targetSdk >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) - .setRequestLegacyExternalStorage(targetSdk < Build.VERSION_CODES.Q) + .setRequestLegacyExternalStorage(lite.isRequestLegacyExternalStorage()) .setCleartextTrafficAllowed(targetSdk < Build.VERSION_CODES.P) + // Default false + .setDefaultToDeviceProtectedStorage(lite.isDefaultToDeviceProtectedStorage()) + .setUserDataFragile(lite.isUserDataFragile()) // Ints .setCategory(ApplicationInfo.CATEGORY_UNDEFINED) // Floats Default 0f |