KDP(電子出版)のメモ 急急如律令

Amazon Kindleダイレクト・パブリッシングでの電子出版や電子書籍の作成販売について、文章やイラストの作成や編集方法について書いています。

ossとしてgithubで公開しているときの署名の管理方法

初めてアンドロイドアプリを配信するときはGenerate Signed APKでアマゾンの場合はdebugのママでアップロードしていた。いまはGenerate Signed Bundle AABを選ぶ、アマゾンの場合signedじゃない方。

 いつも思うのだけど、ストアにログインしているのに鍵があるのだからわざわざ鍵かけて渡す意味あるのかと。以前鍵を流出したからこうなったそうだけど。鍵の管理の手間が増える。鍵にもパスワードが合ってさらにめんどくさい。鍵の変更はストアに相談する必要があるとか。

Alias設定をCoutrycode JPにした

qiita.com

99nyorituryo.hatenablog.com

あなた:

google playに向けてアンドロイドアプリのaabを生成するときの注意点

ChatGPT:

Google Play に向けて Android アプリの .aab(Android App Bundle)を生成する際には、いくつかの注意点があります。以下に重要なポイントをまとめます:

  • .aab は Google Play が各デバイスに最適な APK を自動生成・配信するための形式。
  • Google Play では .apk よりも .aab のアップロードが推奨され、2021年8月以降は新規アプリは .aab 必須。

.aab は Google Play が各デバイスに最適な APK を自動生成・配信するための形式。

Google Play では .apk よりも .aab のアップロードが推奨され、2021年8月以降は新規アプリは .aab 必須。

  • リリースビルドは署名付きであることが必要。
  • 通常は release ビルドタイプで signingConfigs を設定する。
  • build.gradle 例(Module: app):

