From 18152ac3a1d00d81d758425f2b67d37b60b56ab3 Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Mon, 22 May 2023 09:56:39 +0200 Subject: [PATCH] Add `generate_apk=yes` to generate an APK after building This is useful to speed up iteration when working on the engine (or editor). This can be combined with a script that calls `adb` to deploy the APK on a device (coupled with Godot's `--export-*` for projects) to further speed up iteration. --- SConstruct | 1 + platform/android/SCsub | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/SConstruct b/SConstruct index 534d5bd95d2..978505977e6 100644 --- a/SConstruct +++ b/SConstruct @@ -182,6 +182,7 @@ opts.Add(BoolVariable("debug_symbols", "Build with debugging symbols", False)) opts.Add(BoolVariable("separate_debug_symbols", "Extract debugging symbols to a separate file", False)) opts.Add(EnumVariable("lto", "Link-time optimization (production builds)", "none", ("none", "auto", "thin", "full"))) opts.Add(BoolVariable("production", "Set defaults to build Godot for use in production", False)) +opts.Add(BoolVariable("generate_apk", "Generate an APK/AAB after building Android library by calling Gradle", False)) # Components opts.Add(BoolVariable("deprecated", "Enable compatibility code for deprecated and removed features", True)) diff --git a/platform/android/SCsub b/platform/android/SCsub index dfc921cc54a..97262cf148b 100644 --- a/platform/android/SCsub +++ b/platform/android/SCsub @@ -1,5 +1,7 @@ #!/usr/bin/env python +import subprocess + Import("env") android_files = [ @@ -77,3 +79,29 @@ if lib_arch_dir != "": str(env["ANDROID_NDK_ROOT"]) + "/sources/cxx-stl/llvm-libc++/libs/" + lib_arch_dir + "/libc++_shared.so" ) env_android.Command(out_dir + "/libc++_shared.so", stl_lib_path, Copy("$TARGET", "$SOURCE")) + + def generate_apk(target, source, env): + if env["target"] != "editor" and env["dev_build"]: + subprocess.run( + [ + "./gradlew", + "generateDevTemplate", + "--quiet", + ], + cwd="platform/android/java", + ) + else: + # Android editor with `dev_build=yes` is handled by the `generateGodotEditor` task. + subprocess.run( + [ + "./gradlew", + "generateGodotEditor" if env["target"] == "editor" else "generateGodotTemplates", + "--quiet", + ], + cwd="platform/android/java", + ) + + if env["generate_apk"]: + generate_apk_command = env_android.Command("generate_apk", [], generate_apk) + command = env_android.AlwaysBuild(generate_apk_command) + env_android.Depends(command, [lib])