diff options
| author | 2020-09-03 15:05:39 -0700 | |
|---|---|---|
| committer | 2020-09-17 10:37:11 -0700 | |
| commit | 050de3f78b430a74be2d742a73266eaa8aba37ac (patch) | |
| tree | 95fc0b72d245c372c11975cc234129d3afc7162b | |
| parent | 40e1467fd0e7d02c59cd0b2db9599596e98bd4bc (diff) | |
Add getTargetSdkVersion without AppInfo
For quickly checking an app's targetSdkVersion without building and
returning an entire ApplicationInfo object.
Bug: 164459559
Test: atest android.content.pm.cts.PackageManagerTest#testGetInfo
Change-Id: Ibe1a3e977cd71b23e26395eb6cc73f61c1a85a0e
| -rw-r--r-- | api/current.txt | 1 | ||||
| -rw-r--r-- | core/java/android/app/ApplicationPackageManager.java | 13 | ||||
| -rw-r--r-- | core/java/android/content/pm/IPackageManager.aidl | 5 | ||||
| -rw-r--r-- | core/java/android/content/pm/PackageManager.java | 9 | ||||
| -rw-r--r-- | non-updatable-api/current.txt | 1 | ||||
| -rw-r--r-- | services/core/java/com/android/server/pm/PackageManagerService.java | 31 |
6 files changed, 52 insertions, 8 deletions
diff --git a/api/current.txt b/api/current.txt index afd93c363e60..0b6e85126381 100644 --- a/api/current.txt +++ b/api/current.txt @@ -12061,6 +12061,7 @@ package android.content.pm { method public boolean getSyntheticAppDetailsActivityEnabled(@NonNull String); method @NonNull public abstract android.content.pm.FeatureInfo[] getSystemAvailableFeatures(); method @Nullable public abstract String[] getSystemSharedLibraryNames(); + method @IntRange(from=0) public int getTargetSdkVersion(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException; method @Nullable public abstract CharSequence getText(@NonNull String, @StringRes int, @Nullable android.content.pm.ApplicationInfo); method @NonNull public abstract android.graphics.drawable.Drawable getUserBadgedDrawableForDensity(@NonNull android.graphics.drawable.Drawable, @NonNull android.os.UserHandle, @Nullable android.graphics.Rect, int); method @NonNull public abstract android.graphics.drawable.Drawable getUserBadgedIcon(@NonNull android.graphics.drawable.Drawable, @NonNull android.os.UserHandle); diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java index 066a00732965..3d966c7fbc38 100644 --- a/core/java/android/app/ApplicationPackageManager.java +++ b/core/java/android/app/ApplicationPackageManager.java @@ -471,6 +471,19 @@ public class ApplicationPackageManager extends PackageManager { } @Override + public int getTargetSdkVersion(@NonNull String packageName) throws NameNotFoundException { + try { + int version = mPM.getTargetSdkVersion(packageName); + if (version != -1) { + return version; + } + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + throw new PackageManager.NameNotFoundException(packageName); + } + + @Override public ActivityInfo getActivityInfo(ComponentName className, int flags) throws NameNotFoundException { final int userId = getUserId(); diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl index 1f8cee25be51..cff238518130 100644 --- a/core/java/android/content/pm/IPackageManager.aidl +++ b/core/java/android/content/pm/IPackageManager.aidl @@ -82,6 +82,11 @@ interface IPackageManager { @UnsupportedAppUsage ApplicationInfo getApplicationInfo(String packageName, int flags ,int userId); + /** + * @return the target SDK for the given package name, or -1 if it cannot be retrieved + */ + int getTargetSdkVersion(String packageName); + @UnsupportedAppUsage ActivityInfo getActivityInfo(in ComponentName className, int flags, int userId); diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index e68df3383642..bbb9ab4a5b10 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -4099,6 +4099,15 @@ public abstract class PackageManager { } /** + * @return The target SDK version for the given package name. + * @throws NameNotFoundException if a package with the given name cannot be found on the system. + */ + @IntRange(from = 0) + public int getTargetSdkVersion(@NonNull String packageName) throws NameNotFoundException { + throw new UnsupportedOperationException(); + } + + /** * Retrieve all of the information we know about a particular activity * class. * diff --git a/non-updatable-api/current.txt b/non-updatable-api/current.txt index 4dd3f008f97a..1d3ad48fb279 100644 --- a/non-updatable-api/current.txt +++ b/non-updatable-api/current.txt @@ -12061,6 +12061,7 @@ package android.content.pm { method public boolean getSyntheticAppDetailsActivityEnabled(@NonNull String); method @NonNull public abstract android.content.pm.FeatureInfo[] getSystemAvailableFeatures(); method @Nullable public abstract String[] getSystemSharedLibraryNames(); + method @IntRange(from=0) public int getTargetSdkVersion(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException; method @Nullable public abstract CharSequence getText(@NonNull String, @StringRes int, @Nullable android.content.pm.ApplicationInfo); method @NonNull public abstract android.graphics.drawable.Drawable getUserBadgedDrawableForDensity(@NonNull android.graphics.drawable.Drawable, @NonNull android.os.UserHandle, @Nullable android.graphics.Rect, int); method @NonNull public abstract android.graphics.drawable.Drawable getUserBadgedIcon(@NonNull android.graphics.drawable.Drawable, @NonNull android.os.UserHandle); diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 35648dabb86d..df91e3f26ebb 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -5423,6 +5423,23 @@ public class PackageManagerService extends IPackageManager.Stub } @Override + public int getTargetSdkVersion(String packageName) { + synchronized (mLock) { + final AndroidPackage pkg = mPackages.get(packageName); + if (pkg == null) { + return -1; + } + + final PackageSetting ps = getPackageSetting(pkg.getPackageName()); + if (shouldFilterApplicationLocked(ps, Binder.getCallingUid(), + UserHandle.getCallingUserId())) { + return -1; + } + return pkg.getTargetSdkVersion(); + } + } + + @Override public ActivityInfo getActivityInfo(ComponentName component, int flags, int userId) { return getActivityInfoInternal(component, flags, Binder.getCallingUid(), userId); } @@ -24205,15 +24222,13 @@ public class PackageManagerService extends IPackageManager.Stub } @Override - public int getTargetSdkVersionForPackage(String packageName) - throws RemoteException { - int callingUser = UserHandle.getUserId(Binder.getCallingUid()); - ApplicationInfo info = getApplicationInfo(packageName, 0, callingUser); - if (info == null) { - throw new RemoteException( - "Couldn't get ApplicationInfo for package " + packageName); + public int getTargetSdkVersionForPackage(String packageName) throws RemoteException { + int targetSdk = getTargetSdkVersion(packageName); + if (targetSdk != -1) { + return targetSdk; } - return info.targetSdkVersion; + + throw new RemoteException("Couldn't get targetSdkVersion for package " + packageName); } @Override |