Cross Technology

Unity、VR、MR、ARを中心とした技術ブログ

UnityでUnityException: Unable to install APKが出た時の対処方法

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"は下記にあります。

Unity Android ビルドのBuild identifierの場所

私の場合、以前作ってインストールしたままだったアプリの"Build Identifier"が"com.example"のままでした。

これを忘れてて、また同じIdentifierを指定してたため、このようなエラーが起きてしまいました。

3. 対策

"Build Identifier"を別の名称にしました。(例:com.exampleをcom.example2 とする)

4. 終わりに

わかってしまえば大したことはないのですが、こういうのは開発中に不定期に発生するし、意外に忘れてしまうことがあります。この情報が誰かのお役に立てば幸いです。