From ac48512417d3f80aee3e36af022825ce7f70621c Mon Sep 17 00:00:00 2001 From: Maxime Biais Date: Tue, 14 Apr 2015 17:21:56 +0200 Subject: [PATCH] new rule to inject version name and code in the AndroidManifest.xml --- BUCK | 29 ++++++++++++++++++------- tools/inject_version_in_manifest.py | 33 +++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 8 deletions(-) create mode 100755 tools/inject_version_in_manifest.py diff --git a/BUCK b/BUCK index 7f62a6ee32a4..b7ee28ae7a90 100644 --- a/BUCK +++ b/BUCK @@ -4,12 +4,12 @@ import re ### rules (no deps) genrule( - name = 'fetch_deps', - srcs = [ - 'tools/fetch_buck_dependencies.py', - ], - cmd = 'tools/fetch_buck_dependencies.py extlibs > $OUT', - out = '../../extlibs/dependencies.log', + name = 'fetch_deps', + srcs = [ + 'tools/fetch_buck_dependencies.py', + ], + cmd = 'tools/fetch_buck_dependencies.py extlibs > $OUT', + out = '../../extlibs/dependencies.log', ) ### Helper functions @@ -51,6 +51,19 @@ def get_build_config_values(filename): values.append('String %s = "%s"' % (key, value)) return values +### Inject versionCode and versionName in the AndroidManifest.xml file + +genrule( + name = 'processed_manifest', + srcs = [ + 'tools/inject_version_in_manifest.py', + 'WordPress/src/main/AndroidManifest.xml', + 'WordPress/build.gradle' + ], + cmd = 'tools/inject_version_in_manifest.py WordPress/src/main/AndroidManifest.xml WordPress/build.gradle > $OUT', + out = 'AndroidManifest.xml', +) + ### Define jar dependencies r_android_library( @@ -327,9 +340,9 @@ r_android_library( android_binary( name = 'wpandroid', - manifest = 'WordPress/src/main/AndroidManifest.xml', - target = 'Google Inc.:Google APIs:21', + manifest = ':processed_manifest', keystore = ':debug_keystore', + package_type = 'debug', deps = [ ':fetch_deps', ':main-lib', diff --git a/tools/inject_version_in_manifest.py b/tools/inject_version_in_manifest.py new file mode 100755 index 000000000000..b0f940ad0a50 --- /dev/null +++ b/tools/inject_version_in_manifest.py @@ -0,0 +1,33 @@ +#!/usr/bin/env python + +import sys +import xml.etree.ElementTree as ET +import xml.dom.minidom + +def parse_inject_manifest(filename, versionCode, versionName): + manifest = xml.dom.minidom.parse(filename) + manifest.documentElement.setAttribute("android:versionCode", versionCode) + manifest.documentElement.setAttribute("android:versionName", versionName) + return manifest.toprettyxml(" ", "") + +def get_version_from_build_gradle(filename): + versionCode = '' + versionName = '' + for sline in (line.strip() for line in open('WordPress/build.gradle').readlines()): + if sline.startswith("versionName"): + versionName = sline.split()[1].replace('"', '') + if sline.startswith("versionCode"): + versionCode = sline.split()[1] + return versionCode, versionName + +def main(): + if len(sys.argv) != 3: + print("Read versionCode and versionName in a build.gradle and inject it in a AndroidManifest.xml") + print("Usage: %s AndroidManifest.xml build.gradle" % sys.argv[0]) + print("Example: %s AndroidManifest.xml build.gradle" % sys.argv[0]) + sys.exit(1) + versionCode, versionName = get_version_from_build_gradle(sys.argv[2]) + print(parse_inject_manifest(sys.argv[1], versionCode, versionName)) + +if __name__ == "__main__": + main()