Loading api/system-current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -9671,6 +9671,7 @@ package android.content.pm { field public static final int INSTALL_FAILED_NO_SHARED_USER = -6; // 0xfffffffa field public static final int INSTALL_FAILED_OLDER_SDK = -12; // 0xfffffff4 field public static final int INSTALL_FAILED_PACKAGE_CHANGED = -23; // 0xffffffe9 field public static final int INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE = -26; // 0xffffffe6 field public static final int INSTALL_FAILED_REPLACE_COULDNT_DELETE = -10; // 0xfffffff6 field public static final int INSTALL_FAILED_SHARED_USER_INCOMPATIBLE = -8; // 0xfffffff8 field public static final int INSTALL_FAILED_TEST_ONLY = -15; // 0xfffffff1 core/java/android/content/pm/PackageManager.java +11 −0 Original line number Diff line number Diff line Loading @@ -652,6 +652,16 @@ public abstract class PackageManager { */ public static final int INSTALL_FAILED_VERSION_DOWNGRADE = -25; /** * Installation return code: this is passed to the {@link IPackageInstallObserver} by * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} if * the old package has target SDK high enough to support runtime permission and * the new package has target SDK low enough to not support runtime permissions. * @hide */ @SystemApi public static final int INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE = -26; /** * Installation parse return code: this is passed to the {@link IPackageInstallObserver} by * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} Loading Loading @@ -4512,6 +4522,7 @@ public abstract class PackageManager { case INSTALL_FAILED_PACKAGE_CHANGED: return PackageInstaller.STATUS_FAILURE_INVALID; case INSTALL_FAILED_UID_CHANGED: return PackageInstaller.STATUS_FAILURE_INVALID; case INSTALL_FAILED_VERSION_DOWNGRADE: return PackageInstaller.STATUS_FAILURE_INVALID; case INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE: return PackageInstaller.STATUS_FAILURE_INVALID; case INSTALL_PARSE_FAILED_NOT_APK: return PackageInstaller.STATUS_FAILURE_INVALID; case INSTALL_PARSE_FAILED_BAD_MANIFEST: return PackageInstaller.STATUS_FAILURE_INVALID; case INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION: return PackageInstaller.STATUS_FAILURE_INVALID; Loading services/core/java/com/android/server/pm/PackageManagerService.java +15 −0 Original line number Diff line number Diff line Loading @@ -11461,6 +11461,21 @@ public class PackageManagerService extends IPackageManager.Stub { replace = true; if (DEBUG_INSTALL) Slog.d(TAG, "Replace existing pacakge: " + pkgName); } // Prevent apps opting out from runtime permissions if (replace) { PackageParser.Package oldPackage = mPackages.get(pkgName); final int oldTargetSdk = oldPackage.applicationInfo.targetSdkVersion; final int newTargetSdk = pkg.applicationInfo.targetSdkVersion; if (oldTargetSdk > Build.VERSION_CODES.LOLLIPOP_MR1 && newTargetSdk <= Build.VERSION_CODES.LOLLIPOP_MR1) { res.setError(PackageManager.INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE, "Package " + pkg.packageName + " new target SDK " + newTargetSdk + " doesn't support runtime permissions but the old" + " target SDK " + oldTargetSdk + " does."); return; } } } PackageSetting ps = mSettings.mPackages.get(pkgName); Loading Loading
api/system-current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -9671,6 +9671,7 @@ package android.content.pm { field public static final int INSTALL_FAILED_NO_SHARED_USER = -6; // 0xfffffffa field public static final int INSTALL_FAILED_OLDER_SDK = -12; // 0xfffffff4 field public static final int INSTALL_FAILED_PACKAGE_CHANGED = -23; // 0xffffffe9 field public static final int INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE = -26; // 0xffffffe6 field public static final int INSTALL_FAILED_REPLACE_COULDNT_DELETE = -10; // 0xfffffff6 field public static final int INSTALL_FAILED_SHARED_USER_INCOMPATIBLE = -8; // 0xfffffff8 field public static final int INSTALL_FAILED_TEST_ONLY = -15; // 0xfffffff1
core/java/android/content/pm/PackageManager.java +11 −0 Original line number Diff line number Diff line Loading @@ -652,6 +652,16 @@ public abstract class PackageManager { */ public static final int INSTALL_FAILED_VERSION_DOWNGRADE = -25; /** * Installation return code: this is passed to the {@link IPackageInstallObserver} by * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} if * the old package has target SDK high enough to support runtime permission and * the new package has target SDK low enough to not support runtime permissions. * @hide */ @SystemApi public static final int INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE = -26; /** * Installation parse return code: this is passed to the {@link IPackageInstallObserver} by * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} Loading Loading @@ -4512,6 +4522,7 @@ public abstract class PackageManager { case INSTALL_FAILED_PACKAGE_CHANGED: return PackageInstaller.STATUS_FAILURE_INVALID; case INSTALL_FAILED_UID_CHANGED: return PackageInstaller.STATUS_FAILURE_INVALID; case INSTALL_FAILED_VERSION_DOWNGRADE: return PackageInstaller.STATUS_FAILURE_INVALID; case INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE: return PackageInstaller.STATUS_FAILURE_INVALID; case INSTALL_PARSE_FAILED_NOT_APK: return PackageInstaller.STATUS_FAILURE_INVALID; case INSTALL_PARSE_FAILED_BAD_MANIFEST: return PackageInstaller.STATUS_FAILURE_INVALID; case INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION: return PackageInstaller.STATUS_FAILURE_INVALID; Loading
services/core/java/com/android/server/pm/PackageManagerService.java +15 −0 Original line number Diff line number Diff line Loading @@ -11461,6 +11461,21 @@ public class PackageManagerService extends IPackageManager.Stub { replace = true; if (DEBUG_INSTALL) Slog.d(TAG, "Replace existing pacakge: " + pkgName); } // Prevent apps opting out from runtime permissions if (replace) { PackageParser.Package oldPackage = mPackages.get(pkgName); final int oldTargetSdk = oldPackage.applicationInfo.targetSdkVersion; final int newTargetSdk = pkg.applicationInfo.targetSdkVersion; if (oldTargetSdk > Build.VERSION_CODES.LOLLIPOP_MR1 && newTargetSdk <= Build.VERSION_CODES.LOLLIPOP_MR1) { res.setError(PackageManager.INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE, "Package " + pkg.packageName + " new target SDK " + newTargetSdk + " doesn't support runtime permissions but the old" + " target SDK " + oldTargetSdk + " does."); return; } } } PackageSetting ps = mSettings.mPackages.get(pkgName); Loading