先日、購入したUnityのアセットのサンプルシーンをAndroid向けにビルドした時に、下記のようなエラーが出てビルドに失敗しました。
Build Failure Failed to re-package resources. See the Console for details.
同時に、数十行のエラーログが出ました。今回はこの対処方法を解説します。
- 1. 状況と、これまでインターネット上で紹介されている対処方法
- 2. 今回のエラー発生の原因
- 3. 対処方法 (1) Player Settingsとのコンフリクトを修正
- 4. 対処方法 (2) 不要なmeta-dataをコメントアウト
- 4.おわりに
1. 状況と、これまでインターネット上で紹介されている対処方法
ログの先頭には、CommandInvokationFailure: Failed to re-package resources.
というメッセージがあります。これで検索すると、同じような方がいらっしゃいました。ただし、エラーの対処方法は様々のようです。
No hack, no work • UnityでAndroid実機に転送しようとしたらエラーが出てビルドできない時の対処法
- > Android SDK Build-toolsの最新版を入れないことで解決
CommandInvokationFailure: Failed to re-package resources.というエラーが出た - Qiita
- > C:\Users\ユーザ名\AppData\Local\Android\sdk\build-toolsから24というディレクトリを消すことで解決
その他、リンク切れでしたが、AdMob(Androidアプリに広告を組み込む機能)のパッケージをインストールし直すことで解決、という事例もありました。
2. 今回のエラー発生の原因
色々調べてみると、上記のどれも当てはまらず、UnityAssetに最初から入っていたAndroidManifest.xmlの記述を変更することで対応できました。実際の原因は下記の通りです。
(1) Assetに最初から入っていたAndroidManifest.xmlの記述がPlayer Settingsとコンフリクトした
(2) Assetに最初から入っていたAndroidManifest.xmlの記述で、no resource foundを引き起こしていた
3. 対処方法 (1) Player Settingsとのコンフリクトを修正
Assetに入っていたAndroid Manifestファイルを修正します。こちらなどでも紹介しましたが、UnityでAndroidアプリをビルドするために、UnityのフォルダにはAndroidManifest.xmlが入っています。【2017/7更新】Android StudioでUnity向けmodule開発時のTips - CrossRoad
- Macの場合
/アプリケーション/Unity/PlaybackEngine/AndroidPlayer/Apk/AndroidManifest.xml
- Windowsの場合
C:\Program Files\Unity\Editor\Data/PlaybackEngines/AndroidPlayer/Apk/AndroidManifest.xml
通常は、ここの記述とBuild Settingsで書いた情報でAndroid用のapkを作成しますが、プロジェクトの中で明示的にmanifestを変更することもできます。
今回使ったアセットでは、最初からPlugins/Androidの中にAndroidManifest.xmlが入っており、target SDK version(ビルド対象のAndroid OS バージョン)が一致していませんでした。
■Build Settings / Player Settings
■Assets/Plugins/Android/AndroidManifest.xml
4. 対処方法 (2) 不要なmeta-dataをコメントアウト
これはこのアセット特有の問題ですが、Assets/Plugins/Android/AndroidManifest.xmlの中に、
<application> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> </application>
という記述がありました。また、エラーログに
stderr[ AndroidManifest.xml:13: error: Error: No resource found that matches the given name (at 'value' with value '@integer/google_play_services_version'). ]
という記述がありました。Google Play Servicesは今回のアセットでは不要なのでコメントアウトしたところ、Unityでビルドが通るようになりました。
判断が難しいところですが、購入したアセットでも明らかに不要なものが書かれてビルドが通らない場合、修正するのもありと思います。
4.おわりに
先ほど紹介した2点を修正したことで、Androidの実機で動くようになりました。AndroidもiOSも、色々と変更が多いのでまた更新あれば見直します。