diff options
author | Winson Chiu <chiuwinson@google.com> | 2022-06-27 18:27:54 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-06-29 00:03:34 +0000 |
commit | 27cae49f7eecfea15240748852cc1a220e1009cb (patch) | |
tree | c4f15b69f7d1eb17f60ce69a38e1272accf28644 | |
parent | d1fb1f4e9952f474ce0be2a83e4117892a5dd9c3 (diff) | |
download | base-27cae49f7eecfea15240748852cc1a220e1009cb.tar.gz |
Correctly parse minSdk even when targetSdk is a codename
The code that assigned target to min if min was not specified was
only checking for min codenames, but if the manifest specified a
numerical minSdkVersion, that is valid and would incorrectly prevent
the package from installing.
Bug: 237059024
Test: mts-tradefed > mts-eng-only -m ApkInApexTest
Change-Id: I3a2b9baa82ebb8ca9031c9fa128ce12bff17226e
(cherry picked from commit bcf5b69c41b2a5401682e424596c33d1900bf791)
Merged-In: I3a2b9baa82ebb8ca9031c9fa128ce12bff17226e
-rw-r--r-- | core/java/android/content/pm/parsing/ApkLiteParseUtils.java | 5 | ||||
-rw-r--r-- | services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageUtils.java | 5 |
2 files changed, 8 insertions, 2 deletions
diff --git a/core/java/android/content/pm/parsing/ApkLiteParseUtils.java b/core/java/android/content/pm/parsing/ApkLiteParseUtils.java index 20a4fdf658c6..10d6f2d6d04b 100644 --- a/core/java/android/content/pm/parsing/ApkLiteParseUtils.java +++ b/core/java/android/content/pm/parsing/ApkLiteParseUtils.java @@ -542,14 +542,17 @@ public class ApkLiteParseUtils { int minVer = DEFAULT_MIN_SDK_VERSION; String minCode = null; + boolean minAssigned = false; int targetVer = DEFAULT_TARGET_SDK_VERSION; String targetCode = null; if (!TextUtils.isEmpty(minSdkVersionString)) { try { minVer = Integer.parseInt(minSdkVersionString); + minAssigned = true; } catch (NumberFormatException ignored) { minCode = minSdkVersionString; + minAssigned = !TextUtils.isEmpty(minCode); } } @@ -558,7 +561,7 @@ public class ApkLiteParseUtils { targetVer = Integer.parseInt(targetSdkVersionString); } catch (NumberFormatException ignored) { targetCode = targetSdkVersionString; - if (minCode == null) { + if (!minAssigned) { minCode = targetCode; } } diff --git a/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageUtils.java b/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageUtils.java index 06a54a461d5e..9bfb40fe11f7 100644 --- a/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageUtils.java +++ b/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageUtils.java @@ -1540,6 +1540,7 @@ public class ParsingPackageUtils { try { int minVers = ParsingUtils.DEFAULT_MIN_SDK_VERSION; String minCode = null; + boolean minAssigned = false; int targetVers = ParsingUtils.DEFAULT_TARGET_SDK_VERSION; String targetCode = null; int maxVers = Integer.MAX_VALUE; @@ -1548,9 +1549,11 @@ public class ParsingPackageUtils { if (val != null) { if (val.type == TypedValue.TYPE_STRING && val.string != null) { minCode = val.string.toString(); + minAssigned = !TextUtils.isEmpty(minCode); } else { // If it's not a string, it's an integer. minVers = val.data; + minAssigned = true; } } @@ -1558,7 +1561,7 @@ public class ParsingPackageUtils { if (val != null) { if (val.type == TypedValue.TYPE_STRING && val.string != null) { targetCode = val.string.toString(); - if (minCode == null) { + if (!minAssigned) { minCode = targetCode; } } else { |