apksignerで署名する方法
備忘録を兼ねて、apksignerでの署名方法を説明します。
環境はwindows10、 androidSDK:v25.0.2、JDK1.8.0_60で検証しています。
apksignerについて
apksignerに関する公式ページはこちら。
https://developer.android.com/studio/command-line/apksigner.html
apksignerはAndroidのアプリケーションファイル、apkファイルの署名ツールです。
androidSDK v24.0.3から追加されたツールです。
ディレクトリは
(~) > Android > sdk > build-tools > 25.0.2
にあります。
以前から、apkファイルの再署名を利用した偽アプリや改造アプリの作成被害が存在していたので、その対策として新たな署名方法を考えたのかもしれませんね。
AndroidOSとインストール可能な署名の関係
取り合えずざっくりと調査した結果です。
公式では、jarsignerツールを用いた署名を“v1署名”、apksignerツールを用いた署名を“v2署名”と称しています。
現状はv1署名がついていれば問題なさそうです。AndroidOS 7系はv2署名があればインストール可能なようです。当たり前ですが、署名がなければインストール失敗しますね。
署名の確認方法
apkファイルの署名状況は、以下のコマンドで確認できます。
apksigner verify -v [hoge.apk]
例えばAndroidStudioでデフォルトで作成したapkファイルの署名状況はこうでした。
※以下のコマンドは、apksignerにパスが通っている条件です。
署名方法
apkファイルの署名は、以下のコマンドで署名できました。
apksigner sign --ks [keystorefile.jks] --v1-signing-enabled true(/false) --v2-signing-enabled true(/false) [hoge.apk]
こんな感じ。
※以下のコマンドは、apksignerにパスが通っていること、apkファイルとキーファイルが同じディレクトリにある条件で行っています。
表示されていませんが、キーのパスワードを聞かれます。
これでv1、v2両方に署名がされました。
参考
署名の確認コマンド、verifyコマンドですが、以下の条件のときは確認できました。
- v1:true
v2:true - v1:true
v2:false
しかし、v1がfalseだと、v2の署名確認をする前にエラー表示が出るようです。
v1署名の鍵情報の存在する、META-INFを削除して確認すると、、、
こうなってしまう、、、
これだとv1:falseのとき、v2がtrueなのかfalseなのか、確認ができない。
この辺は今後改善されるといいなと思います。
以上、apksignerの署名方法でした。
もし間違いなどありましたらコメントいただけたら幸いです。