diff options
author | michaelbai <michaelbai@chromium.org> | 2016-03-23 13:35:23 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-03-23 20:37:31 +0000 |
commit | b6fa1bb99d858a511761e8625e2436846c88b440 (patch) | |
tree | 80f9b0595c50c071dc73ee94416f35aa77803138 /build | |
parent | 9a9d0e9e1925d20b48a4d08693d0504939c9f60d (diff) | |
download | chromium_src-b6fa1bb99d858a511761e8625e2436846c88b440.zip chromium_src-b6fa1bb99d858a511761e8625e2436846c88b440.tar.gz chromium_src-b6fa1bb99d858a511761e8625e2436846c88b440.tar.bz2 |
Support packaging secondary abi native libraries in APK.
BUG=594807
Review URL: https://codereview.chromium.org/1828523002
Cr-Commit-Position: refs/heads/master@{#382917}
Diffstat (limited to 'build')
-rwxr-xr-x | build/android/gyp/apkbuilder.py | 64 | ||||
-rw-r--r-- | build/config/android/config.gni | 5 | ||||
-rw-r--r-- | build/config/android/internal_rules.gni | 12 | ||||
-rw-r--r-- | build/config/android/rules.gni | 2 |
4 files changed, 70 insertions, 13 deletions
diff --git a/build/android/gyp/apkbuilder.py b/build/android/gyp/apkbuilder.py index 3661913..ef5f2cf 100755 --- a/build/android/gyp/apkbuilder.py +++ b/build/android/gyp/apkbuilder.py @@ -50,8 +50,16 @@ def _ParseArgs(args): help='GYP-list of native libraries to include. ' 'Can be specified multiple times.', default=[]) + parser.add_argument('--secondary-native-libs', + action='append', + help='GYP-list of native libraries for secondary ' + 'android-abi. Can be specified multiple times.', + default=[]) parser.add_argument('--android-abi', help='Android architecture to use for native libraries') + parser.add_argument('--secondary-android-abi', + help='The secondary Android architecture to use for' + 'secondary native libraries') parser.add_argument('--native-lib-placeholders', help='GYP-list of native library placeholders to add.', default='[]') @@ -70,10 +78,18 @@ def _ParseArgs(args): for gyp_list in options.native_libs: all_libs.extend(build_utils.ParseGypList(gyp_list)) options.native_libs = all_libs + secondary_libs = [] + for gyp_list in options.secondary_native_libs: + secondary_libs.extend(build_utils.ParseGypList(gyp_list)) + options.secondary_native_libs = secondary_libs + if not options.android_abi and (options.native_libs or options.native_lib_placeholders): raise Exception('Must specify --android-abi with --native-libs') + if not options.secondary_android_abi and options.secondary_native_libs: + raise Exception('Must specify --secondary-android-abi with' + ' --secondary-native-libs') return options @@ -143,6 +159,22 @@ def _CreateAssetsList(path_tuples): return '\n'.join(dests) + '\n' +def _AddNativeLibraries(out_apk, native_libs, android_abi, uncompress): + """Add native libraries to APK.""" + for path in native_libs: + basename = os.path.basename(path) + apk_path = 'lib/%s/%s' % (android_abi, basename) + + compress = None + if (uncompress and os.path.splitext(basename)[1] == '.so'): + compress = False + + build_utils.AddToZipHermetic(out_apk, + apk_path, + src_path=path, + compress=compress) + + def main(args): args = build_utils.ExpandFileArgs(args) options = _ParseArgs(args) @@ -150,6 +182,12 @@ def main(args): native_libs = sorted(options.native_libs) input_paths = [options.resource_apk, __file__] + native_libs + + secondary_native_libs = [] + if options.secondary_native_libs: + secondary_native_libs = sorted(options.secondary_native_libs) + input_paths += secondary_native_libs + if options.dex_file: input_paths.append(options.dex_file) @@ -160,6 +198,9 @@ def main(args): options.native_lib_placeholders, options.uncompress_shared_libraries] + if options.secondary_android_abi: + input_strings.append(options.secondary_android_abi) + _assets = _ExpandPaths(options.assets) _uncompressed_assets = _ExpandPaths(options.uncompressed_assets) @@ -208,19 +249,16 @@ def main(args): src_path=options.dex_file) # 4. Native libraries. - for path in native_libs: - basename = os.path.basename(path) - apk_path = 'lib/%s/%s' % (options.android_abi, basename) - - compress = None - if (options.uncompress_shared_libraries and - os.path.splitext(basename)[1] == '.so'): - compress = False - - build_utils.AddToZipHermetic(out_apk, - apk_path, - src_path=path, - compress=compress) + _AddNativeLibraries(out_apk, + native_libs, + options.android_abi, + options.uncompress_shared_libraries) + + if options.secondary_android_abi: + _AddNativeLibraries(out_apk, + secondary_native_libs, + options.secondary_android_abi, + options.uncompress_shared_libraries) for name in sorted(options.native_lib_placeholders): # Empty libs files are ignored by md5check, but rezip requires them diff --git a/build/config/android/config.gni b/build/config/android/config.gni index aff3b2f..1009801 100644 --- a/build/config/android/config.gni +++ b/build/config/android/config.gni @@ -232,8 +232,11 @@ if (is_android) { # ABI ------------------------------------------------------------------------ + # Intentionally do not define android_app_secondary_abi for 64-bit + # android_app_abi, since they are not used. if (current_cpu == "x86") { android_app_abi = "x86" + android_app_secondary_abi = "x86_64" } else if (current_cpu == "arm") { import("//build/config/arm.gni") if (arm_version < 7) { @@ -241,8 +244,10 @@ if (is_android) { } else { android_app_abi = "armeabi-v7a" } + android_app_secondary_abi = "arm64-v8a" } else if (current_cpu == "mipsel") { android_app_abi = "mips" + android_app_secondary_abi = "mips64" } else if (current_cpu == "x64") { android_app_abi = "x86_64" } else if (current_cpu == "arm64") { diff --git a/build/config/android/internal_rules.gni b/build/config/android/internal_rules.gni index 6c421df..d5ad627 100644 --- a/build/config/android/internal_rules.gni +++ b/build/config/android/internal_rules.gni @@ -784,6 +784,16 @@ template("package_apk") { if (_native_lib_placeholders != []) { args += [ "--native-lib-placeholders=$_native_lib_placeholders" ] } + if (defined(invoker.secondary_native_libs) && + invoker.secondary_native_libs != []) { + assert(defined(android_app_secondary_abi)) + inputs += invoker.secondary_native_libs + _secondary_native_libs = rebase_path(invoker.secondary_native_libs) + args += [ + "--secondary-native-libs=$_secondary_native_libs", + "--secondary-android-abi=$android_app_secondary_abi", + ] + } if (defined(invoker.emma_instrument) && invoker.emma_instrument) { _emma_device_jar = "$android_sdk_root/tools/lib/emma_device.jar" @@ -1100,6 +1110,7 @@ template("create_apk") { "emma_instrument", "native_lib_placeholders", "native_libs_filearg", + "secondary_native_libs", "uncompress_shared_libraries", "write_asset_list", ]) @@ -1120,6 +1131,7 @@ template("create_apk") { [ "assets_build_config", "emma_instrument", + "secondary_native_libs", "uncompress_shared_libraries", ]) _dex_target = "//build/android/incremental_install:bootstrap_java__dex" diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni index f024675..9ed3a69 100644 --- a/build/config/android/rules.gni +++ b/build/config/android/rules.gni @@ -1270,6 +1270,7 @@ template("android_java_prebuilt") { # requires_sdk_api_level_23: If defined and true, the apk is intended for # installation only on Android M or later. In these releases the system # linker does relocation unpacking, so we can enable it unconditionally. +# secondary_native_libs: the path of native libraries for secondary app abi. # # DEPRECATED_java_in_dir: Directory containing java files. All .java files in # this directory will be included in the library. This is only supported to @@ -1774,6 +1775,7 @@ template("android_apk") { "language_splits", "page_align_shared_libraries", "public_deps", + "secondary_native_libs", "shared_resources", "uncompress_shared_libraries", "write_asset_list", |