先日、Unityで作成したアプリをAndroidでビルドしようとしたところ「Failed to re-package resources.」というエラーが発生し、ビルドできなくなってしまいました。
そこで今回はUnityで発生したこのエラーの対処法を紹介します。
はじめに
今回のエラーはUnityで作成したアプリをAndroidでビルドしようとした時に発生したものです。
iOSアプリとしてビルドするのは問題なかったので、Androidのなにかがエラーを吐いているのだという事でした。
エラーの内容は
- /Users/ユーザー名/Library/Android/sdk/build-tools/24.0.0-preview/aapt package –auto-add-overlay -v -f -m -J gen -M AndroidManifest.xml -S “res” -I" /Users/ユーザー名/Library/Android/sdk/platforms/android-23/android.jar" -F bin/resources.ap_ –extra-packages
- com.google.unity:android.support.v7.appcompat:
- com.google.android.gms.ads:
- com.google.android.gms.analytics:
- com.google.android.gms.appindexing:
- com.google.android.gms:
- com.google.android.gms:android.support.v4 -S
というものでした。
ビルドが8〜9割ほど進んだところで以下の画像のようなエラーが発生します。
実際のエラーログはもっと長いのですが、ここから先はファイル名などが記載されているのでエラー自体にはあまり関係ないと思います。
※黒くなっている箇所はユーザー名
ではこのエラーは何が原因なのか、どのように対処すれば良いか説明します。
エラーの原因
今回のエラーはAndroidだけで発生するという事もあり、Androidビルド用のフォルダを見直してみました。
別のプロジェクトなどでも試してみたところ、AdMobを導入しているプロジェクトでこのエラーが発生していました。
エラーの中に
「"/Users/ユーザー名/プロジェクトの保存先/プロジェクト名/Temp/StagingArea/android-libraries/appcompat-v7-23.1.1/res" -S」
という1文がありました。
Tempフォルダの中にはAndroidビルドした時に自動的に保存されるファイルがあるので、この自動で作成するタイミングで不具合が発生しているようです。
試したこと
今回のエラー解決のため、いろいろ試してみたことがあります。最終的な解決方法は後述していますが、もしかしたらこれから紹介する手順も必要になるかもしれません。
試したこと
- Android SDKのSDK Platformsから「Android 6.0 (Marshmallow)」をインストール
- apkの保存先を変更
- google-play-services_libをPlugins>Androidに配置
これらでは解決できなかったのですが、後述している対処法で解決できなかった場合は、試してみると良いかもしれません。
では実際に解決した方法を紹介します。私の場合、このエラーの対処法はいたって単純でした。以下から説明します。
対処法
結論から申しますと、今回のエラーを解消するために私が行ったのは「AdMobのパッケージをインストールし直した」だけです。
もともとAdMobのUnityパッケージは最新のものを使っていたのですが、1度削除し、再度インポートする事で無事ビルドする事ができました。
削除したフォルダは
- Plugins>Android>AdMobに関係するファイル
- PlayServicesResolver
- GoogleMobileAds
です。
これらのどのフォルダに問題があったのかはわかりませんが、再度インポートしたことによって正常に戻ったのだと思います。
※Plugins>Android>AndroidManifest.xmlは削除していません。削除してしまった場合は、再度配置してください。
余談ですが、Unityでビルドエラーを何回も試す時は、1番上のSceneだけをビルドするようにすると1度のビルドにかかる時間を短縮できますよ。
2番目にビルドするSceneを選択した状態で、Shiftを押しながら最後のSceneを選択するとまとめて選択できるので、その状態でチェックを外してみてください。
チェックを外した際は、リリース前にチェックを入れなおすことを忘れないでくださいね!
まとめ
今回のエラーでは、意外と解決策の発見に手こずりました。
普段Unityで開発している分、Android側やiOS側でエラーが発生してしまうとどのような対処をしたら良いのかわからなくなってしまいます。
【Unity】音声ファイルの拡張子は気をつけた方が良いかも!? - クリアメモリ
今回のようにならないよう、この記事を備忘録としてエラーが発生した際に即座に対処できるようにしようと思います。
ではまた。