2016/12/27
apksigner で未署名の apk に後から署名する方法
未署名の apk に署名するツールは、build-tools 24.0.3 以降から jarsigner
の代わりに apksigner
を使うようになりました。
zipalign
の実行順序など細かいところが変わっていますのでご注意ください。
なお、署名済みの apk を未署名にする方法は以下を参照してください。
参考
Overview
全体の流れとしては以下のようになります。
- zip のアライメント調整
- 署名
- 検証
具体的には以下。
$ zipalign -v -p 4 my-app-unsigned.apk my-app-unsigned-aligned.apk $ apksigner sign --ks ~/.android/my-key.jks --ks-key-alias alias-name --out my-app.apk my-app-unsigned-aligned.apk $ apksigner verify my-app.apk |
apksigner
と zipalign
は android-sdk/build-tools/XX.X.X/
にあり、ここではパスが通ってることとします1。
参考
一度経験すれば上記で十分だと思いますが、一応各手順の説明を書いておきます。
zipalign
署名する前に zip のアライメントを整える必要があります2。
$ zipalign -v -p 4 my-app-unsigned.apk my-app-unsigned-aligned.apk |
-v
冗長な情報表示-p
全ての共有ファイルで同じアライメントを使う4
アライメント [byte]、少なくとも現在は 4 固定
参考
署名
署名ファイル my-key.jks
は既に作成済みとします。作成方法は参考リンクを参照してください3。
$ apksigner sign --ks ~/.android/my-key.jks --ks-key-alias alias-name --out my-app.apk my-app-unsigned-aligned.apk |
--out
を指定しなかった場合、元のファイルに上書きされます。
他の項目は自明ということで。
参考
検証
最後に apksigner
を利用して検証します。
$ apksigner verify my-app.apk |
成功した場合、何も表示されないので注意が必要です。
以下のように -v
か --print-certs
をつけた方がわかりやすいかもしれません。
$ apksigner verify -v app-debug.apk Verifies Verified using v1 scheme (JAR signing): true Verified using v2 scheme (APK Signature Scheme v2): true Number of signers: 1 |
$ apksigner verify --print-certs app-debug.apk Signer #1 certificate DN: CN=Android Debug, O=Android, C=US Signer #1 certificate SHA-256 digest: ca17bec5dd187fdb4a859b22f5db82b5251ab68b041df5b05dd885432771d5cd Signer #1 certificate SHA-1 digest: 13199c0c7fdf8734d904925f5aa425c537cf8e69 Signer #1 certificate MD5 digest: ef94f75750de7d124796eb7c5ed38cf2 |
0 件のコメント:
コメントを投稿