From 7b59e7b2d038a50573155c2d51dd086f744eb26a Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Mon, 10 Sep 2018 13:35:13 -0700 Subject: [PATCH] Make manifest_fixer.py keep targetSdkVersion high with min_sdk_version targetSdkVersion should stay as "current" when min_sdk_version is set but sdk_version is not. Bug: 112438448 Test: atest CtsTelecomTestCases Change-Id: I11dc27eccd31200d1ce27c7e332106bb825651b4 --- java/android_manifest.go | 13 +++++++--- scripts/manifest_fixer.py | 21 +++++++++------ scripts/manifest_fixer_test.py | 47 +++++++++++++++++----------------- 3 files changed, 46 insertions(+), 35 deletions(-) diff --git a/java/android_manifest.go b/java/android_manifest.go index 657747520..168a22d31 100644 --- a/java/android_manifest.go +++ b/java/android_manifest.go @@ -25,10 +25,14 @@ import ( var manifestFixerRule = pctx.AndroidStaticRule("manifestFixer", blueprint.RuleParams{ - Command: `${config.ManifestFixerCmd} --minSdkVersion ${minSdkVersion} $args $in $out`, + Command: `${config.ManifestFixerCmd} ` + + `--minSdkVersion ${minSdkVersion} ` + + `--targetSdkVersion ${targetSdkVersion} ` + + `--raise-min-sdk-version ` + + `$args $in $out`, CommandDeps: []string{"${config.ManifestFixerCmd}"}, }, - "minSdkVersion", "args") + "minSdkVersion", "targetSdkVersion", "args") var manifestMergerRule = pctx.AndroidStaticRule("manifestMerger", blueprint.RuleParams{ @@ -53,8 +57,9 @@ func manifestMerger(ctx android.ModuleContext, manifest android.Path, sdkContext Input: manifest, Output: fixedManifest, Args: map[string]string{ - "minSdkVersion": sdkVersionOrDefault(ctx, sdkContext.minSdkVersion()), - "args": strings.Join(args, " "), + "minSdkVersion": sdkVersionOrDefault(ctx, sdkContext.minSdkVersion()), + "targetSdkVersion": sdkVersionOrDefault(ctx, sdkContext.sdkVersion()), + "args": strings.Join(args, " "), }, }) manifest = fixedManifest diff --git a/scripts/manifest_fixer.py b/scripts/manifest_fixer.py index db35c8d35..b6fe34e6e 100755 --- a/scripts/manifest_fixer.py +++ b/scripts/manifest_fixer.py @@ -49,6 +49,10 @@ def parse_args(): parser = argparse.ArgumentParser() parser.add_argument('--minSdkVersion', default='', dest='min_sdk_version', help='specify minSdkVersion used by the build system') + parser.add_argument('--targetSdkVersion', default='', dest='target_sdk_version', + help='specify targetSdkVersion used by the build system') + parser.add_argument('--raise-min-sdk-version', dest='raise_min_sdk_version', action='store_true', + help='raise the minimum sdk version in the manifest if necessary') parser.add_argument('--library', dest='library', action='store_true', help='manifest is for a static library') parser.add_argument('--uses-library', dest='uses_libraries', action='append', @@ -130,12 +134,13 @@ def get_indent(element, default_level): return indent -def raise_min_sdk_version(doc, requested, library): +def raise_min_sdk_version(doc, min_sdk_version, target_sdk_version, library): """Ensure the manifest contains a tag with a minSdkVersion. Args: doc: The XML document. May be modified by this function. - requested: The requested minSdkVersion attribute. + min_sdk_version: The requested minSdkVersion attribute. + target_sdk_version: The requested targetSdkVersion attribute. Raises: RuntimeError: invalid manifest """ @@ -162,11 +167,11 @@ def raise_min_sdk_version(doc, requested, library): min_attr = element.getAttributeNodeNS(android_ns, 'minSdkVersion') if min_attr is None: min_attr = doc.createAttributeNS(android_ns, 'android:minSdkVersion') - min_attr.value = requested + min_attr.value = min_sdk_version element.setAttributeNode(min_attr) else: - if compare_version_gt(requested, min_attr.value): - min_attr.value = requested + if compare_version_gt(min_sdk_version, min_attr.value): + min_attr.value = min_sdk_version # Insert the targetSdkVersion attribute if it is missing. If it is already # present leave it as is. @@ -176,7 +181,7 @@ def raise_min_sdk_version(doc, requested, library): if library: target_attr.value = '1' else: - target_attr.value = requested + target_attr.value = target_sdk_version element.setAttributeNode(target_attr) @@ -271,8 +276,8 @@ def main(): ensure_manifest_android_ns(doc) - if args.min_sdk_version: - raise_min_sdk_version(doc, args.min_sdk_version, args.library) + if args.raise_min_sdk_version: + raise_min_sdk_version(doc, args.min_sdk_version, args.target_sdk_version, args.library) if args.uses_libraries: add_uses_libraries(doc, args.uses_libraries) diff --git a/scripts/manifest_fixer_test.py b/scripts/manifest_fixer_test.py index 99e8b0379..66a2317f5 100755 --- a/scripts/manifest_fixer_test.py +++ b/scripts/manifest_fixer_test.py @@ -55,9 +55,10 @@ class RaiseMinSdkVersionTest(unittest.TestCase): """Unit tests for raise_min_sdk_version function.""" def raise_min_sdk_version_test(self, input_manifest, min_sdk_version, - library): + target_sdk_version, library): doc = minidom.parseString(input_manifest) - manifest_fixer.raise_min_sdk_version(doc, min_sdk_version, library) + manifest_fixer.raise_min_sdk_version(doc, min_sdk_version, + target_sdk_version, library) output = StringIO.StringIO() manifest_fixer.write_xml(output, doc) return output.getvalue() @@ -84,7 +85,7 @@ class RaiseMinSdkVersionTest(unittest.TestCase): manifest_input = self.manifest_tmpl % '' expected = self.manifest_tmpl % self.uses_sdk(min='28', target='28') - output = self.raise_min_sdk_version_test(manifest_input, '28', False) + output = self.raise_min_sdk_version_test(manifest_input, '28', '28', False) self.assertEqual(output, expected) def test_no_min(self): @@ -93,7 +94,7 @@ class RaiseMinSdkVersionTest(unittest.TestCase): manifest_input = self.manifest_tmpl % ' \n' expected = self.manifest_tmpl % self.uses_sdk(min='28', target='28', extra='extra="foo"') - output = self.raise_min_sdk_version_test(manifest_input, '28', False) + output = self.raise_min_sdk_version_test(manifest_input, '28', '28', False) self.assertEqual(output, expected) def test_raise_min(self): @@ -101,7 +102,7 @@ class RaiseMinSdkVersionTest(unittest.TestCase): manifest_input = self.manifest_tmpl % self.uses_sdk(min='27') expected = self.manifest_tmpl % self.uses_sdk(min='28', target='28') - output = self.raise_min_sdk_version_test(manifest_input, '28', False) + output = self.raise_min_sdk_version_test(manifest_input, '28', '28', False) self.assertEqual(output, expected) def test_raise(self): @@ -109,7 +110,7 @@ class RaiseMinSdkVersionTest(unittest.TestCase): manifest_input = self.manifest_tmpl % self.uses_sdk(min='27') expected = self.manifest_tmpl % self.uses_sdk(min='28', target='28') - output = self.raise_min_sdk_version_test(manifest_input, '28', False) + output = self.raise_min_sdk_version_test(manifest_input, '28', '28', False) self.assertEqual(output, expected) def test_no_raise_min(self): @@ -117,7 +118,7 @@ class RaiseMinSdkVersionTest(unittest.TestCase): manifest_input = self.manifest_tmpl % self.uses_sdk(min='28') expected = self.manifest_tmpl % self.uses_sdk(min='28', target='27') - output = self.raise_min_sdk_version_test(manifest_input, '27', False) + output = self.raise_min_sdk_version_test(manifest_input, '27', '27', False) self.assertEqual(output, expected) def test_raise_codename(self): @@ -125,7 +126,7 @@ class RaiseMinSdkVersionTest(unittest.TestCase): manifest_input = self.manifest_tmpl % self.uses_sdk(min='28') expected = self.manifest_tmpl % self.uses_sdk(min='P', target='P') - output = self.raise_min_sdk_version_test(manifest_input, 'P', False) + output = self.raise_min_sdk_version_test(manifest_input, 'P', 'P', False) self.assertEqual(output, expected) def test_no_raise_codename(self): @@ -133,7 +134,7 @@ class RaiseMinSdkVersionTest(unittest.TestCase): manifest_input = self.manifest_tmpl % self.uses_sdk(min='P') expected = self.manifest_tmpl % self.uses_sdk(min='P', target='28') - output = self.raise_min_sdk_version_test(manifest_input, '28', False) + output = self.raise_min_sdk_version_test(manifest_input, '28', '28', False) self.assertEqual(output, expected) def test_target(self): @@ -141,31 +142,31 @@ class RaiseMinSdkVersionTest(unittest.TestCase): manifest_input = self.manifest_tmpl % self.uses_sdk(min='26', target='27') expected = self.manifest_tmpl % self.uses_sdk(min='28', target='27') - output = self.raise_min_sdk_version_test(manifest_input, '28', False) + output = self.raise_min_sdk_version_test(manifest_input, '28', '29', False) self.assertEqual(output, expected) def test_no_target(self): """Tests inserting targetSdkVersion when minSdkVersion exists.""" manifest_input = self.manifest_tmpl % self.uses_sdk(min='27') - expected = self.manifest_tmpl % self.uses_sdk(min='28', target='28') - output = self.raise_min_sdk_version_test(manifest_input, '28', False) + expected = self.manifest_tmpl % self.uses_sdk(min='28', target='29') + output = self.raise_min_sdk_version_test(manifest_input, '28', '29', False) self.assertEqual(output, expected) def test_target_no_min(self): - """Tests inserting targetSdkVersion when minSdkVersion exists.""" + """"Tests inserting targetSdkVersion when minSdkVersion exists.""" manifest_input = self.manifest_tmpl % self.uses_sdk(target='27') expected = self.manifest_tmpl % self.uses_sdk(min='28', target='27') - output = self.raise_min_sdk_version_test(manifest_input, '28', False) + output = self.raise_min_sdk_version_test(manifest_input, '28', '29', False) self.assertEqual(output, expected) def test_no_target_no_min(self): """Tests inserting targetSdkVersion when minSdkVersion does not exist.""" manifest_input = self.manifest_tmpl % '' - expected = self.manifest_tmpl % self.uses_sdk(min='28', target='28') - output = self.raise_min_sdk_version_test(manifest_input, '28', False) + expected = self.manifest_tmpl % self.uses_sdk(min='28', target='29') + output = self.raise_min_sdk_version_test(manifest_input, '28', '29', False) self.assertEqual(output, expected) def test_library_no_target(self): @@ -173,7 +174,7 @@ class RaiseMinSdkVersionTest(unittest.TestCase): manifest_input = self.manifest_tmpl % self.uses_sdk(min='27') expected = self.manifest_tmpl % self.uses_sdk(min='28', target='1') - output = self.raise_min_sdk_version_test(manifest_input, '28', True) + output = self.raise_min_sdk_version_test(manifest_input, '28', '29', True) self.assertEqual(output, expected) def test_library_target_no_min(self): @@ -181,7 +182,7 @@ class RaiseMinSdkVersionTest(unittest.TestCase): manifest_input = self.manifest_tmpl % self.uses_sdk(target='27') expected = self.manifest_tmpl % self.uses_sdk(min='28', target='27') - output = self.raise_min_sdk_version_test(manifest_input, '28', True) + output = self.raise_min_sdk_version_test(manifest_input, '28', '29', True) self.assertEqual(output, expected) def test_library_no_target_no_min(self): @@ -189,7 +190,7 @@ class RaiseMinSdkVersionTest(unittest.TestCase): manifest_input = self.manifest_tmpl % '' expected = self.manifest_tmpl % self.uses_sdk(min='28', target='1') - output = self.raise_min_sdk_version_test(manifest_input, '28', True) + output = self.raise_min_sdk_version_test(manifest_input, '28', '29', True) self.assertEqual(output, expected) def test_extra(self): @@ -203,10 +204,10 @@ class RaiseMinSdkVersionTest(unittest.TestCase): # pylint: disable=line-too-long expected = self.manifest_tmpl % ( ' \n' - ' \n' + ' \n' ' \n') - output = self.raise_min_sdk_version_test(manifest_input, '28', False) + output = self.raise_min_sdk_version_test(manifest_input, '28', '29', False) self.assertEqual(output, expected) @@ -217,10 +218,10 @@ class RaiseMinSdkVersionTest(unittest.TestCase): # pylint: disable=line-too-long expected = self.manifest_tmpl % ( - ' \n' + ' \n' ' \n') - output = self.raise_min_sdk_version_test(manifest_input, '28', False) + output = self.raise_min_sdk_version_test(manifest_input, '28', '29', False) self.assertEqual(output, expected)