Androidでアプリをリリースする際に
公式ページで手順を確認していたところ、
更新するAPKなどはリリース前・リリース後で同じ署名を使用する必要があると書かれていました。
そして、その署名の確認手順も書かれていました。
参考:(公式ページ)アプリを更新する:APKの署名を確認する

念のため、この手順に沿って署名確認をしようとしたところ、
予想以上に手間取ってしまったので、その際の手順メモを残しておきますー。

APKの署名とは?

アプリをリリースする際にはAPKファイルを作成しますが
(最近はApp Bundleを使う方法もありますが、今回はAPKを作る場合のお話です)、


アプリをアップデートする場合には、
既にリリースしているAPKファイルの署名と、
これからリリースしようとしているAPKファイルの署名
同じである必要があるようです。
(今回私はパソコンを新しくするなどしたため、前回のリリース時から開発環境が変わってしまったので、念のためこの署名の確認を行いました)


このAPKファイルの署名、
中身を確認するとどんな情報が表示されるのかなと思ったのですが、
手順に沿って確認してみると、
リリース時に設定した開発者の名前や国、keyのサイズなどの情報
ずらずらと表示されるような形になりました。


それでは、その確認手順をメモしていきたいと思います。

コマンドを打てば一発でわかる…はずが。

先ほどの公式ページを見ると、
こちらを打つと一発で署名が確認できるようでした。


apksigner verify –verbose –print-certs apkname.apk


…と、書かれていても、このコマンドをどこでどう使えばいいかわからなくて
まずはちょっと時間がかかりました…。

apksignerの場所を探す

このコマンドを使うために、とりあえず Macのターミナルを起動。
そしてまず、署名確認に必要な「apksigner」というツールを準備する必要がありました。


この「apksigner」は、以下の場所にありました。
/Users/(自分のユーザー名)/Library/Android/sdk/build-tools/(バージョン名)/


まず、ターミナルでこの「apksigner」がある場所まで移動します。
こんな感じです…


cd /Users/(自分のユーザー名)/Library/Android/sdk/build-tools/(バージョン名)/

(cdって? → 参考)Macのターミナルコマンド、簡単・基本の使い方

apksignerにPATHを通す

「apksigner」の場所がわかったら、
「apksigner」にPATHを通します
(使っているMacに「apksigner」の場所を教える感じです)。


ターミナルで次のコマンドを打つことで、
viというエディタで「.bash_profile」を開きます。


vi ~/.bash_profile


そして、開いた「.bash_profile」に
先ほどの「apksigner」の場所を追記します。
書き方はこんな形になります。


export PATH=$PATH:/Users/(自分のユーザー名)/Library/Android/sdk/build-tools/(バージョン名)/


そして、以下のコマンドで「bash_profile」を保存して閉じます

<「bash_profile」の閉じ方>
キーボードの「ESC」を押した後、
:wq
と入力し、Enterキーを押す。


その後、ターミナルで


source ~/.bash_profile


と打つことで、「.bash_profile」を更新します。

PATHが通ったか確認

ターミナルで、


printenv PATH


と打って、出てくる文字列の中に、
先ほどの「apksigner」の場所があればOKです。

apksignerを使ってみる…が。

これでやっと「apksigner」が使えるようになったので、
先ほどのコマンドをターミナルで実行してみたいと思います。


先ほどの公式ページのこのコマンドを実行しようとしたのですが、
apksigner verify –verbose –print-certs apkname.apk


apkname.apkと書かれた部分はそのまま入力するのではなく、
自分がリリースしようとしているapkの名前が入ると思われるため、
今回リリース予定のapkファイルがある場所まで、移動します。


(移動の仕方:参考)Macのターミナルコマンド、簡単・基本の使い方


cdコマンドを使ってapkファイルがある場所まで移動したら、
先ほどのコマンドを実行します。


apksigner verify –verbose –print-certs (リリース予定のapk).apk


ここで、うまくいくと署名が確認できます
しかし、私の場合はもう一つ、つまづきました…。

Java SEを準備する…

先ほどのコマンドを打つと、こんなエラーが…


No Java runtime present, requesting install.


これは、Java SEが必要なのでダウンロードの必要があるという
メッセージのようです。

いつもなら素直にダウンロードするのですが、
Javaと言えば、2019年頃から商用利用の有償化などの話が出ていることを
思い出しました。

今回は悩んだ末に「Java SE 8u201」の
「Mac OS X x64」バージョンをダウンロードしてみましたが、
状況によっては有償で利用する必要があったり、
または古めのバージョンを使用するとセキュリティの問題がある可能性もあるので、
状況に合わせて必要なJava SEをダウンロードしてご使用くださいー。


Java SEをダウンロード・インストール後に、
再度ターミナルで先ほどのコマンドを実行してみると…


apksigner verify –verbose –print-certs (リリース予定のapk).apk


ここで、やっと署名の確認ができました

リリース済みのapkの署名と比較

署名の確認はできましたが、
まだこれからリリースしようとしているapkしか確認していないので、
リリース済みのapkに対しても
同じコマンドを実行してみたいと思います。


署名が同じかどうか、どう比較すればいいんだろうと思っていたのですが、
コマンド実行後に表示された数行の署名内容をコピーして
比較したところ、
ピッタリ同じ文章になっていました。


当たり前といえば当たり前なのかもしれないですが、
面倒な比較手順などは不要だったので安心しましたー。

スポンサーリンク