diff options
15 files changed, 94 insertions, 681 deletions
diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java index 8bb704d76e85..8a797dcaf449 100644 --- a/core/java/android/app/ApplicationPackageManager.java +++ b/core/java/android/app/ApplicationPackageManager.java @@ -2046,8 +2046,6 @@ public class ApplicationPackageManager extends PackageManager { StorageManager storage) { if (app.isInternal()) { return storage.findVolumeById(VolumeInfo.ID_PRIVATE_INTERNAL); - } else if (app.isExternalAsec()) { - return storage.getPrimaryPhysicalVolume(); } else { return storage.findVolumeByUuid(app.volumeUuid); } diff --git a/core/java/android/content/pm/ApplicationInfo.java b/core/java/android/content/pm/ApplicationInfo.java index 4e110dad44ff..7c3b5e48cb5b 100644 --- a/core/java/android/content/pm/ApplicationInfo.java +++ b/core/java/android/content/pm/ApplicationInfo.java @@ -32,7 +32,6 @@ import android.os.Parcel; import android.os.Parcelable; import android.os.UserHandle; import android.os.storage.StorageManager; -import android.text.TextUtils; import android.util.Printer; import android.util.SparseArray; import android.util.proto.ProtoOutputStream; @@ -464,16 +463,6 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { public static final int PRIVATE_FLAG_CANT_SAVE_STATE = 1<<1; /** - * Value for {@link #privateFlags}: Set to true if the application has been - * installed using the forward lock option. - * - * NOTE: DO NOT CHANGE THIS VALUE! It is saved in packages.xml. - * - * {@hide} - */ - public static final int PRIVATE_FLAG_FORWARD_LOCK = 1<<2; - - /** * Value for {@link #privateFlags}: set to {@code true} if the application * is permitted to hold privileged permissions. * @@ -651,7 +640,6 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { PRIVATE_FLAG_CANT_SAVE_STATE, PRIVATE_FLAG_DEFAULT_TO_DEVICE_PROTECTED_STORAGE, PRIVATE_FLAG_DIRECT_BOOT_AWARE, - PRIVATE_FLAG_FORWARD_LOCK, PRIVATE_FLAG_HAS_DOMAIN_URLS, PRIVATE_FLAG_HIDDEN, PRIVATE_FLAG_INSTANT, @@ -1843,17 +1831,6 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { return (flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0; } - /** @hide */ - public boolean isExternalAsec() { - return TextUtils.isEmpty(volumeUuid) && isExternal(); - } - - /** @hide */ - @UnsupportedAppUsage - public boolean isForwardLocked() { - return (privateFlags & ApplicationInfo.PRIVATE_FLAG_FORWARD_LOCK) != 0; - } - /** * True if the application is installed as an instant app. * @hide diff --git a/core/java/android/content/pm/PackageInstaller.java b/core/java/android/content/pm/PackageInstaller.java index 8f901996db40..07672d979cf5 100644 --- a/core/java/android/content/pm/PackageInstaller.java +++ b/core/java/android/content/pm/PackageInstaller.java @@ -1374,12 +1374,6 @@ public class PackageInstaller { } /** {@hide} */ - public void setInstallFlagsInternal() { - installFlags |= PackageManager.INSTALL_INTERNAL; - installFlags &= ~PackageManager.INSTALL_EXTERNAL; - } - - /** {@hide} */ @SystemApi public void setAllowDowngrade(boolean allowDowngrade) { if (allowDowngrade) { @@ -1390,12 +1384,6 @@ public class PackageInstaller { } /** {@hide} */ - public void setInstallFlagsExternal() { - installFlags |= PackageManager.INSTALL_EXTERNAL; - installFlags &= ~PackageManager.INSTALL_INTERNAL; - } - - /** {@hide} */ public void setInstallFlagsForcePermissionPrompt() { installFlags |= PackageManager.INSTALL_FORCE_PERMISSION_PROMPT; } diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index 361bebaec3a2..a4b724ba48e7 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -700,10 +700,8 @@ public abstract class PackageManager { /** @hide */ @IntDef(flag = true, prefix = { "INSTALL_" }, value = { - INSTALL_FORWARD_LOCK, INSTALL_REPLACE_EXISTING, INSTALL_ALLOW_TEST, - INSTALL_EXTERNAL, INSTALL_INTERNAL, INSTALL_FROM_ADB, INSTALL_ALL_USERS, @@ -721,17 +719,6 @@ public abstract class PackageManager { public @interface InstallFlags {} /** - * Flag parameter for {@link #installPackage} to indicate that this package - * should be installed as forward locked, i.e. only the app itself should - * have access to its code and non-resource assets. - * - * @deprecated new installs into ASEC containers are no longer supported. - * @hide - */ - @Deprecated - public static final int INSTALL_FORWARD_LOCK = 0x00000001; - - /** * Flag parameter for {@link #installPackage} to indicate that you want to * replace an already installed package, if one exists. * @@ -750,17 +737,6 @@ public abstract class PackageManager { /** * Flag parameter for {@link #installPackage} to indicate that this package - * must be installed to an ASEC on a {@link VolumeInfo#TYPE_PUBLIC}. - * - * @deprecated new installs into ASEC containers are no longer supported; - * use adoptable storage instead. - * @hide - */ - @Deprecated - public static final int INSTALL_EXTERNAL = 0x00000008; - - /** - * Flag parameter for {@link #installPackage} to indicate that this package * must be installed to internal storage. * * @hide @@ -1521,14 +1497,6 @@ public abstract class PackageManager { /** * Error code that is passed to the {@link IPackageMoveObserver} if the - * specified package cannot be moved since its forward locked. - * - * @hide - */ - public static final int MOVE_FAILED_FORWARD_LOCKED = -4; - - /** - * Error code that is passed to the {@link IPackageMoveObserver} if the * specified package cannot be moved to the specified location. * * @hide diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java index 2c2776bf84e0..c78960bded57 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -829,9 +829,6 @@ public class PackageParser { public static final int PARSE_MUST_BE_APK = 1 << 0; public static final int PARSE_IGNORE_PROCESSES = 1 << 1; - /** @deprecated forward lock no longer functional. remove. */ - @Deprecated - public static final int PARSE_FORWARD_LOCK = 1 << 2; public static final int PARSE_EXTERNAL_STORAGE = 1 << 3; public static final int PARSE_IS_SYSTEM_DIR = 1 << 4; public static final int PARSE_COLLECT_CERTIFICATES = 1 << 5; @@ -845,7 +842,6 @@ public class PackageParser { PARSE_ENFORCE_CODE, PARSE_EXTERNAL_STORAGE, PARSE_FORCE_SDK, - PARSE_FORWARD_LOCK, PARSE_IGNORE_PROCESSES, PARSE_IS_SYSTEM_DIR, PARSE_MUST_BE_APK, @@ -2006,11 +2002,6 @@ public class PackageParser { PARSE_DEFAULT_TARGET_SANDBOX); pkg.applicationInfo.targetSandboxVersion = targetSandboxVersion; - /* Set the global "forward lock" flag */ - if ((flags & PARSE_FORWARD_LOCK) != 0) { - pkg.applicationInfo.privateFlags |= ApplicationInfo.PRIVATE_FLAG_FORWARD_LOCK; - } - /* Set the global "on SD card" flag */ if ((flags & PARSE_EXTERNAL_STORAGE) != 0) { pkg.applicationInfo.flags |= ApplicationInfo.FLAG_EXTERNAL_STORAGE; @@ -6779,7 +6770,7 @@ public class PackageParser { /** @hide */ public boolean isForwardLocked() { - return applicationInfo.isForwardLocked(); + return false; } /** @hide */ @@ -6821,9 +6812,7 @@ public class PackageParser { public boolean canHaveOatDir() { // The following app types CANNOT have oat directory // - non-updated system apps - // - forward-locked apps or apps installed in ASEC containers - return (!isSystem() || isUpdatedSystemApp()) - && !isForwardLocked() && !applicationInfo.isExternalAsec(); + return !isSystem() || isUpdatedSystemApp(); } public boolean isMatch(int flags) { diff --git a/core/java/com/android/internal/content/PackageHelper.java b/core/java/com/android/internal/content/PackageHelper.java index e2b8f7dca680..5d08a259dace 100644 --- a/core/java/com/android/internal/content/PackageHelper.java +++ b/core/java/com/android/internal/content/PackageHelper.java @@ -309,9 +309,6 @@ public class PackageHelper { } else if ((params.installFlags & PackageManager.INSTALL_INTERNAL) != 0) { prefer = RECOMMEND_INSTALL_INTERNAL; checkBoth = false; - } else if ((params.installFlags & PackageManager.INSTALL_EXTERNAL) != 0) { - prefer = RECOMMEND_INSTALL_EXTERNAL; - checkBoth = false; } else if (params.installLocation == PackageInfo.INSTALL_LOCATION_INTERNAL_ONLY) { prefer = RECOMMEND_INSTALL_INTERNAL; checkBoth = false; diff --git a/core/tests/coretests/src/android/content/pm/PackageManagerTests.java b/core/tests/coretests/src/android/content/pm/PackageManagerTests.java index a317c99bfdfa..8ac9451deaf6 100644 --- a/core/tests/coretests/src/android/content/pm/PackageManagerTests.java +++ b/core/tests/coretests/src/android/content/pm/PackageManagerTests.java @@ -364,9 +364,7 @@ public class PackageManagerTests extends AndroidTestCase { private int getInstallLoc(int flags, int expInstallLocation, long pkgLen) { // Flags explicitly over ride everything else. - if ((flags & PackageManager.INSTALL_EXTERNAL) != 0) { - return INSTALL_LOC_SD; - } else if ((flags & PackageManager.INSTALL_INTERNAL) != 0) { + if ((flags & PackageManager.INSTALL_INTERNAL) != 0) { return INSTALL_LOC_INT; } // Manifest option takes precedence next @@ -437,8 +435,6 @@ public class PackageManagerTests extends AndroidTestCase { int rLoc = getInstallLoc(flags, expInstallLocation, pkgLen); if (rLoc == INSTALL_LOC_INT) { - assertFalse( - (info.privateFlags & ApplicationInfo.PRIVATE_FLAG_FORWARD_LOCK) != 0); assertEquals(appInstallPath, srcPath); assertEquals(appInstallPath, publicSrcPath); assertStartsWith("Native library should point to shared lib directory", @@ -461,8 +457,6 @@ public class PackageManagerTests extends AndroidTestCase { } } } else if (rLoc == INSTALL_LOC_SD) { - assertFalse("The application should not be installed forward locked", - (info.privateFlags & ApplicationInfo.PRIVATE_FLAG_FORWARD_LOCK) != 0); assertTrue("Application flags (" + info.flags + ") should contain FLAG_EXTERNAL_STORAGE", (info.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0); @@ -845,31 +839,10 @@ public class PackageManagerTests extends AndroidTestCase { } @LargeTest - public void testReplaceFailSdcard() throws Exception { - // Do not run on devices with emulated external storage. - if (Environment.isExternalStorageEmulated()) { - return; - } - - sampleReplaceFromRawResource(PackageManager.INSTALL_EXTERNAL); - } - - @LargeTest public void testReplaceNormalInternal() throws Exception { sampleReplaceFromRawResource(PackageManager.INSTALL_REPLACE_EXISTING); } - @LargeTest - public void testReplaceSdcard() throws Exception { - // Do not run on devices with emulated external storage. - if (Environment.isExternalStorageEmulated()) { - return; - } - - sampleReplaceFromRawResource(PackageManager.INSTALL_REPLACE_EXISTING - | PackageManager.INSTALL_EXTERNAL); - } - /* -------------- Delete tests --- */ private static class DeleteObserver extends IPackageDeleteObserver.Stub { private CountDownLatch mLatch = new CountDownLatch(1); @@ -1015,31 +988,12 @@ public class PackageManagerTests extends AndroidTestCase { deleteFromRawResource(0, 0); } - @LargeTest - public void testDeleteSdcard() throws Exception { - // Do not run on devices with emulated external storage. - if (Environment.isExternalStorageEmulated()) { - return; - } - - deleteFromRawResource(PackageManager.INSTALL_EXTERNAL, 0); - } @LargeTest public void testDeleteNormalInternalRetainData() throws Exception { deleteFromRawResource(0, PackageManager.DELETE_KEEP_DATA); } - @LargeTest - public void testDeleteSdcardRetainData() throws Exception { - // Do not run on devices with emulated external storage. - if (Environment.isExternalStorageEmulated()) { - return; - } - - deleteFromRawResource(PackageManager.INSTALL_EXTERNAL, PackageManager.DELETE_KEEP_DATA); - } - void cleanUpInstall(InstallParams ip) throws Exception { if (ip == null) { return; @@ -1104,60 +1058,6 @@ public class PackageManagerTests extends AndroidTestCase { 0, true, false, -1, PackageInfo.INSTALL_LOCATION_UNSPECIFIED); } - /* - * Install a package on internal flash via PackageManager install flag. Replace - * the package via flag to install on sdcard. Make sure the new flag overrides - * the old install location. - */ - @LargeTest - public void testReplaceFlagInternalSdcard() throws Exception { - // Do not run on devices with emulated external storage. - if (Environment.isExternalStorageEmulated()) { - return; - } - - int iFlags = 0; - int rFlags = PackageManager.INSTALL_EXTERNAL; - InstallParams ip = sampleInstallFromRawResource(iFlags, false); - GenericReceiver receiver = new ReplaceReceiver(ip.pkg.packageName); - int replaceFlags = rFlags | PackageManager.INSTALL_REPLACE_EXISTING; - try { - invokeInstallPackage(ip.packageURI, replaceFlags, receiver, true); - assertInstall(ip.pkg, rFlags, ip.pkg.installLocation); - } catch (Exception e) { - failStr("Failed with exception : " + e); - } finally { - cleanUpInstall(ip); - } - } - - /* - * Install a package on sdcard via PackageManager install flag. Replace - * the package with no flags or manifest option and make sure the old - * install location is retained. - */ - @LargeTest - public void testReplaceFlagSdcardInternal() throws Exception { - // Do not run on devices with emulated external storage. - if (Environment.isExternalStorageEmulated()) { - return; - } - - int iFlags = PackageManager.INSTALL_EXTERNAL; - int rFlags = 0; - InstallParams ip = sampleInstallFromRawResource(iFlags, false); - GenericReceiver receiver = new ReplaceReceiver(ip.pkg.packageName); - int replaceFlags = rFlags | PackageManager.INSTALL_REPLACE_EXISTING; - try { - invokeInstallPackage(ip.packageURI, replaceFlags, receiver, true); - assertInstall(ip.pkg, iFlags, ip.pkg.installLocation); - } catch (Exception e) { - failStr("Failed with exception : " + e); - } finally { - cleanUpInstall(ip); - } - } - @LargeTest public void testManifestInstallLocationReplaceInternalSdcard() throws Exception { // Do not run on devices with emulated external storage. @@ -1375,34 +1275,6 @@ public class PackageManagerTests extends AndroidTestCase { } @LargeTest - public void testMoveAppExternalToExternal() throws Exception { - // Do not run on devices with emulated external storage. - if (Environment.isExternalStorageEmulated()) { - return; - } - - int installFlags = PackageManager.INSTALL_EXTERNAL; - int moveFlags = PackageManager.MOVE_EXTERNAL_MEDIA; - boolean fail = true; - int result = PackageManager.MOVE_FAILED_INVALID_LOCATION; - sampleMoveFromRawResource(installFlags, moveFlags, fail, result); - } - - @LargeTest - public void testMoveAppExternalToInternal() throws Exception { - // Do not run on devices with emulated external storage. - if (Environment.isExternalStorageEmulated()) { - return; - } - - int installFlags = PackageManager.INSTALL_EXTERNAL; - int moveFlags = PackageManager.MOVE_INTERNAL; - boolean fail = false; - int result = PackageManager.MOVE_SUCCEEDED; - sampleMoveFromRawResource(installFlags, moveFlags, fail, result); - } - - @LargeTest public void testMoveAppFailInternalToExternalDelete() throws Exception { // Do not run on devices with emulated external storage. if (Environment.isExternalStorageEmulated()) { @@ -1458,19 +1330,6 @@ public class PackageManagerTests extends AndroidTestCase { } /* - * Install an app on sdcard. - */ - @LargeTest - public void testFlagE() throws Exception { - // Do not run on devices with emulated external storage. - if (Environment.isExternalStorageEmulated()) { - return; - } - - sampleInstallFromRawResource(PackageManager.INSTALL_EXTERNAL, true); - } - - /* * Install an app with both internal and manifest option set. * should install on internal. */ @@ -1506,59 +1365,6 @@ public class PackageManagerTests extends AndroidTestCase { false, -1, PackageInfo.INSTALL_LOCATION_INTERNAL_ONLY); } - /* - * Install an app with both external and manifest option set. - * should install externally. - */ - @LargeTest - public void testFlagEManifestI() throws Exception { - // Do not run on devices with emulated external storage. - if (Environment.isExternalStorageEmulated()) { - return; - } - - installFromRawResource("install.apk", R.raw.install_loc_internal, - PackageManager.INSTALL_EXTERNAL, - true, - false, -1, - PackageInfo.INSTALL_LOCATION_PREFER_EXTERNAL); - } - - /* - * Install an app with both external and manifest preference for - * preferExternal. Should install externally. - */ - @LargeTest - public void testFlagEManifestE() throws Exception { - // Do not run on devices with emulated external storage. - if (Environment.isExternalStorageEmulated()) { - return; - } - - installFromRawResource("install.apk", R.raw.install_loc_sdcard, - PackageManager.INSTALL_EXTERNAL, - true, - false, -1, - PackageInfo.INSTALL_LOCATION_PREFER_EXTERNAL); - } - - /* - * Install an app with both external and manifest preference for - * auto. should install on external media. - */ - @LargeTest - public void testFlagEManifestA() throws Exception { - // Do not run on devices with emulated external storage. - if (Environment.isExternalStorageEmulated()) { - return; - } - - installFromRawResource("install.apk", R.raw.install_loc_auto, - PackageManager.INSTALL_EXTERNAL, - true, - false, -1, - PackageInfo.INSTALL_LOCATION_PREFER_EXTERNAL); - } /* * The following test functions verify install location for existing apps. @@ -1586,75 +1392,6 @@ public class PackageManagerTests extends AndroidTestCase { -1); } - @LargeTest - public void testFlagIExistingE() throws Exception { - // Do not run on devices with emulated external storage. - if (Environment.isExternalStorageEmulated()) { - return; - } - - int iFlags = PackageManager.INSTALL_EXTERNAL; - int rFlags = PackageManager.INSTALL_INTERNAL | PackageManager.INSTALL_REPLACE_EXISTING; - // First install. - installFromRawResource("install.apk", R.raw.install, - iFlags, - false, - false, -1, - -1); - // Replace now - installFromRawResource("install.apk", R.raw.install, - rFlags, - true, - false, -1, - -1); - } - - @LargeTest - public void testFlagEExistingI() throws Exception { - // Do not run on devices with emulated external storage. - if (Environment.isExternalStorageEmulated()) { - return; - } - - int iFlags = PackageManager.INSTALL_INTERNAL; - int rFlags = PackageManager.INSTALL_EXTERNAL | PackageManager.INSTALL_REPLACE_EXISTING; - // First install. - installFromRawResource("install.apk", R.raw.install, - iFlags, - false, - false, -1, - -1); - // Replace now - installFromRawResource("install.apk", R.raw.install, - rFlags, - true, - false, -1, - -1); - } - - @LargeTest - public void testFlagEExistingE() throws Exception { - // Do not run on devices with emulated external storage. - if (Environment.isExternalStorageEmulated()) { - return; - } - - int iFlags = PackageManager.INSTALL_EXTERNAL; - int rFlags = PackageManager.INSTALL_EXTERNAL | PackageManager.INSTALL_REPLACE_EXISTING; - // First install. - installFromRawResource("install.apk", R.raw.install, - iFlags, - false, - false, -1, - -1); - // Replace now - installFromRawResource("install.apk", R.raw.install, - rFlags, - true, - false, -1, - -1); - } - /* * The following set of tests verify the installation of apps with * install location attribute set to internalOnly, preferExternal and auto. @@ -1720,29 +1457,6 @@ public class PackageManagerTests extends AndroidTestCase { } @LargeTest - public void testManifestIExistingE() throws Exception { - // Do not run on devices with emulated external storage. - if (Environment.isExternalStorageEmulated()) { - return; - } - - int iFlags = PackageManager.INSTALL_EXTERNAL; - int rFlags = PackageManager.INSTALL_REPLACE_EXISTING; - // First install. - installFromRawResource("install.apk", R.raw.install, - iFlags, - false, - false, -1, - -1); - // Replace now - installFromRawResource("install.apk", R.raw.install_loc_internal, - rFlags, - true, - false, -1, - PackageInfo.INSTALL_LOCATION_INTERNAL_ONLY); - } - - @LargeTest public void testManifestEExistingI() throws Exception { // Do not run on devices with emulated external storage. if (Environment.isExternalStorageEmulated()) { @@ -1766,29 +1480,6 @@ public class PackageManagerTests extends AndroidTestCase { } @LargeTest - public void testManifestEExistingE() throws Exception { - // Do not run on devices with emulated external storage. - if (Environment.isExternalStorageEmulated()) { - return; - } - - int iFlags = PackageManager.INSTALL_EXTERNAL; - int rFlags = PackageManager.INSTALL_REPLACE_EXISTING; - // First install. - installFromRawResource("install.apk", R.raw.install, - iFlags, - false, - false, -1, - -1); - // Replace now - installFromRawResource("install.apk", R.raw.install_loc_sdcard, - rFlags, - true, - false, -1, - PackageInfo.INSTALL_LOCATION_PREFER_EXTERNAL); - } - - @LargeTest public void testManifestAExistingI() throws Exception { int iFlags = PackageManager.INSTALL_INTERNAL; int rFlags = PackageManager.INSTALL_REPLACE_EXISTING; @@ -1806,29 +1497,6 @@ public class PackageManagerTests extends AndroidTestCase { PackageInfo.INSTALL_LOCATION_AUTO); } - @LargeTest - public void testManifestAExistingE() throws Exception { - // Do not run on devices with emulated external storage. - if (Environment.isExternalStorageEmulated()) { - return; - } - - int iFlags = PackageManager.INSTALL_EXTERNAL; - int rFlags = PackageManager.INSTALL_REPLACE_EXISTING; - // First install. - installFromRawResource("install.apk", R.raw.install, - iFlags, - false, - false, -1, - -1); - // Replace now - installFromRawResource("install.apk", R.raw.install_loc_auto, - rFlags, - true, - false, -1, - PackageInfo.INSTALL_LOCATION_PREFER_EXTERNAL); - } - /* * The following set of tests check install location for existing * application based on user setting. @@ -1896,42 +1564,6 @@ public class PackageManagerTests extends AndroidTestCase { setExistingXUserX(userSetting, iFlags, PackageInfo.INSTALL_LOCATION_INTERNAL_ONLY); } - @LargeTest - public void testExistingEUserI() throws Exception { - // Do not run on devices with emulated external storage. - if (Environment.isExternalStorageEmulated()) { - return; - } - - int userSetting = PackageHelper.APP_INSTALL_INTERNAL; - int iFlags = PackageManager.INSTALL_EXTERNAL; - setExistingXUserX(userSetting, iFlags, PackageInfo.INSTALL_LOCATION_PREFER_EXTERNAL); - } - - @LargeTest - public void testExistingEUserE() throws Exception { - // Do not run on devices with emulated external storage. - if (Environment.isExternalStorageEmulated()) { - return; - } - - int userSetting = PackageHelper.APP_INSTALL_EXTERNAL; - int iFlags = PackageManager.INSTALL_EXTERNAL; - setExistingXUserX(userSetting, iFlags, PackageInfo.INSTALL_LOCATION_PREFER_EXTERNAL); - } - - @LargeTest - public void testExistingEUserA() throws Exception { - // Do not run on devices with emulated external storage. - if (Environment.isExternalStorageEmulated()) { - return; - } - - int userSetting = PackageHelper.APP_INSTALL_AUTO; - int iFlags = PackageManager.INSTALL_EXTERNAL; - setExistingXUserX(userSetting, iFlags, PackageInfo.INSTALL_LOCATION_PREFER_EXTERNAL); - } - /* * The following set of tests verify that the user setting defines * the install location. diff --git a/services/backup/java/com/android/server/backup/fullbackup/FullBackupEngine.java b/services/backup/java/com/android/server/backup/fullbackup/FullBackupEngine.java index c9f72181bcaf..6af098b28c41 100644 --- a/services/backup/java/com/android/server/backup/fullbackup/FullBackupEngine.java +++ b/services/backup/java/com/android/server/backup/fullbackup/FullBackupEngine.java @@ -164,18 +164,15 @@ public class FullBackupEngine { } /** - * Don't write apks for forward-locked apps or system-bundled apps that are not upgraded. + * Don't write apks for system-bundled apps that are not upgraded. */ private boolean shouldWriteApk( ApplicationInfo applicationInfo, boolean includeApks, boolean isSharedStorage) { - boolean isForwardLocked = - (applicationInfo.privateFlags & ApplicationInfo.PRIVATE_FLAG_FORWARD_LOCK) != 0; boolean isSystemApp = (applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0; boolean isUpdatedSystemApp = (applicationInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0; return includeApks && !isSharedStorage - && !isForwardLocked && (!isSystemApp || isUpdatedSystemApp); } } diff --git a/services/core/java/com/android/server/pm/PackageDexOptimizer.java b/services/core/java/com/android/server/pm/PackageDexOptimizer.java index cc640f03edba..093b85e5ed4c 100644 --- a/services/core/java/com/android/server/pm/PackageDexOptimizer.java +++ b/services/core/java/com/android/server/pm/PackageDexOptimizer.java @@ -16,6 +16,28 @@ package com.android.server.pm; +import static android.content.pm.ApplicationInfo.HIDDEN_API_ENFORCEMENT_DISABLED; + +import static com.android.server.pm.Installer.DEXOPT_BOOTCOMPLETE; +import static com.android.server.pm.Installer.DEXOPT_DEBUGGABLE; +import static com.android.server.pm.Installer.DEXOPT_ENABLE_HIDDEN_API_CHECKS; +import static com.android.server.pm.Installer.DEXOPT_FORCE; +import static com.android.server.pm.Installer.DEXOPT_GENERATE_APP_IMAGE; +import static com.android.server.pm.Installer.DEXOPT_GENERATE_COMPACT_DEX; +import static com.android.server.pm.Installer.DEXOPT_IDLE_BACKGROUND_JOB; +import static com.android.server.pm.Installer.DEXOPT_PROFILE_GUIDED; +import static com.android.server.pm.Installer.DEXOPT_PUBLIC; +import static com.android.server.pm.Installer.DEXOPT_SECONDARY_DEX; +import static com.android.server.pm.Installer.DEXOPT_STORAGE_CE; +import static com.android.server.pm.Installer.DEXOPT_STORAGE_DE; +import static com.android.server.pm.InstructionSets.getAppDexInstructionSets; +import static com.android.server.pm.InstructionSets.getDexCodeInstructionSets; +import static com.android.server.pm.PackageManagerService.WATCHDOG_TIMEOUT; +import static com.android.server.pm.PackageManagerServiceCompilerMapping.getReasonName; + +import static dalvik.system.DexFile.getSafeModeCompilerFilter; +import static dalvik.system.DexFile.isProfileGuidedCompilerFilter; + import android.annotation.Nullable; import android.content.Context; import android.content.pm.ApplicationInfo; @@ -41,6 +63,8 @@ import com.android.server.pm.dex.DexoptOptions; import com.android.server.pm.dex.DexoptUtils; import com.android.server.pm.dex.PackageDexUsage; +import dalvik.system.DexFile; + import java.io.File; import java.io.IOException; import java.util.ArrayList; @@ -48,32 +72,6 @@ import java.util.Arrays; import java.util.List; import java.util.Map; -import dalvik.system.DexFile; - -import static android.content.pm.ApplicationInfo.HIDDEN_API_ENFORCEMENT_DISABLED; - -import static com.android.server.pm.Installer.DEXOPT_BOOTCOMPLETE; -import static com.android.server.pm.Installer.DEXOPT_DEBUGGABLE; -import static com.android.server.pm.Installer.DEXOPT_PROFILE_GUIDED; -import static com.android.server.pm.Installer.DEXOPT_PUBLIC; -import static com.android.server.pm.Installer.DEXOPT_SECONDARY_DEX; -import static com.android.server.pm.Installer.DEXOPT_FORCE; -import static com.android.server.pm.Installer.DEXOPT_STORAGE_CE; -import static com.android.server.pm.Installer.DEXOPT_STORAGE_DE; -import static com.android.server.pm.Installer.DEXOPT_IDLE_BACKGROUND_JOB; -import static com.android.server.pm.Installer.DEXOPT_ENABLE_HIDDEN_API_CHECKS; -import static com.android.server.pm.Installer.DEXOPT_GENERATE_COMPACT_DEX; -import static com.android.server.pm.Installer.DEXOPT_GENERATE_APP_IMAGE; -import static com.android.server.pm.InstructionSets.getAppDexInstructionSets; -import static com.android.server.pm.InstructionSets.getDexCodeInstructionSets; - -import static com.android.server.pm.PackageManagerService.WATCHDOG_TIMEOUT; - -import static com.android.server.pm.PackageManagerServiceCompilerMapping.getReasonName; - -import static dalvik.system.DexFile.getSafeModeCompilerFilter; -import static dalvik.system.DexFile.isProfileGuidedCompilerFilter; - /** * Helper class for running dexopt command on packages. */ @@ -544,8 +542,7 @@ public class PackageDexOptimizer { // The flag isDexoptInstallWithDexMetadata applies only on installs when we know that // the user does not have an existing profile. boolean isProfileGuidedFilter = isProfileGuidedCompilerFilter(compilerFilter); - boolean isPublic = !info.isForwardLocked() && - (!isProfileGuidedFilter || options.isDexoptInstallWithDexMetadata()); + boolean isPublic = !isProfileGuidedFilter || options.isDexoptInstallWithDexMetadata(); int profileFlag = isProfileGuidedFilter ? DEXOPT_PROFILE_GUIDED : 0; // Some apps are executed with restrictions on hidden API usage. If this app is one // of them, pass a flag to dexopt to enable the same restrictions during compilation. diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java index 1a5b86cfbce0..2e9a71a178fb 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerService.java +++ b/services/core/java/com/android/server/pm/PackageInstallerService.java @@ -455,12 +455,6 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements + "to use the PackageManager.INSTALL_GRANT_RUNTIME_PERMISSIONS flag"); } - if ((params.installFlags & PackageManager.INSTALL_FORWARD_LOCK) != 0 - || (params.installFlags & PackageManager.INSTALL_EXTERNAL) != 0) { - throw new IllegalArgumentException( - "New installs into ASEC containers no longer supported"); - } - // Defensively resize giant app icons if (params.appIcon != null) { final ActivityManager am = (ActivityManager) mContext.getSystemService( @@ -487,21 +481,10 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements if (!PackageHelper.fitsOnInternal(mContext, params)) { throw new IOException("No suitable internal storage available"); } - - } else if ((params.installFlags & PackageManager.INSTALL_EXTERNAL) != 0) { - if (!PackageHelper.fitsOnExternal(mContext, params)) { - throw new IOException("No suitable external storage available"); - } - - } else if ((params.installFlags & PackageManager.INSTALL_FORCE_VOLUME_UUID) != 0) { - // For now, installs to adopted media are treated as internal from - // an install flag point-of-view. - params.setInstallFlagsInternal(); - } else { // For now, installs to adopted media are treated as internal from // an install flag point-of-view. - params.setInstallFlagsInternal(); + params.installFlags |= PackageManager.INSTALL_INTERNAL; // Resolve best location for install, based on combination of // requested install flags, delta size, and manifest settings. diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index acbd81dab5bc..6038e2422490 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -43,7 +43,6 @@ import static android.content.pm.PackageManager.FLAG_PERMISSION_REVOKE_ON_UPGRAD import static android.content.pm.PackageManager.FLAG_PERMISSION_SYSTEM_FIXED; import static android.content.pm.PackageManager.FLAG_PERMISSION_USER_FIXED; import static android.content.pm.PackageManager.FLAG_PERMISSION_USER_SET; -import static android.content.pm.PackageManager.INSTALL_EXTERNAL; import static android.content.pm.PackageManager.INSTALL_FAILED_ALREADY_EXISTS; import static android.content.pm.PackageManager.INSTALL_FAILED_DUPLICATE_PACKAGE; import static android.content.pm.PackageManager.INSTALL_FAILED_DUPLICATE_PERMISSION; @@ -646,9 +645,6 @@ public class PackageManagerService extends IPackageManager.Stub /** Directory where installed application's 32-bit native libraries are copied. */ private static final File sAppLib32InstallDir = new File(Environment.getDataDirectory(), "app-lib"); - /** Directory where code and non-resource assets of forward-locked applications are stored */ - private static final File sDrmAppPrivateInstallDir = - new File(Environment.getDataDirectory(), "app-private"); // ---------------------------------------------------------------- @@ -1811,12 +1807,10 @@ public class PackageManagerService extends IPackageManager.Stub firstUserIds, firstInstantUserIds); } - // Send broadcast package appeared if forward locked/external for all users - // treat asec-hosted packages like removable media on upgrade - if (res.pkg.isForwardLocked() || isExternal(res.pkg)) { + // Send broadcast package appeared if external for all users + if (isExternal(res.pkg)) { if (DEBUG_INSTALL) { - Slog.i(TAG, "upgrading pkg " + res.pkg - + " is ASEC-hosted -> AVAILABLE"); + Slog.i(TAG, "upgrading pkg " + res.pkg + " is external"); } final int[] uidArray = new int[]{res.pkg.applicationInfo.uid}; ArrayList<String> pkgList = new ArrayList<>(1); @@ -2629,10 +2623,6 @@ public class PackageManagerService extends IPackageManager.Stub SystemClock.uptimeMillis()); scanDirTracedLI(sAppInstallDir, 0, scanFlags | SCAN_REQUIRE_KNOWN, 0); - scanDirTracedLI(sDrmAppPrivateInstallDir, mDefParseFlags - | PackageParser.PARSE_FORWARD_LOCK, - scanFlags | SCAN_REQUIRE_KNOWN, 0); - // Remove disable package settings for updated system apps that were // removed via an OTA. If the update is no longer present, remove the // app completely. Otherwise, revoke their system privileges. @@ -8631,7 +8621,7 @@ public class PackageManagerService extends IPackageManager.Stub + "; " + pkgSetting.codePathString + " --> " + pkg.codePath); final InstallArgs args = createInstallArgsForExisting( - packageFlagsToInstallFlags(pkgSetting), pkgSetting.codePathString, + pkgSetting.codePathString, pkgSetting.resourcePathString, getAppDexInstructionSets(pkgSetting)); args.cleanUpResourcesLI(); synchronized (mPackages) { @@ -8704,7 +8694,7 @@ public class PackageManagerService extends IPackageManager.Stub + "; " + pkgSetting.versionCode + " --> " + pkg.getLongVersionCode() + "; " + pkgSetting.codePathString + " --> " + pkg.codePath); InstallArgs args = createInstallArgsForExisting( - packageFlagsToInstallFlags(pkgSetting), pkgSetting.codePathString, + pkgSetting.codePathString, pkgSetting.resourcePathString, getAppDexInstructionSets(pkgSetting)); synchronized (mInstallLock) { args.cleanUpResourcesLI(); @@ -11536,11 +11526,8 @@ public class PackageManagerService extends IPackageManager.Stub // pass once we've determined ABI below. setNativeLibraryPaths(pkg, sAppLib32InstallDir); - // We would never need to extract libs for forward-locked and external packages, - // since the container service will do it for us. We shouldn't attempt to - // extract libs from system app when it was not updated. - if (pkg.isForwardLocked() || pkg.applicationInfo.isExternalAsec() || - (isSystemApp(pkg) && !pkg.isUpdatedSystemApp())) { + // We shouldn't attempt to extract libs from system app when it was not updated. + if (isSystemApp(pkg) && !pkg.isUpdatedSystemApp()) { extractLibs = false; } @@ -11881,7 +11868,6 @@ public class PackageManagerService extends IPackageManager.Stub final String codePath = pkg.codePath; final File codeFile = new File(codePath); final boolean bundledApp = info.isSystemApp() && !info.isUpdatedSystemApp(); - final boolean asecApp = info.isForwardLocked() || info.isExternalAsec(); info.nativeLibraryRootDir = null; info.nativeLibraryRootRequiresIsa = false; @@ -11910,9 +11896,6 @@ public class PackageManagerService extends IPackageManager.Stub info.secondaryNativeLibraryDir = Environment.buildPath(new File(apkRoot), secondaryLibDir, apkName).getAbsolutePath(); } - } else if (asecApp) { - info.nativeLibraryRootDir = new File(codeFile.getParentFile(), LIB_DIR_NAME) - .getAbsolutePath(); } else { final String apkName = deriveCodePathName(codePath); info.nativeLibraryRootDir = new File(appLib32InstallDir, apkName) @@ -14021,7 +14004,6 @@ public class PackageManagerService extends IPackageManager.Stub private int installLocationPolicy(PackageInfoLite pkgLite) { String packageName = pkgLite.packageName; int installLocation = pkgLite.installLocation; - boolean onSd = (installFlags & PackageManager.INSTALL_EXTERNAL) != 0; // reader synchronized (mPackages) { // Currently installed package which the new package is attempting to replace or @@ -14074,16 +14056,8 @@ public class PackageManagerService extends IPackageManager.Stub if ((installFlags & PackageManager.INSTALL_REPLACE_EXISTING) != 0) { // Check for updated system application. if ((installedPkg.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) { - if (onSd) { - Slog.w(TAG, "Cannot install update to system app on sdcard"); - return PackageHelper.RECOMMEND_FAILED_INVALID_LOCATION; - } return PackageHelper.RECOMMEND_INSTALL_INTERNAL; } else { - if (onSd) { - // Install flag overrides everything. - return PackageHelper.RECOMMEND_INSTALL_EXTERNAL; - } // If current upgrade specifies particular preference if (installLocation == PackageInfo.INSTALL_LOCATION_INTERNAL_ONLY) { // Application explicitly specified internal. @@ -14104,11 +14078,6 @@ public class PackageManagerService extends IPackageManager.Stub } } } - // All the special cases have been taken care of. - // Return result based on recommended install location. - if (onSd) { - return PackageHelper.RECOMMEND_INSTALL_EXTERNAL; - } return pkgLite.recommendedInstallLocation; } @@ -14125,70 +14094,59 @@ public class PackageManagerService extends IPackageManager.Stub if (origin.staged) { if (origin.file != null) { installFlags |= PackageManager.INSTALL_INTERNAL; - installFlags &= ~PackageManager.INSTALL_EXTERNAL; } else { throw new IllegalStateException("Invalid stage location"); } } - final boolean onSd = (installFlags & PackageManager.INSTALL_EXTERNAL) != 0; final boolean onInt = (installFlags & PackageManager.INSTALL_INTERNAL) != 0; final boolean ephemeral = (installFlags & PackageManager.INSTALL_INSTANT_APP) != 0; PackageInfoLite pkgLite = null; - if (onInt && onSd) { - // Check if both bits are set. - Slog.w(TAG, "Conflicting flags specified for installing on both internal and external"); - ret = PackageManager.INSTALL_FAILED_INVALID_INSTALL_LOCATION; - } else if (onSd && ephemeral) { - Slog.w(TAG, "Conflicting flags specified for installing ephemeral on external"); - ret = PackageManager.INSTALL_FAILED_INVALID_INSTALL_LOCATION; - } else { - pkgLite = PackageManagerServiceUtils.getMinimalPackageInfo(mContext, - origin.resolvedPath, installFlags, packageAbiOverride); - if (DEBUG_INSTANT && ephemeral) { - Slog.v(TAG, "pkgLite for install: " + pkgLite); + pkgLite = PackageManagerServiceUtils.getMinimalPackageInfo(mContext, + origin.resolvedPath, installFlags, packageAbiOverride); + + if (DEBUG_INSTANT && ephemeral) { + Slog.v(TAG, "pkgLite for install: " + pkgLite); + } + + /* + * If we have too little free space, try to free cache + * before giving up. + */ + if (!origin.staged && pkgLite.recommendedInstallLocation + == PackageHelper.RECOMMEND_FAILED_INSUFFICIENT_STORAGE) { + // TODO: focus freeing disk space on the target device + final StorageManager storage = StorageManager.from(mContext); + final long lowThreshold = storage.getStorageLowBytes( + Environment.getDataDirectory()); + + final long sizeBytes = PackageManagerServiceUtils.calculateInstalledSize( + origin.resolvedPath, packageAbiOverride); + if (sizeBytes >= 0) { + try { + mInstaller.freeCache(null, sizeBytes + lowThreshold, 0, 0); + pkgLite = PackageManagerServiceUtils.getMinimalPackageInfo(mContext, + origin.resolvedPath, installFlags, packageAbiOverride); + } catch (InstallerException e) { + Slog.w(TAG, "Failed to free cache", e); + } } /* - * If we have too little free space, try to free cache - * before giving up. + * The cache free must have deleted the file we downloaded to install. + * + * TODO: fix the "freeCache" call to not delete the file we care about. */ - if (!origin.staged && pkgLite.recommendedInstallLocation - == PackageHelper.RECOMMEND_FAILED_INSUFFICIENT_STORAGE) { - // TODO: focus freeing disk space on the target device - final StorageManager storage = StorageManager.from(mContext); - final long lowThreshold = storage.getStorageLowBytes( - Environment.getDataDirectory()); - - final long sizeBytes = PackageManagerServiceUtils.calculateInstalledSize( - origin.resolvedPath, packageAbiOverride); - if (sizeBytes >= 0) { - try { - mInstaller.freeCache(null, sizeBytes + lowThreshold, 0, 0); - pkgLite = PackageManagerServiceUtils.getMinimalPackageInfo(mContext, - origin.resolvedPath, installFlags, packageAbiOverride); - } catch (InstallerException e) { - Slog.w(TAG, "Failed to free cache", e); - } - } - - /* - * The cache free must have deleted the file we - * downloaded to install. - * - * TODO: fix the "freeCache" call to not delete - * the file we care about. - */ - if (pkgLite.recommendedInstallLocation - == PackageHelper.RECOMMEND_FAILED_INVALID_URI) { - pkgLite.recommendedInstallLocation + if (pkgLite.recommendedInstallLocation + == PackageHelper.RECOMMEND_FAILED_INVALID_URI) { + pkgLite.recommendedInstallLocation = PackageHelper.RECOMMEND_FAILED_INSUFFICIENT_STORAGE; - } } } + if (ret == PackageManager.INSTALL_SUCCEEDED) { int loc = pkgLite.recommendedInstallLocation; if (loc == PackageHelper.RECOMMEND_FAILED_INVALID_LOCATION) { @@ -14208,24 +14166,21 @@ public class PackageManagerService extends IPackageManager.Stub loc = installLocationPolicy(pkgLite); if (loc == PackageHelper.RECOMMEND_FAILED_VERSION_DOWNGRADE) { ret = PackageManager.INSTALL_FAILED_VERSION_DOWNGRADE; - } else if (!onSd && !onInt) { + } else if (!onInt) { // Override install location with flags if (loc == PackageHelper.RECOMMEND_INSTALL_EXTERNAL) { // Set the flag to install on external media. - installFlags |= PackageManager.INSTALL_EXTERNAL; installFlags &= ~PackageManager.INSTALL_INTERNAL; } else if (loc == PackageHelper.RECOMMEND_INSTALL_EPHEMERAL) { if (DEBUG_INSTANT) { Slog.v(TAG, "...setting INSTALL_EPHEMERAL install flag"); } installFlags |= PackageManager.INSTALL_INSTANT_APP; - installFlags &= ~(PackageManager.INSTALL_EXTERNAL - |PackageManager.INSTALL_INTERNAL); + installFlags &= ~PackageManager.INSTALL_INTERNAL; } else { // Make sure the flag for installing on external // media is unset installFlags |= PackageManager.INSTALL_INTERNAL; - installFlags &= ~PackageManager.INSTALL_EXTERNAL; } } } @@ -14409,7 +14364,7 @@ public class PackageManagerService extends IPackageManager.Stub * Create args that describe an existing installed package. Typically used * when cleaning up old installs, or used as a move source. */ - private InstallArgs createInstallArgsForExisting(int installFlags, String codePath, + private InstallArgs createInstallArgsForExisting(String codePath, String resourcePath, String[] instructionSets) { return new FileInstallArgs(codePath, resourcePath, instructionSets); } @@ -14501,14 +14456,6 @@ public class PackageManagerService extends IPackageManager.Stub return PackageManager.INSTALL_SUCCEEDED; } - protected boolean isFwdLocked() { - return (installFlags & PackageManager.INSTALL_FORWARD_LOCK) != 0; - } - - protected boolean isExternalAsec() { - return (installFlags & PackageManager.INSTALL_EXTERNAL) != 0; - } - protected boolean isEphemeral() { return (installFlags & PackageManager.INSTALL_INSTANT_APP) != 0; } @@ -14536,7 +14483,7 @@ public class PackageManagerService extends IPackageManager.Stub } /** - * Logic to handle installation of non-ASEC applications, including copying + * Logic to handle installation of new applications, including copying * and renaming logic. */ class FileInstallArgs extends InstallArgs { @@ -14558,9 +14505,6 @@ public class PackageManagerService extends IPackageManager.Stub params.grantedRuntimePermissions, params.traceMethod, params.traceCookie, params.signingDetails, params.installReason, params.mParentInstallParams); - if (isFwdLocked()) { - throw new IllegalArgumentException("Forward locking only supported in ASEC"); - } } /** Existing install */ @@ -15291,7 +15235,7 @@ public class PackageManagerService extends IPackageManager.Stub // We didn't need to disable the .apk as a current system package, // which means we are replacing another update that is already // installed. We need to make sure to delete the older one's .apk. - res.removedInfo.args = createInstallArgsForExisting(0, + res.removedInfo.args = createInstallArgsForExisting( oldPackage.applicationInfo.getCodePath(), oldPackage.applicationInfo.getResourcePath(), getAppDexInstructionSets(oldPackage.applicationInfo)); @@ -15570,8 +15514,6 @@ public class PackageManagerService extends IPackageManager.Stub */ private void executePostCommitSteps(CommitRequest commitRequest) { for (ReconciledPackage reconciledPkg : commitRequest.reconciledPackages.values()) { - final boolean forwardLocked = - ((reconciledPkg.installFlags & PackageManager.INSTALL_FORWARD_LOCK) != 0); final boolean instantApp = ((reconciledPkg.installFlags & PackageManager.INSTALL_INSTANT_APP) != 0); final PackageParser.Package pkg = reconciledPkg.pkgSetting.pkg; @@ -15604,10 +15546,8 @@ public class PackageManagerService extends IPackageManager.Stub // This update happens in place! // // We only need to dexopt if the package meets ALL of the following conditions: - // 1) it is not forward locked. - // 2) it is not on on an external ASEC container. - // 3) it is not an instant app or if it is then dexopt is enabled via gservices. - // 4) it is not debuggable. + // 1) it is not an instant app or if it is then dexopt is enabled via gservices. + // 2) it is not debuggable. // // Note that we do not dexopt instant apps by default. dexopt can take some time to // complete, so we skip this step during installation. Instead, we'll take extra time @@ -15615,9 +15555,8 @@ public class PackageManagerService extends IPackageManager.Stub // continuous progress to the useur instead of mysteriously blocking somewhere in the // middle of running an instant app. The default behaviour can be overridden // via gservices. - final boolean performDexopt = !forwardLocked - && !pkg.applicationInfo.isExternalAsec() - && (!instantApp || Global.getInt(mContext.getContentResolver(), + final boolean performDexopt = + (!instantApp || Global.getInt(mContext.getContentResolver(), Global.INSTANT_APP_DEXOPT_ENABLED, 0) != 0) && ((pkg.applicationInfo.flags & ApplicationInfo.FLAG_DEBUGGABLE) == 0); @@ -15712,7 +15651,6 @@ public class PackageManagerService extends IPackageManager.Stub // Parse old package boolean oldExternal = isExternal(oldPackage); int oldParseFlags = mDefParseFlags | PackageParser.PARSE_CHATTY - | (oldPackage.isForwardLocked() ? PackageParser.PARSE_FORWARD_LOCK : 0) | (oldExternal ? PackageParser.PARSE_EXTERNAL_STORAGE : 0); int oldScanFlags = SCAN_UPDATE_SIGNATURE | SCAN_UPDATE_TIME; try { @@ -15830,9 +15768,7 @@ public class PackageManagerService extends IPackageManager.Stub final String installerPackageName = args.installerPackageName; final String volumeUuid = args.volumeUuid; final File tmpPackageFile = new File(args.getCodePath()); - final boolean forwardLocked = ((installFlags & PackageManager.INSTALL_FORWARD_LOCK) != 0); - final boolean onExternal = (((installFlags & PackageManager.INSTALL_EXTERNAL) != 0) - || (args.volumeUuid != null)); + final boolean onExternal = args.volumeUuid != null; final boolean instantApp = ((installFlags & PackageManager.INSTALL_INSTANT_APP) != 0); final boolean fullApp = ((installFlags & PackageManager.INSTALL_FULL_APP) != 0); final boolean forceSdk = ((installFlags & PackageManager.INSTALL_FORCE_SDK) != 0); @@ -15859,16 +15795,14 @@ public class PackageManagerService extends IPackageManager.Stub if (DEBUG_INSTALL) Slog.d(TAG, "installPackageLI: path=" + tmpPackageFile); // Sanity check - if (instantApp && (forwardLocked || onExternal)) { - Slog.i(TAG, "Incompatible ephemeral install; fwdLocked=" + forwardLocked - + " external=" + onExternal); + if (instantApp && onExternal) { + Slog.i(TAG, "Incompatible ephemeral install; external=" + onExternal); throw new PrepareFailure(PackageManager.INSTALL_FAILED_INSTANT_APP_INVALID); } // Retrieve PackageSettings and parse package @ParseFlags final int parseFlags = mDefParseFlags | PackageParser.PARSE_CHATTY | PackageParser.PARSE_ENFORCE_CODE - | (forwardLocked ? PackageParser.PARSE_FORWARD_LOCK : 0) | (onExternal ? PackageParser.PARSE_EXTERNAL_STORAGE : 0) | (forceSdk ? PackageParser.PARSE_FORCE_SDK : 0); @@ -16213,7 +16147,7 @@ public class PackageManagerService extends IPackageManager.Stub pkg.applicationInfo.secondaryCpuAbi = ps.secondaryCpuAbiString; } - } else if (!forwardLocked && !pkg.applicationInfo.isExternalAsec()) { + } else { // Enable SCAN_NO_DEX flag to skip dexopt at a later stage scanFlags |= SCAN_NO_DEX; @@ -16745,19 +16679,6 @@ public class PackageManagerService extends IPackageManager.Stub return (ps.pkgFlags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0; } - private int packageFlagsToInstallFlags(PackageSetting ps) { - int installFlags = 0; - if (isExternal(ps) && TextUtils.isEmpty(ps.volumeUuid)) { - // This existing package was an external ASEC install when we have - // the external flag without a UUID - installFlags |= PackageManager.INSTALL_EXTERNAL; - } - if (ps.isForwardLocked()) { - installFlags |= PackageManager.INSTALL_FORWARD_LOCK; - } - return installFlags; - } - private VersionInfo getSettingsVersionForPackage(PackageParser.Package pkg) { if (isExternal(pkg)) { if (TextUtils.isEmpty(pkg.volumeUuid)) { @@ -16773,9 +16694,6 @@ public class PackageManagerService extends IPackageManager.Stub private void deleteTempPackageFiles() { final FilenameFilter filter = (dir, name) -> name.startsWith("vmdl") && name.endsWith(".tmp"); - for (File file : sDrmAppPrivateInstallDir.listFiles(filter)) { - file.delete(); - } } @Override @@ -17766,7 +17684,7 @@ public class PackageManagerService extends IPackageManager.Stub // Delete application code and resources only for parent packages if (ps.parentPackageName == null) { if (deleteCodeAndResources && (outInfo != null)) { - outInfo.args = createInstallArgsForExisting(packageFlagsToInstallFlags(ps), + outInfo.args = createInstallArgsForExisting( ps.codePathString, ps.resourcePathString, getAppDexInstructionSets(ps)); if (DEBUG_SD_INSTALL) Slog.i(TAG, "args=" + outInfo.args); } @@ -21698,7 +21616,6 @@ public class PackageManagerService extends IPackageManager.Stub final StorageManager storage = mContext.getSystemService(StorageManager.class); final PackageManager pm = mContext.getPackageManager(); - final boolean currentAsec; final String currentVolumeUuid; final File codeFile; final String installerPackageName; @@ -21732,22 +21649,13 @@ public class PackageManagerService extends IPackageManager.Stub "3rd party apps are not allowed on internal storage"); } - if (pkg.applicationInfo.isExternalAsec()) { - currentAsec = true; - currentVolumeUuid = StorageManager.UUID_PRIMARY_PHYSICAL; - } else if (pkg.applicationInfo.isForwardLocked()) { - currentAsec = true; - currentVolumeUuid = "forward_locked"; - } else { - currentAsec = false; - currentVolumeUuid = ps.volumeUuid; + currentVolumeUuid = ps.volumeUuid; - final File probe = new File(pkg.codePath); - final File probeOat = new File(probe, "oat"); - if (!probe.isDirectory() || !probeOat.isDirectory()) { - throw new PackageManagerException(MOVE_FAILED_INTERNAL_ERROR, - "Move only supported for modern cluster style installs"); - } + final File probe = new File(pkg.codePath); + final File probeOat = new File(probe, "oat"); + if (!probe.isDirectory() || !probeOat.isDirectory()) { + throw new PackageManagerException(MOVE_FAILED_INTERNAL_ERROR, + "Move only supported for modern cluster style installs"); } if (Objects.equals(currentVolumeUuid, volumeUuid)) { @@ -21784,12 +21692,11 @@ public class PackageManagerService extends IPackageManager.Stub final boolean moveCompleteApp; final File measurePath; + installFlags = INSTALL_INTERNAL; if (Objects.equals(StorageManager.UUID_PRIVATE_INTERNAL, volumeUuid)) { - installFlags = INSTALL_INTERNAL; - moveCompleteApp = !currentAsec; + moveCompleteApp = true; measurePath = Environment.getDataAppDirectory(volumeUuid); } else if (Objects.equals(StorageManager.UUID_PRIMARY_PHYSICAL, volumeUuid)) { - installFlags = INSTALL_EXTERNAL; moveCompleteApp = false; measurePath = storage.getPrimaryPhysicalVolume().getPath(); } else { @@ -21801,9 +21708,6 @@ public class PackageManagerService extends IPackageManager.Stub "Move location not mounted private volume"); } - Preconditions.checkState(!currentAsec); - - installFlags = INSTALL_INTERNAL; moveCompleteApp = true; measurePath = Environment.getDataAppDirectory(volumeUuid); } diff --git a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java index 6f275ece1a1f..77f8c3a0308a 100644 --- a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java +++ b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java @@ -2193,9 +2193,6 @@ class PackageManagerShellCommand extends ShellCommand { boolean replaceExisting = true; while ((opt = getNextOption()) != null) { switch (opt) { - case "-l": - sessionParams.installFlags |= PackageManager.INSTALL_FORWARD_LOCK; - break; case "-r": // ignore break; case "-R": @@ -2210,9 +2207,6 @@ class PackageManagerShellCommand extends ShellCommand { case "-t": sessionParams.installFlags |= PackageManager.INSTALL_ALLOW_TEST; break; - case "-s": - sessionParams.installFlags |= PackageManager.INSTALL_EXTERNAL; - break; case "-f": sessionParams.installFlags |= PackageManager.INSTALL_INTERNAL; break; diff --git a/services/core/java/com/android/server/pm/PackageSetting.java b/services/core/java/com/android/server/pm/PackageSetting.java index b8506136d071..2c2cc7ea78f9 100644 --- a/services/core/java/com/android/server/pm/PackageSetting.java +++ b/services/core/java/com/android/server/pm/PackageSetting.java @@ -152,10 +152,6 @@ public final class PackageSetting extends PackageSettingBase { return (pkgPrivateFlags & ApplicationInfo.PRIVATE_FLAG_PRODUCT_SERVICES) != 0; } - public boolean isForwardLocked() { - return (pkgPrivateFlags & ApplicationInfo.PRIVATE_FLAG_FORWARD_LOCK) != 0; - } - public boolean isSystem() { return (pkgFlags & ApplicationInfo.FLAG_SYSTEM) != 0; } diff --git a/services/core/java/com/android/server/pm/SettingBase.java b/services/core/java/com/android/server/pm/SettingBase.java index 239dc995532a..fbf54391209c 100644 --- a/services/core/java/com/android/server/pm/SettingBase.java +++ b/services/core/java/com/android/server/pm/SettingBase.java @@ -64,7 +64,6 @@ abstract class SettingBase { | ApplicationInfo.PRIVATE_FLAG_VENDOR | ApplicationInfo.PRIVATE_FLAG_PRODUCT | ApplicationInfo.PRIVATE_FLAG_PRODUCT_SERVICES - | ApplicationInfo.PRIVATE_FLAG_FORWARD_LOCK | ApplicationInfo.PRIVATE_FLAG_REQUIRED_FOR_SYSTEM_USER); } } diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java index 6009bd3e2c82..c334b6e83057 100644 --- a/services/core/java/com/android/server/pm/Settings.java +++ b/services/core/java/com/android/server/pm/Settings.java @@ -3656,7 +3656,6 @@ public final class Settings { private static int PRE_M_APP_INFO_FLAG_HIDDEN = 1<<27; private static int PRE_M_APP_INFO_FLAG_CANT_SAVE_STATE = 1<<28; - private static int PRE_M_APP_INFO_FLAG_FORWARD_LOCK = 1<<29; private static int PRE_M_APP_INFO_FLAG_PRIVILEGED = 1<<30; private void readPackageLPw(XmlPullParser parser) throws XmlPullParserException, IOException { @@ -3756,15 +3755,11 @@ public final class Settings { if ((pkgFlags & PRE_M_APP_INFO_FLAG_CANT_SAVE_STATE) != 0) { pkgPrivateFlags |= ApplicationInfo.PRIVATE_FLAG_CANT_SAVE_STATE; } - if ((pkgFlags & PRE_M_APP_INFO_FLAG_FORWARD_LOCK) != 0) { - pkgPrivateFlags |= ApplicationInfo.PRIVATE_FLAG_FORWARD_LOCK; - } if ((pkgFlags & PRE_M_APP_INFO_FLAG_PRIVILEGED) != 0) { pkgPrivateFlags |= ApplicationInfo.PRIVATE_FLAG_PRIVILEGED; } pkgFlags &= ~(PRE_M_APP_INFO_FLAG_HIDDEN | PRE_M_APP_INFO_FLAG_CANT_SAVE_STATE - | PRE_M_APP_INFO_FLAG_FORWARD_LOCK | PRE_M_APP_INFO_FLAG_PRIVILEGED); } else { // For backward compatibility @@ -4428,7 +4423,6 @@ public final class Settings { ApplicationInfo.PRIVATE_FLAG_CANT_SAVE_STATE, "CANT_SAVE_STATE", ApplicationInfo.PRIVATE_FLAG_DEFAULT_TO_DEVICE_PROTECTED_STORAGE, "DEFAULT_TO_DEVICE_PROTECTED_STORAGE", ApplicationInfo.PRIVATE_FLAG_DIRECT_BOOT_AWARE, "DIRECT_BOOT_AWARE", - ApplicationInfo.PRIVATE_FLAG_FORWARD_LOCK, "FORWARD_LOCK", ApplicationInfo.PRIVATE_FLAG_HAS_DOMAIN_URLS, "HAS_DOMAIN_URLS", ApplicationInfo.PRIVATE_FLAG_HIDDEN, "HIDDEN", ApplicationInfo.PRIVATE_FLAG_INSTANT, "EPHEMERAL", |