Recompile with correct min-sdk and android.jar
Bug: 123150326
Change-Id: I397f5852cc25b0c1f288945509fdaac15ca2e618
diff --git a/tools/as_utils.py b/tools/as_utils.py
index 93c910e..b4eb396 100644
--- a/tools/as_utils.py
+++ b/tools/as_utils.py
@@ -66,6 +66,44 @@
if (utils.R8_JAR not in line) and (utils.R8LIB_JAR not in line):
f.write(line)
+def GetMinAndCompileSdk(app, config, checkout_dir, apk_reference):
+ app_module = config.get('app_module', 'app')
+ build_gradle_file = os.path.join(checkout_dir, app_module, 'build.gradle')
+ assert os.path.isfile(build_gradle_file), (
+ 'Expected to find build.gradle file at {}'.format(build_gradle_file))
+
+ compile_sdk = None
+ min_sdks = []
+ target_sdk = None
+
+ with open(build_gradle_file) as f:
+ for line in f.readlines():
+ stripped = line.strip()
+ if stripped.startswith('compileSdkVersion '):
+ assert not compile_sdk
+ compile_sdk = int(stripped[len('compileSdkVersion '):])
+ if stripped.startswith('minSdkVersion '):
+ min_sdks.append(int(stripped[len('minSdkVersion '):]))
+ elif stripped.startswith('targetSdkVersion '):
+ assert not target_sdk
+ target_sdk = int(stripped[len('targetSdkVersion '):])
+
+ if len(min_sdks) == 1:
+ min_sdk = min_sdks[0]
+ else:
+ assert 'min_sdk' in config
+ min_sdk = config.get('min_sdk')
+
+ assert min_sdk, (
+ 'Expected to find `minSdkVersion` in {}'.format(build_gradle_file))
+ assert compile_sdk, (
+ 'Expected to find `compileSdkVersion` in {}'.format(build_gradle_file))
+
+ assert not target_sdk or target_sdk == compile_sdk, (
+ 'Expected `compileSdkVersion` and `targetSdkVersion` to be the same')
+
+ return (min_sdk, compile_sdk)
+
def IsGradleTaskName(x):
# Check that it is non-empty.
if not x:
diff --git a/tools/run_on_as_app.py b/tools/run_on_as_app.py
index a74f868..e9b2dcd 100755
--- a/tools/run_on_as_app.py
+++ b/tools/run_on_as_app.py
@@ -78,6 +78,7 @@
'git_repo': 'https://github.com/sgjesse/tachiyomi.git',
'flavor': 'standard',
'releaseTarget': 'app:assembleRelease',
+ 'min_sdk': 16
},
'tivi': {
'app_id': 'app.tivi',
@@ -292,6 +293,10 @@
with open(proguard_config_file) as old:
assert(sum(1 for line in new) > sum(1 for line in old))
+ # Extract min-sdk and target-sdk
+ (min_sdk, compile_sdk) = as_utils.GetMinAndCompileSdk(app, config,
+ checkout_dir, apk_dest)
+
# Now rebuild generated apk.
previous_apk = apk_dest
for i in range(1, options.r8_compilation_steps):
@@ -300,7 +305,7 @@
checkout_dir, 'out', shrinker, 'app-release-{}.apk'.format(i))
RebuildAppWithShrinker(
previous_apk, recompiled_apk_dest, ext_proguard_config_file,
- shrinker)
+ shrinker, min_sdk, compile_sdk)
recompilation_result = {
'apk_dest': recompiled_apk_dest,
'build_status': 'success',
@@ -422,18 +427,24 @@
return (apk_dest, profile_dest_dir, proguard_config_dest)
-def RebuildAppWithShrinker(apk, apk_dest, proguard_config_file, shrinker):
+def RebuildAppWithShrinker(
+ apk, apk_dest, proguard_config_file, shrinker, min_sdk, compile_sdk):
assert 'r8' in shrinker
assert apk_dest.endswith('.apk')
# Compile given APK with shrinker to temporary zip file.
- api = 28 # TODO(christofferqa): Should be the one from build.gradle
- android_jar = os.path.join(utils.REPO_ROOT, utils.ANDROID_JAR.format(api=api))
+ android_jar = os.path.join(
+ utils.REPO_ROOT,
+ utils.ANDROID_JAR.format(api=compile_sdk))
r8_jar = utils.R8LIB_JAR if IsMinifiedR8(shrinker) else utils.R8_JAR
zip_dest = apk_dest[:-4] + '.zip'
- cmd = ['java', '-ea:com.android.tools.r8...', '-cp', r8_jar,
- 'com.android.tools.r8.R8', '--release', '--pg-conf', proguard_config_file,
+ # TODO(christofferqa): Entry point should be CompatProguard if the shrinker
+ # is 'r8'.
+ entry_point = 'com.android.tools.r8.R8'
+
+ cmd = ['java', '-ea:com.android.tools.r8...', '-cp', r8_jar, entry_point,
+ '--release', '--min-api', str(min_sdk), '--pg-conf', proguard_config_file,
'--lib', android_jar, '--output', zip_dest, apk]
utils.PrintCmd(cmd)