diff options
| author | 2017-12-06 11:58:09 +0000 | |
|---|---|---|
| committer | 2017-12-12 11:47:12 +0000 | |
| commit | ab223112d1a163e641e7c1adb6429e27e37675a6 (patch) | |
| tree | 290ee444ddd504cfe55de6a64c95d0a3f9e2ecf1 | |
| parent | 73b6bc86af1b5f278b83ff14365d63929b0553b7 (diff) | |
Reject apks targeting deprecated sdk
As part of deprecation policy enforcement for android apps, minimum
supported targetSdkVersion will be 17. Apks targeting values lower that
one set in PLATFORM_MIN_SUPPORTED_TARGET_SDK_VERSION will fail to install.
PLATFORM_MIN_SUPPORTED_TARGET_SDK_VERSION is currently set to 0 and
will be set to 17 in a following cl.
Installation of deprecated apks can be forced using adb install
--force-sdk flag.
More details in http://go/android-platform-deprecation-policy.
Test: tests are in complementary Cts cl.
Bug: 63926630
Change-Id: I8e55bdebf1fb2cfd951e2c6703ccc87b8d4e9a09
| -rw-r--r-- | core/java/android/content/pm/ApplicationInfo.java | 6 | ||||
| -rw-r--r-- | services/core/java/com/android/server/pm/PackageManagerService.java | 11 |
2 files changed, 17 insertions, 0 deletions
diff --git a/core/java/android/content/pm/ApplicationInfo.java b/core/java/android/content/pm/ApplicationInfo.java index 84b1ff3219a2..c73b853a02cb 100644 --- a/core/java/android/content/pm/ApplicationInfo.java +++ b/core/java/android/content/pm/ApplicationInfo.java @@ -26,6 +26,7 @@ import android.content.Context; import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.Resources; import android.graphics.drawable.Drawable; +import android.os.Build; import android.os.Environment; import android.os.Parcel; import android.os.Parcelable; @@ -1582,6 +1583,11 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { return (privateFlags & ApplicationInfo.PRIVATE_FLAG_VENDOR) != 0; } + /** @hide */ + public boolean isTargetingDeprecatedSdkVersion() { + return targetSdkVersion < Build.VERSION.MIN_SUPPORTED_TARGET_SDK_INT; + } + /** * Returns whether or not this application was installed as a virtual preload. */ diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 5dfb48a70472..f51de972d979 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -47,6 +47,7 @@ import static android.content.pm.PackageManager.INSTALL_FAILED_INTERNAL_ERROR; import static android.content.pm.PackageManager.INSTALL_FAILED_INVALID_APK; import static android.content.pm.PackageManager.INSTALL_FAILED_INVALID_INSTALL_LOCATION; import static android.content.pm.PackageManager.INSTALL_FAILED_MISSING_SHARED_LIBRARY; +import static android.content.pm.PackageManager.INSTALL_FAILED_NEWER_SDK; import static android.content.pm.PackageManager.INSTALL_FAILED_PACKAGE_CHANGED; import static android.content.pm.PackageManager.INSTALL_FAILED_REPLACE_COULDNT_DELETE; import static android.content.pm.PackageManager.INSTALL_FAILED_SANDBOX_VERSION_DOWNGRADE; @@ -16283,6 +16284,16 @@ public class PackageManagerService extends IPackageManager.Stub Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); } + // App targetSdkVersion is below min supported version + if (!forceSdk && pkg.applicationInfo.isTargetingDeprecatedSdkVersion()) { + Slog.w(TAG, "App " + pkg.packageName + " targets deprecated sdk"); + + res.setError(INSTALL_FAILED_NEWER_SDK, + "App is targeting deprecated sdk (targetSdkVersion should be at least " + + Build.VERSION.MIN_SUPPORTED_TARGET_SDK_INT + ")."); + return; + } + // Instant apps must have target SDK >= O and have targetSanboxVersion >= 2 if (instantApp && pkg.applicationInfo.targetSdkVersion <= Build.VERSION_CODES.N_MR1) { Slog.w(TAG, "Instant app package " + pkg.packageName + " does not target O"); |