Android向けにUnityでアプリを作っていたのですが、「Build & Run」をクリックしたら失敗しました。思ったよりも時間がかかってしまったので、原因と解決方法をまとめてみました。
1. 発生時の状況
1.1 エラーログ
UnityのConsoleはこのようなログを出力していました。
UnityException: Unable to install APK!
Installation failed. See the Console for details.
UnityEditor.Android.PostProcessAndroidPlayer.ShowErrDlgAndThrow (System.String title, System.String message, System.Exception ex)
UnityEditor.Android.PostProcessAndroidPlayer.ShowErrDlgAndThrow (System.String title, System.String message)
UnityEditor.Android.PostProcessAndroidPlayer.UploadAndStartPlayer (System.String manifestName, System.String stagingArea, UnityEditor.Android.AndroidDevice device, System.String packageName, Boolean devPlayer, Boolean retryUpload)
UnityEditor.Android.PostProcessAndroidPlayer.PostProcessInternal (BuildTarget target, System.String stagingAreaData, System.String stagingArea, System.String playerPackage, System.String installPath, System.String companyName, System.String productName, BuildOptions options)
ただ、このログでは何が原因かわかりませんでした。
1.2 apkのみの生成可否を確認
Unityで「Build&Run」すると、ビルドした後実機に転送して起動(Run)までしてくれます。今回は問題の切り分けのため、「Build」ボタンをクリックしてapk生成だけを試してみました。
結果、apkは問題なく実行できました。
1.3 adbコマンドでインストールを実行
下記を実行しました。
# adb install app.apk
INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES
というエラーが出ました。日本語で意訳すればこのような意味になります。
不正な証明書です。すでにインストールされているアプリと証明書が異なります。
2. 原因
Unityでのビルド時に指定する、"Build Identifier"が、すでに実機にインストール済みのものと同一だったため。
Unityの"Build Identifier"は下記にあります。
私の場合、以前作ってインストールしたままだったアプリの"Build Identifier"が"com.example"のままでした。
これを忘れてて、また同じIdentifierを指定してたため、このようなエラーが起きてしまいました。
3. 対策
"Build Identifier"を別の名称にしました。(例:com.exampleをcom.example2 とする)
4. 終わりに
わかってしまえば大したことはないのですが、こういうのは開発中に不定期に発生するし、意外に忘れてしまうことがあります。この情報が誰かのお役に立てば幸いです。