summaryrefslogtreecommitdiffstats
path: root/build
diff options
context:
space:
mode:
Diffstat (limited to 'build')
-rw-r--r--build/android/dex_action.gypi2
-rwxr-xr-xbuild/android/gyp/apk_obfuscate.py58
-rw-r--r--build/android/gyp/util/build_utils.py2
-rw-r--r--build/java_aidl.gypi2
-rw-r--r--build/java_apk.gypi39
5 files changed, 81 insertions, 22 deletions
diff --git a/build/android/dex_action.gypi b/build/android/dex_action.gypi
index 0575e52..9ea3e71 100644
--- a/build/android/dex_action.gypi
+++ b/build/android/dex_action.gypi
@@ -49,7 +49,7 @@
'--dex-path=<(output_path)',
'--android-sdk-tools=<(android_sdk_tools)',
'--configuration-name=<(CONFIGURATION_NAME)',
- '--proguard-enabled=<(proguard_enabled)',
+ '--proguard-enabled=>(proguard_enabled)',
'--proguard-enabled-input-path=<(proguard_enabled_input_path)',
'--no-locals=>(dex_no_locals)',
'>@(dex_additional_options)',
diff --git a/build/android/gyp/apk_obfuscate.py b/build/android/gyp/apk_obfuscate.py
index 1e2eccf..fb29d0c 100755
--- a/build/android/gyp/apk_obfuscate.py
+++ b/build/android/gyp/apk_obfuscate.py
@@ -27,11 +27,10 @@ def ParseArgs(argv):
help='path to Android SDK\'s android.jar')
parser.add_option('--proguard-jar-path',
help='Path to proguard.jar in the sdk')
-
parser.add_option('--input-jars-paths',
help='Path to jars to include in obfuscated jar')
- parser.add_option('--proguard-config-files',
+ parser.add_option('--proguard-configs',
help='Paths to proguard config files')
parser.add_option('--configuration-name',
@@ -44,6 +43,8 @@ def ParseArgs(argv):
parser.add_option('--testapp', action='store_true',
help='Set this if building an instrumentation test apk')
+ parser.add_option('--tested-apk-obfuscated-jar-path',
+ help='Path to obfusctated jar of the tested apk')
parser.add_option('--test-jar-path',
help='Output path for jar containing all the test apk\'s '
'code.')
@@ -65,6 +66,12 @@ def ParseArgs(argv):
'configuration_name',
'obfuscated_jar_path',
)
+
+ if options.testapp:
+ required_options += (
+ 'test_jar_path',
+ )
+
build_utils.CheckOptions(options, parser, required=required_options)
return options, args
@@ -74,7 +81,7 @@ def main(argv):
options, _ = ParseArgs(argv)
library_classpath = [options.android_sdk_jar]
- javac_custom_classpath = build_utils.ParseGypList(options.input_jars_paths)
+ input_jars = build_utils.ParseGypList(options.input_jars_paths)
dependency_class_filters = [
'*R.class', '*R$*.class', '*Manifest.class', '*BuildConfig.class']
@@ -87,35 +94,64 @@ def main(argv):
if options.testapp:
with zipfile.ZipFile(options.test_jar_path, 'w') as test_jar:
- for jar in build_utils.ParseGypList(options.input_jars_paths):
+ for jar in input_jars:
with zipfile.ZipFile(jar, 'r') as jar_zip:
for name in filter(DependencyClassFilter, jar_zip.namelist()):
with jar_zip.open(name) as zip_entry:
test_jar.writestr(name, zip_entry.read())
if options.configuration_name == 'Release' and options.proguard_enabled:
- proguard_project_classpath = javac_custom_classpath
-
proguard_cmd = [
'java', '-jar', options.proguard_jar_path,
'-forceprocessing',
- '-injars', ':'.join(proguard_project_classpath),
'-libraryjars', ':'.join(library_classpath),
- '-outjars', options.obfuscated_jar_path,
'-dump', options.obfuscated_jar_path + '.dump',
'-printseeds', options.obfuscated_jar_path + '.seeds',
'-printusage', options.obfuscated_jar_path + '.usage',
'-printmapping', options.obfuscated_jar_path + '.mapping',
]
- for proguard_file in build_utils.ParseGypList(
- options.proguard_config_files):
- proguard_cmd += ['-include', proguard_file]
+ exclude_paths = []
+ configs = build_utils.ParseGypList(options.proguard_configs)
+ if (options.tested_apk_obfuscated_jar_path and
+ options.tested_apk_obfuscated_jar_path != '/'):
+ # configs should only contain the process_resources.py generated config.
+ assert len(configs) == 1, (
+ 'test apks should not have custom proguard configs: ' + str(configs))
+ tested_jar_info = build_utils.ReadJson(
+ options.tested_apk_obfuscated_jar_path + '.info')
+ exclude_paths = tested_jar_info['inputs']
+ configs = tested_jar_info['configs']
+ proguard_cmd += [
+ '-dontobfuscate',
+ '-dontoptimize',
+ '-dontskipnonpubliclibraryclassmembers',
+ '-libraryjars', options.tested_apk_obfuscated_jar_path,
+ '-applymapping', options.tested_apk_obfuscated_jar_path + '.mapping',
+ ]
+
+ proguard_injars = [p for p in input_jars if p not in exclude_paths]
+ proguard_cmd += ['-injars', ':'.join(proguard_injars)]
+
+ for config_file in configs:
+ proguard_cmd += ['-include', config_file]
+
+ # The output jar must be specified after inputs.
+ proguard_cmd += ['-outjars', options.obfuscated_jar_path]
build_utils.CheckOutput(proguard_cmd)
+
+ this_info = {
+ 'inputs': proguard_injars,
+ 'configs': configs
+ }
+
+ build_utils.WriteJson(
+ this_info, options.obfuscated_jar_path + '.info')
else:
output_files = [
options.obfuscated_jar_path,
+ options.obfuscated_jar_path + '.info',
options.obfuscated_jar_path + '.dump',
options.obfuscated_jar_path + '.seeds',
options.obfuscated_jar_path + '.usage',
diff --git a/build/android/gyp/util/build_utils.py b/build/android/gyp/util/build_utils.py
index fa8592b..fb6f4f1 100644
--- a/build/android/gyp/util/build_utils.py
+++ b/build/android/gyp/util/build_utils.py
@@ -85,7 +85,7 @@ def WriteJson(obj, path, only_if_changed=False):
with open(path, 'r') as oldfile:
old_dump = oldfile.read()
- new_dump = json.dumps(obj)
+ new_dump = json.dumps(obj, sort_keys=True, indent=2, separators=(',', ': '))
if not only_if_changed or old_dump != new_dump:
with open(path, 'w') as outfile:
diff --git a/build/java_aidl.gypi b/build/java_aidl.gypi
index 2d4ae2e..3c6f8e4 100644
--- a/build/java_aidl.gypi
+++ b/build/java_aidl.gypi
@@ -46,7 +46,7 @@
},
},
'conditions': [
- ['"<(aidl_import_include)"!=""', {
+ ['aidl_import_include != ""', {
'variables': {
'additional_aidl_arguments': [ '-I<(aidl_import_include)' ],
'additional_aidl_input_paths': [ '<!@(find <(aidl_import_include) -name "*.java")', ]
diff --git a/build/java_apk.gypi b/build/java_apk.gypi
index 348ce81..92c8cfa 100644
--- a/build/java_apk.gypi
+++ b/build/java_apk.gypi
@@ -52,6 +52,7 @@
# never_lint - Set to 1 to not run lint on this target.
{
'variables': {
+ 'tested_apk_obfuscated_jar_path%': '/',
'tested_apk_dex_path%': '/',
'additional_input_paths': [],
'input_jars_paths': [],
@@ -158,8 +159,16 @@
# direct_dependent_settings, but a variable set by a direct_dependent_settings
# cannot be lifted in a dependent to all_dependent_settings.
'all_dependent_settings': {
+ 'conditions': [
+ ['proguard_enabled == "true"', {
+ 'variables': {
+ 'proguard_enabled': 'true',
+ }
+ }],
+ ],
'variables': {
'apk_output_jar_path': '<(jar_path)',
+ 'tested_apk_obfuscated_jar_path': '<(obfuscated_jar_path)',
'tested_apk_dex_path': '<(dex_path)',
},
},
@@ -604,23 +613,36 @@
'message': 'Obfuscating <(_target_name)',
'variables': {
'additional_obfuscate_options': [],
+ 'additional_obfuscate_input_paths': [],
'proguard_out_dir': '<(intermediate_dir)/proguard',
'proguard_input_jar_paths': [
'>@(input_jars_paths)',
'<(jar_path)',
],
- 'conditions': [
+ 'target_conditions': [
['is_test_apk == 1', {
'additional_obfuscate_options': [
'--testapp',
],
}],
+ ['is_test_apk == 1 and tested_apk_obfuscated_jar_path != "/"', {
+ 'additional_obfuscate_options': [
+ '--tested-apk-obfuscated-jar-path', '>(tested_apk_obfuscated_jar_path)',
+ ],
+ 'additional_obfuscate_input_paths': [
+ '>(tested_apk_obfuscated_jar_path).info',
+ ],
+ }],
['proguard_enabled == "true"', {
'additional_obfuscate_options': [
'--proguard-enabled',
],
}],
],
+ 'obfuscate_input_jars_paths': [
+ '>@(input_jars_paths)',
+ '<(jar_path)',
+ ],
},
'conditions': [
['is_test_apk == 1', {
@@ -633,15 +655,16 @@
'<(DEPTH)/build/android/gyp/apk_obfuscate.py',
'<(DEPTH)/build/android/gyp/util/build_utils.py',
'>@(proguard_flags_paths)',
- '>@(proguard_input_jar_paths)',
+ '>@(obfuscate_input_jars_paths)',
+ '>@(additional_obfuscate_input_paths)',
+ '<(instr_stamp)',
],
'outputs': [
- # This lists obfuscate_stamp instead of obfuscated_jar_path because
- # ant only writes the latter if the md5 of the inputs changes.
'<(obfuscate_stamp)',
# In non-Release builds, these paths will all be empty files.
'<(obfuscated_jar_path)',
+ '<(obfuscated_jar_path).info',
'<(obfuscated_jar_path).dump',
'<(obfuscated_jar_path).seeds',
'<(obfuscated_jar_path).mapping',
@@ -657,15 +680,17 @@
'--android-sdk-jar', '<(android_sdk_jar)',
'--input-jars-paths=>(proguard_input_jar_paths)',
+ '--proguard-configs=>(proguard_flags_paths)',
+
+
'--test-jar-path', '<(test_jar_path)',
'--obfuscated-jar-path', '<(obfuscated_jar_path)',
'--proguard-jar-path', '<(android_sdk_root)/tools/proguard/lib/proguard.jar',
- '--proguard-config-files=<(proguard_flags_paths)',
'--stamp', '<(obfuscate_stamp)',
- '<@(additional_obfuscate_options)',
+ '>@(additional_obfuscate_options)',
],
},
{
@@ -695,8 +720,6 @@
'>(tested_apk_dex_path).inputs',
],
}],
- ],
- 'conditions': [
['proguard_enabled == "true"', {
'inputs': [ '<(obfuscate_stamp)' ]
}, {