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.
This commit is contained in:
Hugo Locurcio 2023-05-22 09:56:39 +02:00
parent 84692c6252
commit 18152ac3a1
No known key found for this signature in database
GPG Key ID: 39E8F8BE30B0A49C
2 changed files with 29 additions and 0 deletions

View File

@ -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(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(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("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 # Components
opts.Add(BoolVariable("deprecated", "Enable compatibility code for deprecated and removed features", True)) opts.Add(BoolVariable("deprecated", "Enable compatibility code for deprecated and removed features", True))

View File

@ -1,5 +1,7 @@
#!/usr/bin/env python #!/usr/bin/env python
import subprocess
Import("env") Import("env")
android_files = [ 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" 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")) 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])