GoogleのPlay StoreでAndroidアプリを配信するときに最近だとapkファイルをアップロードするのではなくてaabファイルをアップロードする。
そしてこのアプリへの署名はPlay Store側でやってくれるけれども、その署名された証明書のフィンガープリントを別の何かに登録するケースがある。例えばFirebase AuthenticationでGoogleサインインを実装したい場合とか。
その署名自体はGoogle Play Console上で確認できる。リリースの『アプリの完全性』にある『アプリの署名』タブに表示されている。
今回はそのフィンガープリントを実際にデバイスへPlay Storeからインストールされたapkから確認したい場合の手順。
基本的には実機をPCにつないだ上での話ですが、そのあたりは割愛。
まずはデバイスにadbで接続して取り出したいapkのパスを見つける。
$ adb devices //接続されているデバイスを確認 $ adb -s <デバイス名> shell $ pm list packages -f | grep <パッケージ名>
package:ファイルパス=パッケージ名
という文字列を含むレスポンスがあるのでこのファイルパスを指定してapkファイルを手元のPCにコピー。
ファイルパスは意味のわかりにくい文字列だったりすると思うが問題ない。自分の環境ではファイル名自体はbase.apk
となっていた。
$ adb -s <デバイス名> pull <ファイルパス>
これで手元にapkがコピーできたはず。あとはこのapkを指定して署名を確認するんだけど、多くのページでは以下のコマンドが紹介されている。
keytool -list -printcert -jarfaile ./base.apk
だが残念ながら自分の環境(Mac)では-list
と-printcert
は同時に指定できないって言われてしまった。
というわけでapksigner
を使って表示する。こんな感じ。
apksigner verify --print-certs -v ./base.apk
これでお目当てのフィンガープリントが確認できただろう。
なお、adb
とかapksigner
は実際にはパスを通すかフルパスを指定する必要がある。自分のMacな環境だと以下にある。
adbのパス: /Users/<ユーザ名>/Library/Android/sdk/platform-tools/
apksignerのパス: /Users/<ユーザ名>/Library/Android/sdk/build-tools/32.0.0/
apksignerのパスにある32.0.0
はバージョンなので環境によって違うはず。なので読み替えてもらえれば。