はじめに
自分の環境で発生している問題について記載していますが、解決方法が正しいかどうかについてはよくわかっておらず、もし同じような状況の方でこの記事の内容を試される場合には自己責任でお願いします。
前提
- macos:14.4.1(Apple M3チップ)
- Godot:4.2及び4.3.3
- 基本的なリリース設定はできていて、gradleを使用しないビルドについては問題なく実行できる状態
発生した問題
AndroidエクスポートでUse Gradle Buildを実行するとエクスポート画面のままフリーズする
試したこと
ターミナルでコマンドを実行してGodotを使用せずビルドすることで一応出力できました。
プロジェクトを更新したら毎回一旦Godotでフリーズさせてから以下の手順を行い新しいファイルをビルドします。
Godotで出力ボタンを押さないとプロジェクトのコードが/android
以下の出力ファイル用のディレクトリに出力されない為そうしています。
ターミナルを使ってフリーズしているコマンドを確認
Godotのプロセスを止めるためターミナルで以下を実行しました。
1
2
3
4
| ❯ ps aux | grep godot
x 70570 0.7 0.0 410733264 1504 s001 S+ 6:50AM 0:00.00 grep godot
x 7995 0.6 3.0 415439456 499424 ?? S 6:50AM 35:39.47 /Applications/Godot4.3.app/Contents/MacOS/Godot --path /path/to/game --editor
x 70395 0.0 0.0 410592928 3792 ?? R 6:50AM 0:05.38 /usr/bin/java 以下godotからのビルドコマンドが表示される....
|
毎回プロセスidは変わりますが、上記のうち止めるのは7995と70395です。
kill 7995
kill 70395
もう一度ps aux | grep godot
して止まっていることを確認します。
ターミナルを使用して自分でビルドする
先ほどの70395について、プラグインや設定によって内容が異なりますが、概ね以下のようなコマンドとなっています。
そのままでは実行してもエラーになるので、psコマンドで表示された内容に一部修正を加えたものが以下となります。
1
| /usr/bin/java -Xmx64m -Xms64m -Xdock:name=Gradle -Xdock:icon=/path/to/game/android/build/media/gradle.icns -Dorg.gradle.appname=gradlew -classpath /path/to/game/android/build/gradle/wrapper/gradle-wrapper.jar org.gradle.wrapper.GradleWrapperMain validateJavaVersion clean bundleRelease -p /path/to/game/android/build -Pexport_package_name=com.game.gamename -Pexport_version_code=3 -Pexport_version_name=1.0.0 -Pexport_version_min_sdk=24 -Pexport_version_target_sdk=34 -Pexport_enabled_abis="armeabi-v7a|arm64-v8a" -Pplugins_local_binaries="/path/to/game/android/plugins/poing-godot-admob-libs/poing-godot-admob-ads-v1.0.1-release.aar|/path/to/game/android/plugins/poing-godot-admob-libs/poing-godot-admob-core-v1.0.1-release.aar" -Pplugins_remote_binaries=com.google.android.gms:play-services-ads:23.3.0 -Pplugins_maven_repos= -Pperform_zipalign=true -Pperform_signing=true -Pcompress_native_libraries=false -Pgodot_editor_version=4.3.stable -Prelease_keystore_file=/path/to/key/example.keystore -Prelease_keystore_alias=example -Prelease_keystore_password=********
|
実行に関わる修正点
- パイプ
|
を使用するオプションの値を"
で囲む。
上記だと-Pexport_enabled_abis=
と-Pplugins_local_binaries=
が該当します。
上記をターミナルで実行することでビルドしますが、エラーが発生した場合はそれぞれ確認します。
1
2
3
4
5
6
7
8
9
10
11
| **FAILURE: Build failed with an exception.**
*** What went wrong:**
**Could not determine the dependencies of task ':linkReleaseManifestForAssetPacks'.**
**> SDK location not found. Define a valid SDK location with an ANDROID_HOME environment variable or by setting the sdk.dir path in**
**your project's local properties file at '/path/to/game/android/build/local.properties'.**
|
/android/build/local.properties
を新規作成して、1行目に以下を記載する- 上記ファイルをgitignoreの対象外にする(gitを使用している場合)
1
| sdk.dir=/path/to/Android/sdk
|
以下はメモ帳などにコマンドをコピペした際に不要なスペースや改行が含まれていると発生する時があるようで、その辺りを確認してから再実行します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| **> Task :signReleaseBundle FAILED**
**FAILURE: Build failed with an exception.**
*** What went wrong:**
**Execution failed for task ':signReleaseBundle'.**
**> A failure occurred while executing com.android.build.gradle.internal.tasks.FinalizeBundleTask$BundleToolRunnable**
**> java.lang.NullPointerException (no error message)**
|
ビルド成功すると path/to/game/android/build/outputs/bundle/release
にファイルが出力さるので、それをアップロードします。
終わりに
最初はプラグインがない状態でビルド成功していて、プラグインを使用するようになってからフリーズしてかなり焦りました。
GodotのリポジトリでもAndroidビルドがフリーズすると言う記載があったのですが具体的な解決策はわからず色々試しているうちに今回の方法に至りました。
同じような状況の人に参考になれば良いなと思いつつ、Godotのエクスポートボタンを押すことで普通にビルドできるようになりたいとも思うので、もし他に対処方法があれば教えていただきたいです。