summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Przemyslaw Szczepaniak <pszczepaniak@google.com> 2017-12-06 11:58:09 +0000
committer Przemyslaw Szczepaniak <pszczepaniak@google.com> 2017-12-12 11:47:12 +0000
commitab223112d1a163e641e7c1adb6429e27e37675a6 (patch)
tree290ee444ddd504cfe55de6a64c95d0a3f9e2ecf1
parent73b6bc86af1b5f278b83ff14365d63929b0553b7 (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.java6
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java11
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");