ブログ・コラム
2019.10.30
【Android】署名付きapk作成時の注意点
いざapkファイルを作って動作確認をしようと思ったら、インストールできない、アプリが起動しないという経験がないでしょうか。
そんな事例を紹介します。
端末により、署名付きapkがインストール出来ない
端末により、署名付きapkがインストール出来ないケースがあります。
(右図のように「アプリはインストールされていません」とエラーメッセージがでました。)
私が確認したのは下記条件です。
端末 | Priori 3 LTE (OS android5.1) |
開発環境 | Android Studio 3.1.4 |
Android Studio2.3から、署名付きAPKを作成する際に、Signature Versionsを選ぶ項目(V1, V2)が追加されました。
作成の際にこの項目にチェックが無い場合、端末のOSバージョンによってインストールできなくなります。
私の場合は、V1を選択をしていなかった(V2のみ選択)ためにインストールできない状況になりました。
後述しますが、これによりAndroid7.0未満の端末(今回は5.1)で、apkがインストール出来ない、という事象が発生しました。
改めて、V1, V2両方の署名にチェックを入れたところ、無事7.0以前の端末でもインストール出来ました。
(基本的には、両方チェックが推奨されています。)
V1は従来の署名方法で、V2はAndroid7.0以降の「インストール時間高速化」や「セキュリティ面が強化」された署名方法のようです。
挙動としては、Android7.0以降では「V2」がインストール時に検証され、7.0以前では「V1」が検証(V2は無視)されます。
今回は、この「V1」を選択していなかった為、検証すべき署名が見当たらなかった(OS5.1ではインストール出来なかった)ということになります。
※ ちなみに、Android Studio2.2以前では、デフォルトでV1とV2両方で署名されていたようです。
(2.3からはそれが選択できる(必要に応じてV1またはV2を外せる)ようになった。)
GoogleMapが表示されない
Android Studioでデバックしている時は地図が表示されていたのに、署名付きのapkを作ってインストールすると地図が表示されなくなる経験をしました。
API(Maps SDK for Android)の設定に於いて、「使用アプリを制限する」為にSHA1の登録が必要となります。
このSHA1には「デバッグ用」と「リリース用」があるのですが、「デバッグ用」のみ設定しているとapkを作ったときに地図が表示されなくなります。
以下コマンドでリリース用のSHA1が取得でき、apkを作ってインストールしても地図が表示されるようになります。
- keytool -list -v -keystore your_keystore_name -alias your_alias_name
ちなみにデバッグ用のSHA1取得は、以下コマンドとなります。
- keytool -v -list -keystore ~/.android/debug.keystore
参考サイトに記載されているSHA1の取得方法のコマンドは、デバッグ用の取得方法が多くあり、これを鵜呑みにコピペ実行して「設定は全て完了した」と思ってしまいました。
まとめ
今回の二つとも、分かってしまえば本当に何てことない単純なミスなのですが、最初の段階で見落としてしまうと、後でその原因を追求するのに、意外と時間が掛かってしまったりします。
みなさん、気をつけましょう!
※この記事に対するいかなる損害に対して、当方は一切の責任を負いかねます。
自己責任でお願いします。