Android のコード署名

この記事では、Android のコード署名について説明します (APK)。 ラップ プロジェクト の作成・構築時に プラットフォーム の 1 つとして Android を選択した場合、アプリを Android 用に署名する必要があります。

重要

AAB アプリを Google Play で配信するにあたって署名をする場合は、アプリに署名する を参照してください。

PC を準備する

開始するには、以下の情報が必要です:

キーの生成

注意

アプリの登録 時にキーと署名ハッシュをすでに生成している場合は、APK パッケージへの署名 をスキップします。

アプリケーション パッケージに署名するための証明書を作成するために、keytool.exe (Android Studio のインストール後、フォルダーの場所 "Drive:\Program Files\Android\Android Studio\jre\bin\keytool.exe" から入手可能) を使用します。 Keytool は、暗号鍵、X.509 証明書チェーン、信頼できる証明書のキーストア (データベース) を管理するために使用されます。

キーを生成するには、コマンドプロンプトを開き、次のコマンドを実行します:

keytool -genkey -alias SIGNATURE_ALIAS -keyalg RSA -keystore PATH_TO_KEYSTORE -keysize 2048 -validity 10000

パラメーター:

  • genkey - キーを生成するコマンドです。
  • alias - 生成されるキーを含む keystore エントリを参照するために今後使用するエイリアスです。
  • keyalg - キー アルゴリズムの名前です。
  • keystore - 使用しているキー ストアの名前です。
  • keysize - 生成される各キーのサイズです。
  • validity - キーの有効期間です。

例:

  • Key Vault を準備する場合、PATH_TO_KEYSTORE には .pfx 拡張子が必要です。

    keytool -genkey -alias powerappswrap -keyalg RSA -keystore powerappswrap.pfx -keysize 2048 -validity 10000

  • 手動署名を行う場合は、PATH_TO_KEYSTORE に .jks の拡張子が必要です。

    keytool -genkey -alias powerappswrap -keyalg RSA -keystore powerappswrap.jks -keysize 2048 -validity 10000

上記の例のパラメータを使用した keytool コマンドの画面。

署名ハッシュの生成

注意

アプリの登録 時にキーと署名ハッシュをすでに生成している場合は、APK パッケージへの署名 をスキップします。

キーの生成後、keytoolexportcert コマンドでキーストア証明書をエクスポートします。

keytool -exportcert -alias SIGNATURE_ALIAS -keystore PATH_TO_KEYSTORE | openssl sha1 -binary | openssl base64

パラメーター:

  • exportcert - キーストアからエイリアスに関連付けられた証明書を読み取り、それを cert_file ファイルに保存します。 ファイルが指定されていない場合、証明書は stdout に出力されます。
  • alias - 前述のキーの生成中に使用されるエイリアスです。
  • keystore - 使用しているキー ストアの名前です。
  • openssl - Android の SHA1 キーを生成します。

アプリを登録する 際に、生成された署名ハッシュを リダイレクト URI に追加します。

SHA1 の 16 進数を Base64 でエンコードされた署名ハッシュに手動で変換する

署名ハッシュが Azure ポータルで正しくエンコードされていないか、受け入れられない場合は、次のエラーが表示される場合があります:

「署名ハッシュは base64 でエンコードされた SHA1 である必要があります。」

このエラーが表示された場合は、代わりに次の手順を使用して署名ハッシュを生成してみてください。

  1. keytool -list -v -alias SIGNATURE_ALIAS -keystore PATH_TO_KEYSTORE を実行して、詳細モードで証明書情報を一覧表示します。
  2. 出力から証明書の指紋 セクションのSHA1 の値ををコピーします。 16 進値のみをコピーするようにしてください。
    例: EF:11:45:3D:F1:72:D9:8C:43:32:CD:0A:49:C2:E4:75:2D:B3:2D:9F
  3. 使用可能な「16 進数から Base64 へ」のコンバーターを使用して、コピーされた証明書の指紋の 16 進数値を Base64 でエンコードされた値に変換します。
    Base64 でエンコードされた値の例: 8CPPeLaz9etdqQyaQubcqsy2Tw=
  4. アプリを登録する際に、生成された Base64 エンコード値を署名ハッシュとして Azure ポータルにコピーします。

APK パッケージに署名する

APK パッケージに署名するには、apksigner ツールを使用します。 このツールを使用すると、APK に署名し、APK がサポートするすべての Android プラットフォームで APK パッケージの署名が正常に検証されるようになります。

apksigner を見つける

  1. Android Studio の Android SDK パスを確認します。

  2. Tool > SDK マネージャー > Android SDK の場所 を選択します。

    iOS をご利用の場合、buildTools Version ディレクトリにある apksigner ファイルを確認します:

    SDKディレクトリ > ビルドツール > buildToolsVersion > lib にアクセスし、apksigner.jar ファイルを確認します

apksigner ファイルを使用する

次のコマンドを実行して、apksigner を使用し、パッケージに署名します:

apksigner.bat sign --ks PATH_TO_KEYSTORE --ks-key-alias KEY_ALIAS PATH_TO_APK

パラメーター:

  • ks - keystore へのパスです。
  • ks-key-alias - APK ファイルへのキー エイリアス パスです。

プロンプトが表示されたら、パスワードを入力します。

詳細情報: Android Studio コマンド ライン ツール: apksigner

アプリの配布

以上で、App Center などの配布サービスにパッケージをホストすることができます。 Microsoft Intune を使用して配布するには、基幹業務アプリから Microsoft Intune に Android を追加するを参照してください。 Intune アプリ保護サービスにアプリのアクセス権を付与する方法については、Intune アプリ保護サービスにアプリのアクセス権を付与する を参照してください。

参照