16
10

More than 1 year has passed since last update.

Unity2020でGradleビルドエラー

Last updated at Posted at 2021-01-26

ことの発端

ずっとUnity2019(1.5f1)でアプリを開発していたので、新規のアプリでUnity2020(2.1f1)を使ってみたくなった。Android向けにビルドしたところ、CommandInvokationFailure: Gradle build failed.とやらが出てビルドが成功しない。

ビルド時に複数エラーが出ていたが、主なのは下の2つ。

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':launcher:processReleaseResources'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
   > Android resource linking failed
CommandInvokationFailure: Gradle build failed. 
/${OpenJDK_PATH}/bin/java -classpath 
"${Gradle_PATH}/lib/gradle-launcher-5.6.4.jar" org.gradle.launcher.GradleMain "-Dorg.gradle.jvmargs=-Xmx4096m" "assembleRelease"

調べたこと

独自のAndroidManifestを使っており、Assets/Plugins/Androidフォルダに置いて、Player Settings > Publishing Settings > Custom Main ManifestのチェックボックスもONにしている。

にも関わらず、ビルド失敗後Temp/gradleOut/launcher/src/mainのAndroidManifest(ビルド時に作られたAndroidManifest)には独自のAndroidManifestが反映されていない。

正しく動いていれば、ここに反映されるはず。
エラー内容で色々ggってみたが、他のSDKと競合してないか〜、カスタムのGradle Templateを定義して〜みたいなのが多かったが、どれも根本的な解決策に至らなかった。

解決策

Assets/Plugins/Androidフォルダに配置しているAndroidManifest.xmlLauncherManifest.xmlに書き換え、Player Settings > Publishing Settings > Custom Launcher ManifestのチェックボックスをONにする(Custom Main ManifestはOFFにする)。

【3/4 追記】

上記手法は場合によっては、Unityの定義に反する使い方になるため、解決策を修正。
また、上記解決策では実機確認の際にアイコンが2つ出てしまう、動作が安定しないなどの場合は下記を参照。

従来のAndroidManifest.xmlの中からiconなどの情報をLauncherManifest.xmlとして外出しする。外出しする項目は公式のページを参照。

Player Settings > Publishing Settings > Custom Launcher Manifest と Custom Main ManifestのチェックボックスをONにする

ビルドを再実行!

原因

どうやらUnity2019.3以降はGradle実行時にLauncherManifestとLibraryManifestという2つのManifestファイルを生成するらしい。詳細は公式のページを参照。
従来はAndroidManifest1つ定義するだけで良かったのだが、項目によって分けられてビルド時にそれをマージする仕様に変わったことを知らなかったのが原因。

それでもエラーが出る場合

Minimum APIがどうこうのエラー

置き換えるLauncherManifestからminimum API Levelの指定を取り除く

Gradle周りのエラーや上記対応ができない場合など

まず、ここで自分が使っているUnityに対応したGradleのバージョンを調べる。
なんでUnity2020が書かれてないんだ・・・ちなみに2.1f1のGradleバージョンは5.6.4っぽい。
【追記】英語バージョンのサイトに書かれてました。

次に、ここでGradleバージョンに対応したGradleプラグインのバージョンを調べる。
ややこしいというツッコミはなしで。

次に、Player Settings > Publishing Settings > Custom Base Gradle TemplateのチェックボックスをONにする。

Assets/Plugins/AndroidフォルダにbaseProjectTemplate.gradleなるものが生成されているのでそれを開き、dependenciesのclasspathのXの部分をさっきのGradleプラグインのバージョンに差し替える。

classpath 'com.android.tools.build:gradle:X.X.X'

再度ビルド。
これで動くようになればご喝采。

16
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
10