diff --git a/core/tests/coretests/apks/install_uses_feature/Android.mk b/core/tests/coretests/apks/install_uses_feature/Android.mk new file mode 100644 index 0000000000000..c0a5067f168df --- /dev/null +++ b/core/tests/coretests/apks/install_uses_feature/Android.mk @@ -0,0 +1,11 @@ +LOCAL_PATH:= $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_MODULE_TAGS := tests + +LOCAL_SRC_FILES := $(call all-subdir-java-files) + +LOCAL_PACKAGE_NAME := FrameworkCoreTests_install_uses_feature + +include $(BUILD_PACKAGE) + diff --git a/core/tests/coretests/apks/install_uses_feature/AndroidManifest.xml b/core/tests/coretests/apks/install_uses_feature/AndroidManifest.xml new file mode 100644 index 0000000000000..ecbd7c423370a --- /dev/null +++ b/core/tests/coretests/apks/install_uses_feature/AndroidManifest.xml @@ -0,0 +1,23 @@ + + + + + + + + + diff --git a/core/tests/coretests/apks/install_uses_feature/res/values/strings.xml b/core/tests/coretests/apks/install_uses_feature/res/values/strings.xml new file mode 100644 index 0000000000000..3b8b3b1af9b5e --- /dev/null +++ b/core/tests/coretests/apks/install_uses_feature/res/values/strings.xml @@ -0,0 +1,6 @@ + + + + + dummy + diff --git a/core/tests/coretests/res/raw/install_uses_feature b/core/tests/coretests/res/raw/install_uses_feature new file mode 100644 index 0000000000000..9eef9aaafba7a Binary files /dev/null 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 d5f385b290c4d..410e5e9ab38a7 100755 --- a/core/tests/coretests/src/android/content/pm/PackageManagerTests.java +++ b/core/tests/coretests/src/android/content/pm/PackageManagerTests.java @@ -2838,6 +2838,23 @@ public class PackageManagerTests extends AndroidTestCase { installFromRawResource("install.apk", rapk2, PackageManager.INSTALL_REPLACE_EXISTING, true, 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 testUsesFeatureUnknownFeature() { + int retCode = PackageManager.INSTALL_SUCCEEDED; + installFromRawResource("install.apk", R.raw.install_uses_feature, 0, true, false, retCode, + PackageInfo.INSTALL_LOCATION_UNSPECIFIED); + } + /*---------- Recommended install location tests ----*/ /* * TODO's diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java index 9b8a6057743ef..8c74566c231b4 100644 --- a/services/java/com/android/server/PackageManagerService.java +++ b/services/java/com/android/server/PackageManagerService.java @@ -2926,27 +2926,6 @@ class PackageManagerService extends IPackageManager.Stub { System.arraycopy(mTmpSharedLibraries, 0, pkg.usesLibraryFiles, 0, num); } - - if (pkg.reqFeatures != null) { - N = pkg.reqFeatures.size(); - for (int i=0; i