モノズキット

「やってみたい」を応援するスターターキット

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から追加されたツールです。

 f:id:hisato-t05241123:20170126000021p:plain

ディレクトリは

(~) > Android > sdk > build-tools > 25.0.2

にあります。

 

以前から、apkファイルの再署名を利用した偽アプリや改造アプリの作成被害が存在していたので、その対策として新たな署名方法を考えたのかもしれませんね。

AndroidOSとインストール可能な署名の関係

取り合えずざっくりと調査した結果です。

公式では、jarsignerツールを用いた署名を“v1署名”、apksignerツールを用いた署名を“v2署名”と称しています。

f:id:hisato-t05241123:20170126001349p:plain

現状はv1署名がついていれば問題なさそうです。AndroidOS 7系はv2署名があればインストール可能なようです。当たり前ですが、署名がなければインストール失敗しますね。

署名の確認方法

apkファイルの署名状況は、以下のコマンドで確認できます。

apksigner verify -v [hoge.apk]

例えばAndroidStudioでデフォルトで作成したapkファイルの署名状況はこうでした。

※以下のコマンドは、apksignerにパスが通っている条件です。

f:id:hisato-t05241123:20170126001811p:plain

署名方法

apkファイルの署名は、以下のコマンドで署名できました。

apksigner sign --ks [keystorefile.jks] --v1-signing-enabled true(/false) --v2-signing-enabled true(/false) [hoge.apk]

こんな感じ。

※以下のコマンドは、apksignerにパスが通っていること、apkファイルとキーファイルが同じディレクトリにある条件で行っています。

f:id:hisato-t05241123:20170126002413p:plain

表示されていませんが、キーのパスワードを聞かれます。

f:id:hisato-t05241123:20170126002715p:plain

これでv1、v2両方に署名がされました。

参考

署名の確認コマンド、verifyコマンドですが、以下の条件のときは確認できました。

  1. v1:true
    v2:true
  2. v1:true
    v2:false

しかし、v1がfalseだと、v2の署名確認をする前にエラー表示が出るようです。

 

v1署名の鍵情報の存在する、META-INFを削除して確認すると、、、

f:id:hisato-t05241123:20170126003631p:plain

こうなってしまう、、、

f:id:hisato-t05241123:20170126003733p:plain

これだとv1:falseのとき、v2がtrueなのかfalseなのか、確認ができない。

この辺は今後改善されるといいなと思います。

 

以上、apksignerの署名方法でした。

もし間違いなどありましたらコメントいただけたら幸いです。