LoginSignup
8
8

今の時代はAPKをコマンドで署名するなら、jarsignerではなくapksignerを使う

Last updated at Posted at 2019-11-03

あらすじ

現場ではAndroid TVの開発をやっているのですが、シェルスクリプトで署名済みのAPKを作ろうとした時に、jarsignerだとエラーが出るなどしてうまくいかなかったので、色々調べてみました。

jarsignerで署名ができないパターン

どうやらAndroid 7.0以上ではできないらしい。
Android 7.0 以上では jarsigner ではなく apksigner で署名する | メモ帳

公式のページを見ても、apksignerについてのみ記載されていた。
apksigner  |  Android Developers

事前準備

Android SDK Build Tools のリビジョン 24.0.3 以上で利用可能です。
事前にパスを通しておきましょう。

.bash_profile
export ANDROID_HOME=/Users/[ユーザ名]/Library/Android/sdk
export PATH=${PATH}:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$ANDROID_HOME/build-tools/28.0.3

また、署名するために必要な情報も用意しておきましょう。

  • 未署名のAPKファイル
  • キーストアファイル
  • キーストアパスワード
  • キーエイリアス

使用方法

先に実際のコマンドを示します。

apksigner sign --ks [キーストアファイル] -v --v2-signing-enabled true --ks-key-alias [キーエイリアス] --ks-pass pass:[キーストアパスワード] [未署名のAPKファイル]

それぞれのオプションの意味は以下の通りです。

オプション 意味
--ks キーストアファイル
-v 詳細出力モードを使用
--v2-signing-enabled APK 署名スキーム v2 を使用するかどうか
--ks-key-alias キーストア内で、その署名者の秘密鍵と証明書のデータを示すエイリアス名
--ks-pass 署名者の秘密鍵と証明書が含まれているキーストアのパスワード

--ks-pass オプションのフォーマットとしては以下がサポートされています。

フォーマット 意味
pass:<password> apksigner signコマンドの他の部分と一緒にパスワードをインラインで指定
env:<name> 指定する環境変数にパスワードを保存
file:<filename> 指定するファイル内にパスワードを 1 行で保存
stdin 標準の入力ストリーム内にパスワードを 1 行で指定

署名されているか確認する方法

以下のコマンドで署名情報を出力することができます。

apksigner verify --print-certs -v [署名済みのAPKファイル]

それぞれのオプションの意味は以下の通りです。

オプション 意味
--print-certs APK の署名証明書に関する情報を表示
-v 詳細出力モードを使用

より詳細な使い方

それぞれのより詳細な使い方に関しては、以下を参照してください。
apksigner  |  Android Developers

8
8
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8