groovy コピーする 編集する android { ... signingConfigs { release { storeFile file("your_keystore.jks") storePassword "your_store_password" keyAlias "your_key_alias" keyPassword "your_key_password" } } buildTypes { release { signingConfig signingConfigs.release minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } }

リリースビルドは署名付きであることが必要。

通常は release ビルドタイプで signingConfigs を設定する。

build.gradle 例(Module: app):

android {
    ...
    signingConfigs {
        release {
            storeFile file("your_keystore.jks")
            storePassword "your_store_password"
            keyAlias "your_key_alias"
            keyPassword "your_key_password"
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}
  • build.gradle 内で versionCode を 毎回増やす必要がある。

groovy コピーする 編集する defaultConfig { versionCode 2 // 前回より大きくする versionName "1.0.1" }

build.gradle 内で versionCode を 毎回増やす必要がある。

defaultConfig {
    versionCode 2 // 前回より大きくする
    versionName "1.0.1"
}
  • .aab ファイルの最大サイズは 150MB。
  • それ以上になると Play Asset Delivery や Play Feature Delivery を使用。

.aab ファイルの最大サイズは 150MB。

それ以上になると Play Asset Delivery や Play Feature Delivery を使用。

  • 不要なクラスやメソッドの削除、難読化が行われる。
  • 特定のクラスを残す必要がある場合は proguard-rules.pro に指定が必要。
  • 例:

proguard コピーする 編集する -keep class com.example.myimportantclass.* { ; }

不要なクラスやメソッドの削除、難読化が行われる。

特定のクラスを残す必要がある場合は proguard-rules.pro に指定が必要。

例:

-keep class com.example.myimportantclass.** { *; }
  • Log.d() や System.out.println() などは不要であればリリースビルドでは除去する。
  • 不要なパーミッションも削除すること。

Log.d() や System.out.println() などは不要であればリリースビルドでは除去する。

不要なパーミッションも削除すること。

以下のコマンドで .aab を生成(Android Studio または CLI):

  • Android Studio:

java コピーする 編集する Build > Build Bundle(s) / APK(s) > Build Bundle(s)

  • コマンドライン(CLI):

bash コピーする 編集する ./gradlew bundleRelease

成果物は: app/build/outputs/bundle/release/app-release.aab

Android Studio:

Build > Build Bundle(s) / APK(s) > Build Bundle(s)

コマンドライン(CLI):

./gradlew bundleRelease

成果物は: app/build/outputs/bundle/release/app-release.aab

  • .aab は直接インストールできないので、Google Play Console の内部テストなどで確認。
  • bundletool を使ってローカルで .apk に変換することも可能:

bash コピーする 編集する bundletool build-apks --bundle=app.aab --output=output.apks \ --ks=your_keystore.jks --ks-key-alias=your_alias \ --ks-pass=pass:your_store_password --key-pass=pass:your_key_password

.aab は直接インストールできないので、Google Play Console の内部テストなどで確認。

bundletool を使ってローカルで .apk に変換することも可能:

bundletool build-apks --bundle=app.aab --output=output.apks \
    --ks=your_keystore.jks --ks-key-alias=your_alias \
    --ks-pass=pass:your_store_password --key-pass=pass:your_key_password
  • 毎年秋には targetSdkVersion の最低要件が更新される。
  • 2024年現在、targetSdkVersion 33(Android 13)以上が必要(2025年には API 34 以上の可能性)。

毎年秋には targetSdkVersion の最低要件が更新される。

2024年現在、targetSdkVersion 33(Android 13)以上が必要(2025年には API 34 以上の可能性)。

  • アプリのカテゴリ、コンテンツレーティング、ポリシー同意、プライバシーポリシーの URL 等を忘れず設定。
  • 特に広告あり/なし、子供向けかどうかなどの設定が重要。

アプリのカテゴリ、コンテンツレーティング、ポリシー同意、プライバシーポリシーの URL 等を忘れず設定。

特に広告あり/なし、子供向けかどうかなどの設定が重要。

必要であれば、具体的な build.gradle 設定例や keystore の作り方なども詳しく説明できますよ。どの辺が気になっていますか?

あなた:

ossとしてgithubで公開しているときの署名の管理方法

ChatGPT:

OSS(オープンソースソフトウェア)として GitHub で Android アプリを公開している場合、署名鍵(keystore)の管理は特に慎重に行う必要があります。署名鍵は絶対に公開しないことが原則です。以下に、安全かつ実用的な署名鍵管理の方法をまとめます。

  • keystore.jks ファイルや署名情報は .gitignore に登録する。
  • 誤ってコミットしても、Git の履歴に残るため「強く復元不可能にする処理」が必要になる。

対策: .gitignore に追加

matlab コピーする 編集する *.jks keystore.properties

誤ってコミットした場合の対応(公式ドキュメント) - 対策: .gitignore に追加

matlab コピーする 編集する *.jks keystore.properties

  • 誤ってコミットした場合の対応(公式ドキュメント)

keystore.jks ファイルや署名情報は .gitignore に登録する。

誤ってコミットしても、Git の履歴に残るため「強く復元不可能にする処理」が必要になる。

  • 対策: .gitignore に追加

matlab コピーする 編集する *.jks keystore.properties

  • 誤ってコミットした場合の対応(公式ドキュメント)

対策: .gitignore に追加

*.jks
keystore.properties

誤ってコミットした場合の対応(公式ドキュメント)

GitHub Actions を使ってリリース用 .aab を自動生成する場合は、GitHub Secrets に署名情報を登録する方法が一般的。

  • KEYSTORE_FILE: base64 エンコードした keystore(JKS)ファイル
  • KEYSTORE_PASSWORD
  • KEY_ALIAS
  • KEY_PASSWORD

KEYSTORE_FILE: base64 エンコードした keystore(JKS)ファイル

KEYSTORE_PASSWORD

KEY_ALIAS

KEY_PASSWORD

# 署名ファイルを base64 に変換
base64 your-release-key.jks > keystore.b64

GitHub のリポジトリ → Settings → Secrets and variables → Actions → New secret で追加。

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - name: Decode keystore
        run: |
          echo "${{ secrets.KEYSTORE_FILE }}" | base64 -d > release-key.jks

      - name: Set up JDK
        uses: actions/setup-java@v3
        with:
          distribution: 'temurin'
          java-version: '17'

      - name: Build Release AAB
        run: ./gradlew bundleRelease
        env:
          KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
          KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
          KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}

build.gradle 側では環境変数で取得するようにしておく:

signingConfigs {
    release {
        storeFile file("release-key.jks")
        storePassword System.getenv("KEYSTORE_PASSWORD")
        keyAlias System.getenv("KEY_ALIAS")
        keyPassword System.getenv("KEY_PASSWORD")
    }
}
  • Google Play Console に署名鍵をアップロードすると、Google が以後の署名を自動で行う。
  • OSS プロジェクトの場合、開発用署名鍵と Google Play 用署名鍵を分離できるので便利。
  • CI/CD で署名済み .aab をビルドせず、署名なしでアップロードする運用も可能。

Google Play Console に署名鍵をアップロードすると、Google が以後の署名を自動で行う。

OSS プロジェクトの場合、開発用署名鍵と Google Play 用署名鍵を分離できるので便利。

CI/CD で署名済み .aab をビルドせず、署名なしでアップロードする運用も可能。

  • 複数の開発者が関わる OSS プロジェクトの場合、署名は代表者(オーナー)が一元管理。
  • 共同開発者には署名鍵を渡さず、Pull Request の段階でビルドし、署名付きの .aab をリリース時にだけ作成。

複数の開発者が関わる OSS プロジェクトの場合、署名は代表者(オーナー)が一元管理。

共同開発者には署名鍵を渡さず、Pull Request の段階でビルドし、署名付きの .aab をリリース時にだけ作成。

ケース 推奨される署名方法
個人開発OSSでリリースも自分でやる 手元で署名して .aab 作成 or GitHub Actions + Secrets
複数人開発OSS Google Play App Signing を使用し、CIで署名せずアップロード
デバッグや非公開ビルドのみ デバッグ署名(自動)で OK

必要であれば、GitHub Actions のフルサンプルや Google Play App Signing の設定手順もお手伝いできます。どちらの運用を考えていますか?