Merge pull request #88385 from m4gr3d/enable_legacy_packaging_main
Add export setting to specify whether the native libraries should be compressed for the gradle build
This commit is contained in:
commit
01323cd687
4 changed files with 43 additions and 0 deletions
|
@ -47,6 +47,10 @@
|
|||
<member name="gradle_build/android_source_template" type="String" setter="" getter="">
|
||||
Path to a ZIP file holding the source for the export template used in a Gradle build. If left empty, the default template is used.
|
||||
</member>
|
||||
<member name="gradle_build/compress_native_libraries" type="bool" setter="" getter="">
|
||||
If [code]true[/code], native libraries are compressed when performing a Gradle build.
|
||||
[b]Note:[/b] Although your binary may be smaller, your application may load slower because the native libraries are not loaded directly from the binary at runtime.
|
||||
</member>
|
||||
<member name="gradle_build/export_format" type="int" setter="" getter="">
|
||||
Export format for Gradle build.
|
||||
</member>
|
||||
|
|
|
@ -1742,6 +1742,11 @@ String EditorExportPlatformAndroid::get_export_option_warning(const EditorExport
|
|||
if (xr_mode_index == XR_MODE_OPENXR && !gradle_build_enabled) {
|
||||
return TTR("OpenXR requires \"Use Gradle Build\" to be enabled");
|
||||
}
|
||||
} else if (p_name == "gradle_build/compress_native_libraries") {
|
||||
bool gradle_build_enabled = p_preset->get("gradle_build/use_gradle_build");
|
||||
if (bool(p_preset->get("gradle_build/compress_native_libraries")) && !gradle_build_enabled) {
|
||||
return TTR("\"Compress Native Libraries\" is only valid when \"Use Gradle Build\" is enabled.");
|
||||
}
|
||||
} else if (p_name == "gradle_build/export_format") {
|
||||
bool gradle_build_enabled = p_preset->get("gradle_build/use_gradle_build");
|
||||
if (int(p_preset->get("gradle_build/export_format")) == EXPORT_FORMAT_AAB && !gradle_build_enabled) {
|
||||
|
@ -1799,6 +1804,7 @@ void EditorExportPlatformAndroid::get_export_options(List<ExportOption> *r_optio
|
|||
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "gradle_build/use_gradle_build"), false, true, true));
|
||||
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "gradle_build/gradle_build_directory", PROPERTY_HINT_PLACEHOLDER_TEXT, "res://android"), "", false, false));
|
||||
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "gradle_build/android_source_template", PROPERTY_HINT_GLOBAL_FILE, "*.zip"), ""));
|
||||
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "gradle_build/compress_native_libraries"), false, false, true));
|
||||
r_options->push_back(ExportOption(PropertyInfo(Variant::INT, "gradle_build/export_format", PROPERTY_HINT_ENUM, "Export APK,Export AAB"), EXPORT_FORMAT_APK, false, true));
|
||||
// Using String instead of int to default to an empty string (no override) with placeholder for instructions (see GH-62465).
|
||||
// This implies doing validation that the string is a proper int.
|
||||
|
@ -3076,6 +3082,7 @@ Error EditorExportPlatformAndroid::export_project_helper(const Ref<EditorExportP
|
|||
String enabled_abi_string = join_abis(enabled_abis, "|", false);
|
||||
String sign_flag = should_sign ? "true" : "false";
|
||||
String zipalign_flag = "true";
|
||||
String compress_native_libraries_flag = bool(p_preset->get("gradle_build/compress_native_libraries")) ? "true" : "false";
|
||||
|
||||
Vector<String> android_libraries;
|
||||
Vector<String> android_dependencies;
|
||||
|
@ -3140,6 +3147,7 @@ Error EditorExportPlatformAndroid::export_project_helper(const Ref<EditorExportP
|
|||
cmdline.push_back("-Pplugins_maven_repos=" + combined_android_dependencies_maven_repos); // argument to specify the list of maven repos for android dependencies provided by plugins.
|
||||
cmdline.push_back("-Pperform_zipalign=" + zipalign_flag); // argument to specify whether the build should be zipaligned.
|
||||
cmdline.push_back("-Pperform_signing=" + sign_flag); // argument to specify whether the build should be signed.
|
||||
cmdline.push_back("-Pcompress_native_libraries=" + compress_native_libraries_flag); // argument to specify whether the build should compress native libraries.
|
||||
cmdline.push_back("-Pgodot_editor_version=" + String(VERSION_FULL_CONFIG));
|
||||
|
||||
// NOTE: The release keystore is not included in the verbose logging
|
||||
|
|
|
@ -116,6 +116,14 @@ android {
|
|||
if (shouldNotStrip()) {
|
||||
doNotStrip '**/*.so'
|
||||
}
|
||||
|
||||
jniLibs {
|
||||
// Setting this to true causes AGP to package compressed native libraries when building the app
|
||||
// For more background, see:
|
||||
// - https://developer.android.com/build/releases/past-releases/agp-3-6-0-release-notes#extractNativeLibs
|
||||
// - https://stackoverflow.com/a/44704840
|
||||
useLegacyPackaging shouldUseLegacyPackaging()
|
||||
}
|
||||
}
|
||||
|
||||
signingConfigs {
|
||||
|
|
|
@ -361,3 +361,26 @@ ext.shouldSign = { ->
|
|||
ext.shouldNotStrip = { ->
|
||||
return isAndroidStudio() || project.hasProperty("doNotStrip")
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether to use the legacy convention of compressing all .so files in the APK.
|
||||
*
|
||||
* For more background, see:
|
||||
* - https://developer.android.com/build/releases/past-releases/agp-3-6-0-release-notes#extractNativeLibs
|
||||
* - https://stackoverflow.com/a/44704840
|
||||
*/
|
||||
ext.shouldUseLegacyPackaging = { ->
|
||||
int minSdk = getExportMinSdkVersion()
|
||||
if (minSdk < 23) {
|
||||
// Enforce the default behavior for compatibility with device running api < 23
|
||||
return true
|
||||
}
|
||||
|
||||
String legacyPackagingFlag = project.hasProperty("compress_native_libraries") ? project.property("compress_native_libraries") : ""
|
||||
if (legacyPackagingFlag != null && !legacyPackagingFlag.isEmpty()) {
|
||||
return Boolean.parseBoolean(legacyPackagingFlag)
|
||||
}
|
||||
|
||||
// Default behavior for minSdk >= 23
|
||||
return false
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue