既存アプリ(apk)を Android App Bundle(aab) でアップロードできるようにする

# 概要

以前から

<img width="1594" alt="スクリーンショット 2019-08-29 15.34.29.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/34926/f9aa88de-86c3-6ecb-5a6a-7d550f753e95.png">

こちらが出ていたのですが、`新規アプリの aab は簡単だけど既存アプリはめんどくさい` というのをどこかで見ていたのでなかなか取りかかれずにいましたが、
時間もできたのでようやく重い腰を上げて対応したのでそのときの手順を書いておきます。

Android App Bundle について公式は [コチラ](https://developer.android.com/platform/technology/app-bundle/index.html)。

ザッとみたところ、いい事しかないですよね！！

~~それにしても サイズ 43.9% 削減って・・・さっさとやれよ~~

# 「Google でアプリ署名鍵の管理、保護を行う」 を有効にする

※ 一度有効にすると無効にすることはできないそうなので注意してください

## 事前準備

### アップロード公開鍵証明書を作成する

あとで使うので先に作っておきます。

#### アップロード鍵を生成する

[公式にしっかり手順](https://developer.android.com/studio/publish/app-signing.html#generate-key) 書いてありますがいちおう以下に手順を書いておきます。

- Android Studio - Build - Generate Signed Bundle / APK... から作成します。

![スクリーンショット 2019-08-29 15.53.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/34926/e777487d-ed8d-5676-9fc6-14d501e6f68c.png)

- Android App Bundle を選択します。

![スクリーンショット 2019-08-29 15.53.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/34926/9d5add3b-dd39-1923-b531-b4cf95ea22de.png)

- Create new... からアップロード鍵を生成します。

![スクリーンショット 2019-08-29 15.53.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/34926/8ad4c1b3-9242-f35f-b3fa-cd6fd31ecb7b.png)

- 必要な情報を入力して OK します。

![スクリーンショット 2019-08-29 16.02.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/34926/ef0353ac-8cce-a6aa-115f-7783bbbcbd03.png)

- OK を押すとアップロード鍵は生成はされていたのですがぼくは以下のエラーが表示されました。

![スクリーンショット 2019-08-29 16.10.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/34926/173aa400-dfa2-5e01-983b-ce6b42c69b6d.png)

- お薦めされているので言われるがままに表示されているコマンドを実行します。

```
$ keytool -importkeystore -srckeystore ./upload-keystore.jks -destkeystore ./upload-keystore.jks -deststoretype pkcs12

ソース・キーストアのパスワードを入力してください:
別名********のエントリのインポートに成功しました。
インポート・コマンドが完了しました: 1件のエントリのインポートが成功しました。0件のエントリのインポートが失敗したか取り消されました

Warning:
"./upload-keystore.jks"がNon JKS/JCEKSに移行されました。JKSキーストアは"./upload-keystore.jks.old"としてバックアップされます。
```

どうやらうまく動いたようなので、これでアップロード鍵の生成は終了です。

#### アップロード鍵からアップロード公開鍵証明書を生成する

こちらはコマンドを実行するだけです。

```
$ keytool -export -rfc -keystore ./upload-keystore.jks -alias ******** -file upload_certificate.pem
キーストアのパスワードを入力してください:
証明書がファイル<upload_certificate.pem>に保存されました
```

以上で事前準備は終了です。

ちゃんと aab でアップロードできるか確認するのでココで作ったアップロード鍵で aab ファイルを生成しておきます。
（Export encrypted key for 〜 は **チェックしなくて** 大丈夫です。）

## アプリ署名の秘密鍵をアップロードする

- Google Play Console - アプリの署名 を表示します。

![スクリーンショット 2019-08-29 17.54.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/34926/5fa8624d-1039-fa2b-8152-9b6fd400a5e4.png)

- 「Java Keystore から鍵をエクスポートしてアップロードする」を選択します。

![スクリーンショット 2019-08-29 16.31.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/34926/95961373-ca98-4a37-4a45-2dc0885e0dc4.png)

- 「PEPK ツール」を押して `pepk.jar` をダウンロードします。

- 画面に表示されているコマンドを太字の部分を修正して実行します。

```
$ java -jar pepk.jar --keystore=[使用している keystore の path] --alias=******** --output=encrypted_private_key_path --encryptionkey=****************
```

- 「アプリ署名の秘密鍵」からアップロードします。

以上でアプリ署名の秘密鍵のアップロードは終了です。

## アップロード公開鍵証明書をアップロードする

必須ではないとのことですが `推奨` なのでこちらもやっておいたほうが良さそうです。

- アプリ署名の秘密鍵と同じ画面で 「（省略可）セキュリティを強化する〜」 を押します。

![スクリーンショット 2019-08-29 15.46.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/34926/ea3f028b-0ad0-464e-6fae-192aecde6bd5.png)

- 「アップロード公開鍵証明書」から [アップロード公開鍵証明書を作成する](#アップロード公開鍵証明書を作成する) で生成したアップロード公開鍵証明書（手順通りなら upload_certificate.pem） をアップロードします。

- 「完了」を押します。

![スクリーンショット 2019-08-29 18.57.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/34926/d7da7ab8-b8c0-125a-1845-95ba98946788.png)

- こちらが表示されているか確認します。

以上で「Google でアプリ署名鍵の管理、保護を行う」 が有効になりました！🎉
おつかれさまでした！

# アップロードできるようになったか確認する

念のためちゃんとアップロードできるか確認しておきます。
アップロードの方法は apk のときと同じです！

Google がアプリの署名をごにょごにょやってくれているので少しアップロードに時間かかるようになった気がします。（といっても微々たるものですが）

![スクリーンショット 2019-08-29 16.36.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/34926/490e9f66-f7c0-7cab-6e33-434a1187976b.png)

無事にアップロードできました！

アプリのサイズも半分ぐらいに！

# 参考

- [Android App Bundle](https://developer.android.com/platform/technology/app-bundle/index.html)

- [アプリの署名 - 鍵とキーストアを生成する](https://developer.android.com/studio/publish/app-signing.html#generate-key)

- [【Android】Google Play App Signingのススメ](https://qiita.com/rkowase/items/90cdc4e8c6fc449d8276)