From 4c3915a0f73e51d0c70d93fe5b9ed125d5739b93 Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Mon, 31 Jan 2011 16:36:32 -0800 Subject: Do not check features in PackageManagerService PackageManagerService shouldn't check features that a package declares that it uses because this will cause problems in the future when we add more features that older phones didn't explicitly declare. We must rely on markets to know about phones and filter them for us to avoid this situation. Bug: 3409434 Change-Id: I419a5b936be3572b83a485081a6c81b2f1c8741c --- core/tests/coretests/res/raw/install_uses_feature | Bin 3198 -> 3178 bytes .../src/android/content/pm/PackageManagerTests.java | 15 ++++++++++++--- .../com/android/server/PackageManagerService.java | 20 -------------------- 3 files changed, 12 insertions(+), 23 deletions(-) diff --git a/core/tests/coretests/res/raw/install_uses_feature b/core/tests/coretests/res/raw/install_uses_feature index 769a246513f0..eeeb3092ee4a 100644 Binary files a/core/tests/coretests/res/raw/install_uses_feature and b/core/tests/coretests/res/raw/install_uses_feature differ diff --git a/core/tests/coretests/src/android/content/pm/PackageManagerTests.java b/core/tests/coretests/src/android/content/pm/PackageManagerTests.java index 0e65df555ec4..7af64e4a9cc9 100755 --- a/core/tests/coretests/src/android/content/pm/PackageManagerTests.java +++ b/core/tests/coretests/src/android/content/pm/PackageManagerTests.java @@ -3098,10 +3098,19 @@ public class PackageManagerTests extends AndroidTestCase { fail, retCode, PackageInfo.INSTALL_LOCATION_UNSPECIFIED); } + /** + * Unknown features should be allowed to install. This prevents older phones + * from rejecting new packages that specify features that didn't exist when + * an older phone existed. All older phones are assumed to have those + * features. + *

+ * Right now we allow all packages to be installed regardless of their + * features. + */ @LargeTest - public void testUsesFeatureMissingFeature() { - int retCode = PackageManager.INSTALL_FAILED_MISSING_FEATURE; - installFromRawResource("install.apk", R.raw.install_uses_feature, 0, true, true, retCode, + public void testUsesFeatureUnknownFeature() { + int retCode = PackageManager.INSTALL_SUCCEEDED; + installFromRawResource("install.apk", R.raw.install_uses_feature, 0, true, false, retCode, PackageInfo.INSTALL_LOCATION_UNSPECIFIED); } diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java index d75aef6d7c68..f3b5f4b17d78 100644 --- a/services/java/com/android/server/PackageManagerService.java +++ b/services/java/com/android/server/PackageManagerService.java @@ -2924,26 +2924,6 @@ class PackageManagerService extends IPackageManager.Stub { } } - if (pkg.reqFeatures != null) { - int N = pkg.reqFeatures.size(); - for (int i = 0; i < N; i++) { - FeatureInfo fi = pkg.reqFeatures.get(i); - if ((fi.flags & FeatureInfo.FLAG_REQUIRED) == 0) { - // Don't care. - continue; - } - - if (fi.name != null) { - if (mAvailableFeatures.get(fi.name) == null) { - Slog.e(TAG, "Package " + pkg.packageName - + " requires unavailable feature " + fi.name + "; failing!"); - mLastScanError = PackageManager.INSTALL_FAILED_MISSING_FEATURE; - return null; - } - } - } - } - if (pkg.mSharedUserId != null) { suid = mSettings.getSharedUserLP(pkg.mSharedUserId, pkg.applicationInfo.flags, true); -- cgit v1.2.3-59-g8ed1b