Android Studio は優れた IDE ですが、ストア公開用の Android ビルドを作成するために必須というわけではありません。生成された android/ Capacitor プロジェクト内のフォルダには、あらゆるターミナルからビルドと署名が可能な Gradle wrapper が含まれています。これは、ディスプレイのない Linux サーバーや、Studio の動作が重い Windows マシン、そして CI において非常に重要です。
このガイドでは、コマンドラインのみを使用して署名済みAABをビルドする方法を解説し、さらに Capgo のビルド ノートPCにキーストアを保存したくないチーム向けのクラウド版についても紹介します。
前提条件
- JDK 21 (
java -version21と表示されます)。 - Androidコマンドライン SDK と
platform-tools,build-toolsおよび Capacitor バージョンに合わせたプラットフォーム (Capacitor 8 の場合は API 36、Capacitor 7 の場合は API 35) を使用します。 Linuxガイド と Windowsガイド のインストール手順をカバーしています。 ANDROID_HOMEエクスポート、またはandroid/local.propertiesとsdk.dir=....- Capacitor アプリ(以下)
android/によって生成されたbunx cap add android.
1) Signing keystore の作成
keytool すべてのプラットフォームの JDK に含まれています:
keytool -genkeypair -v \
-keystore release.jks \
-keyalg RSA -keysize 2048 -validity 10000 \
-alias release
プロンプトに従い、ストアパスワードとキーパスワードを設定します。ファイルと両方のパスワードは、すぐにパスワードマネージャーやシークレット管理ツールに保存してください。決して commit しないでください。 release.jks.
Play Console でアプリを作成する際、Play App Signing を有効にします。これにより Google が最終的な署名キーを保持し、あなたの keystore はアップロードキーとなります。アップロードキーは紛失してもリセット可能です。
2) Gradle に署名方法を伝える
機密情報を〜から守る build.gradle. 作成します android/keystore.properties (gitignored):
storeFile=/absolute/path/to/release.jks
storePassword=your-store-password
keyAlias=release
keyPassword=your-key-password
その後、以下で参照します: android/app/build.gradle:
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file("keystore.properties")
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
android {
signingConfigs {
release {
if (keystorePropertiesFile.exists()) {
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
}
}
}
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled false
}
}
}
追加 android/keystore.properties と *.jks へ .gitignore.
3) バージョンを上げる
Google Playは、以前に versionCode 確認済みのバージョンは拒否されます。次に、 android/app/build.gradle:
defaultConfig {
versionCode 12
versionName "1.4.0"
}
通常、チームは versionCode 手動更新を避けるため、CIの実行番号やgitのコミット数から算出します。
4) ターミナルからAABをビルドする
bun run build
bunx cap sync android
cd android
./gradlew bundleRelease
Windowsの場合は、 .\gradlew.bat bundleReleaseを使用してください。署名済みbundleは、以下に書き出されます: android/app/build/outputs/bundle/release/app-release.aab.
adbで直接インストールするためのAPKが必要ですか? ./gradlew assembleRelease を生成します app-release.apk の下に outputs/apk/release/. 次のコマンドでインストールできます: adb install; adbインストールガイド では、例外的なケースについても説明しています。
5) 署名の検証
$ANDROID_HOME/build-tools/36.0.0/apksigner verify --print-certs app/build/outputs/apk/release/app-release.apk
AABの場合、 jarsigner -verify -verbose app-release.aab 署名と証明書のフィンガープリントを確認してください。SHA-256をPlay Consoleの「アプリの整合性」に表示されているものと比較します。
6) コマンドラインからGoogle Playへアップロード
Play Console経由の手動アップロードも可能です。自動化する場合は、Google Cloudでサービスアカウントを作成し、Play Consoleの「ユーザーと権限」でアクセス権を付与して、JSONキーをダウンロードしてください。その後、Google Play Developer API または fastlane supply などのツールを使用してアップロードします。
bundle exec fastlane supply --aab android/app/build/outputs/bundle/release/app-release.aab \
--track internal --json_key play-service-account.json --package_name com.example.app
新しいアプリの初回アップロードは Play Console で手動で行う必要があります。API は既存のアプリのビルドのみを受け付けるためです。
7) クラウドでの代替案: Capgo Build for Android
上記の方法はすべて可能ですが、ビルドを行うすべてのマシンに keystore が残ってしまいます。Capgo Build は keystore を暗号化された vault 内に保持し、アップロードされた android/ プロジェクトからビルドを行い、AAB を Play のトラックへ直接プッシュできます。
認証情報は一度保存するだけ:
bunx @capgo/cli@latest build credentials save --platform android \
--keystore ./release.jks \
--keystore-alias "release" \
--keystore-key-password "key-password" \
--keystore-store-password "store-password" \
--play-config ./play-service-account.json
あるいは、 bunx @capgo/cli@latest build init --platform android にガイドを任せましょう。そうすれば、すべてのリリースは:
bun run build
bunx cap sync android
bunx @capgo/cli@latest build request com.example.app --platform android --build-mode release
ログがターミナルにストリーミングされます。さらに、 --output-upload を追加すると AAB または APK のダウンロードリンクを取得でき、 --ai-analytics を追加するとビルド失敗の理由が自動的に説明されます。同じコマンドが Windows、Linux、macOS、および CI で動作します。GitHub Actions の例は、 Android ビルドガイド.
また、Capgo は準備済みのネイティブプロジェクトのみを受け取るため、プライベートな npm レジストリや Web ビルドの secrets は、お客様の環境内に安全に保持されます。
8) Webの変更による再ビルドを止める
プラグイン、権限、アイコン、Capacitor のアップグレードには、署名済みの Native Build が必要です。それ以外の dist/, Capgo Live Updates については、新しい Web bundle をインストール済みのアプリへ直接プッシュできます:
bunx @capgo/cli@latest bundle upload --channel production
これで、週に何度も Gradle を実行する手間がなくなります。
トラブルシューティング
SDK location not found: 設定ANDROID_HOMEまたは作成android/local.properties.Keystore was tampered with, or password was incorrect: ストアのパスワードが間違っているか、Git の CRLF 変換によりファイルが破損しています。*.jksバイナリ形式で.gitattributesバージョン管理が必要な場合(本来は不要ですが)Unsupported class file major version: JDK のバージョンが 21 と一致していません。- Play ストアで AAB が拒否される: “signed with a different key”: Play App Signing はアップロードキーを求めています。Play Console に登録済みの keystore を使用するか、アップロードキーのリセットをリクエストしてください。
- Windows ではビルドが遅い: 除外する
~/.gradleおよび Defender から SDK を除外し、プロジェクトは短いローカルパスに配置してください。 - Gradle で Out of memory が発生する: 追加する
org.gradle.jvmargs=-Xmx4gへandroid/gradle.properties.
概要
Capacitor の Android リリースビルドには、Android Studio ではなく JDK、SDK、および Gradle wrapper が必要です。keystore は次で作成し、 keytool次を使用して署名します keystore.properties次を使用してビルドします bundleRelease, そして Play API でアップロードします。KeystoreをローカルPCから切り離し、どのOSでも同じコマンドを実行したい場合は、Capgo Build が準備されたプロジェクトから署名とアップロードを自動で行います。