Index: build/config/android/rules.gni |
diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni |
index 6140b5eaa3c8ce718c8a9c3d5bfefc174ef01525..d8255a2137394770b03899e1fa94780984ff9b6f 100644 |
--- a/build/config/android/rules.gni |
+++ b/build/config/android/rules.gni |
@@ -1208,7 +1208,7 @@ template("android_apk") { |
base_path = "$gen_dir/$target_name" |
_build_config = "$target_gen_dir/$target_name.build_config" |
resources_zip_path = "$base_path.resources.zip" |
- all_resources_zip_path = "$base_path.resources.all.zip" |
+ _all_resources_zip_path = "$base_path.resources.all.zip" |
jar_path = "$base_path.jar" |
final_dex_path = "$gen_dir/classes.dex" |
_template_name = target_name |
@@ -1226,6 +1226,15 @@ template("android_apk") { |
_native_libs = [] |
+ _version_code = "1" |
+ if (defined(invoker.version_code)) { |
+ _version_code = invoker.version_code |
+ } |
+ |
+ _version_name = "Developer Build" |
+ if (defined(invoker.version_name)) { |
+ _version_name = invoker.version_name |
+ } |
_keystore_path = android_default_keystore_path |
_keystore_name = android_default_keystore_name |
_keystore_password = android_default_keystore_password |
@@ -1291,6 +1300,11 @@ template("android_apk") { |
_android_manifest = invoker.android_manifest |
_rebased_build_config = rebase_path(_build_config, root_build_dir) |
+ _create_abi_split = |
+ defined(invoker.create_abi_split) && invoker.create_abi_split |
+ |
+ # Help GN understand that _create_abi_split is not unused (bug in GN). |
+ assert(_create_abi_split || true) |
write_build_config("${_template_name}__build_config") { |
type = "android_apk" |
@@ -1319,6 +1333,7 @@ template("android_apk") { |
android_manifest = _android_manifest |
resource_dirs = [ "//build/android/ant/empty/res" ] |
zip_path = resources_zip_path |
+ all_resources_zip_path = _all_resources_zip_path |
generate_constant_ids = true |
build_config = _build_config |
@@ -1475,19 +1490,12 @@ template("android_apk") { |
create_apk("${_template_name}__create") { |
apk_path = _final_apk_path |
android_manifest = _android_manifest |
- resources_zip = all_resources_zip_path |
+ resources_zip = _all_resources_zip_path |
dex_path = final_dex_path |
load_library_from_apk = _load_library_from_apk |
- version_code = "1" |
- if (defined(invoker.version_code)) { |
- version_code = invoker.version_code |
- } |
- |
- version_name = "Developer Build" |
- if (defined(invoker.version_name)) { |
- version_name = invoker.version_name |
- } |
+ version_code = _version_code |
+ version_name = _version_name |
keystore_name = _keystore_name |
keystore_path = _keystore_path |
@@ -1505,12 +1513,48 @@ template("android_apk") { |
} |
} |
- if (_native_libs != []) { |
+ if (_native_libs != [] && !_create_abi_split) { |
native_libs_dir = _native_libs_dir |
deps += [ ":${_template_name}__prepare_native" ] |
} |
} |
+ if (_native_libs != [] && _create_abi_split) { |
+ _manifest_rule = "${_template_name}__split_manifest_abi_${android_app_abi}" |
+ generate_split_manifest(_manifest_rule) { |
+ main_manifest = _android_manifest |
+ out_manifest = |
+ "$gen_dir/split-manifests/${android_app_abi}/AndroidManifest.xml" |
+ split_name = "abi_${android_app_abi}" |
+ } |
+ |
+ _apk_rule = "${_template_name}__split_apk_abi_${android_app_abi}" |
+ final_deps += [ ":$_apk_rule" ] |
+ create_apk(_apk_rule) { |
+ _split_paths = process_file_template( |
+ [ _final_apk_path ], |
+ "{{source_dir}}/{{source_name_part}}-abi-${android_app_abi}.apk") |
+ apk_path = _split_paths[0] |
+ base_path = "$gen_dir/$_apk_rule" |
+ |
+ manifest_outputs = get_target_outputs(":${_manifest_rule}") |
+ android_manifest = manifest_outputs[1] |
+ load_library_from_apk = _load_library_from_apk |
+ |
+ version_code = _version_code |
+ version_name = _version_name |
+ |
+ keystore_name = _keystore_name |
+ keystore_path = _keystore_path |
+ keystore_password = _keystore_password |
+ |
+ native_libs_dir = _native_libs_dir |
+ deps = [ |
+ ":${_template_name}__prepare_native", |
+ ] |
+ } |
+ } |
+ |
group(target_name) { |
deps = final_deps |
if (defined(invoker.datadeps)) { |