Androidアプリに最適なCI/CDプラットフォームは、多くの場合すでに利用しているものです。AndroidのビルドにはLinux、Java、Android SDK、Gradleがあれば十分だからです。プラットフォーム間の違いはビルド周辺で顕在化します。keystoreの保存方法、Google Playトラックへのアップロード方法、Gradleキャッシュによる再ビルドの速度、そして同じプラットフォームでiOSも扱えるかどうかです。本比較では、GitHub Actions、GitLab CI、Bitrise、Codemagic、Appcircle、CircleCI、Azure DevOps、Capgo Buildを取り上げます。
2026年のAndroidリリースフロー
すべてのAndroidパイプラインは、ほぼ同じことをします。
- JDKとAndroid SDK をインストールします(それらが含まれるイメージを使用する場合を除く)。
- 実行
./gradlew bundleRelease. - AABをあなたの キーストアのアップロード.
- Google Play Developer API を介して、Play Console のトラック(internal、closed、open、production)にアップロードします。
- 必要に応じて、ユーザーの一部に段階的にロールアウトします。
すべてのプラットフォームが遵守すべきルール:
- 新規アプリには AAB が必須です Google Play では、Google が保持するアプリ署名キーで配信される APK に再署名を行います(Play App Signing)。
- ターゲット API レベルは毎年引き上げられます。 Google は最低要件を
targetSdkVersion毎年8月に引き上げます。Capacitor 8 はすでに API 36 をターゲットにしています。 - 16 KB ページサイズ。 新しいデバイスは 16 KB メモリページを使用しており、Play では更新アプリのネイティブライブラリがこれに対応することを求めています。詳細は Capacitor プラグインの Android 16 KB ページサイズ.
- JDK 21 は Capacitor 7 と 8 のプロジェクト、および最近の Android Gradle Plugin バージョンのベースラインです。
機能比較マトリックス
| プラットフォーム | ランナー | Keystoreの保存 | Playへのアップロード | Gradleキャッシュ | iOSにも対応 | 料金体系 |
|---|---|---|---|---|---|---|
| GitHub アクション | ホスト型Linux、セルフホスト | 暗号化されたシークレット | fastlane、Gradle Play Publisher、またはコミュニティ製アクション | gradle/actions/setup-gradle |
はい、macOSランナー | 分単位課金、Linuxが最安。パブリックリポジトリは無料 |
| GitLab CI | ホスト型 Linux、セルフマネージド | CI/CD 変数、セキュアファイル | fastlane、Google Play 連携 | cache: キー |
はい、macOS ベータ版 | ティアごとのコンピュート時間(分) |
| Bitrise | ホスト型Linuxスタック | マネージドcode署名ファイル | Google Playデプロイステップ | 組み込みキャッシュステップ | はい | ビルド1分あたりのクレジット |
| Codemagic | ホスト型Linux/Mac | 名前付きkeystore参照 | 組み込み、トラック、ロールアウト率 | 組み込み済み | はい | 分単位または年間プラン |
| Appcircle | ホスト型またはセルフホスト型サーバー | 署名IDストア | Publishモジュール | 組み込み済み | はい | プラン階層、エンタープライズ向けセルフホスト |
| CircleCI | ホスト型 Linux (cimg/android)、セルフホスト |
コンテキストと環境変数 | fastlane またはスクリプト | save_cache/restore_cache |
はい | 1 分あたりのクレジット |
| Azure DevOps | Microsoft ホスト型、セルフホスト | ファイルの保護 | Google Play 拡張タスク | Cache@2 |
はい | 並列ジョブ |
| Capgo のビルド | Capgo 管理、任意の CI から呼び出し可能 | ビルドごとに CI シークレットから送信 | 組み込み、トラッキング、ステータスフラグ | アプリごとのビルドキャッシュ | はい | ビルド時間、 料金プランを見る |
Xcode Cloudは、Appleプラットフォームのみをビルドするため、表に含まれていません。Capgo BuildはCapacitorアプリのみをビルドしますが、ここにある他のプラットフォームは、ネイティブのKotlinおよびJavaプロジェクトもビルドできます。
プラットフォーム別解説
GitHub アクション
JavaとAndroid SDK がプリインストールされたLinuxランナー上で ubuntu-latestを使用しているため、 ./gradlew bundleRelease 〜の後に動作します actions/setup-java. gradle/actions/setup-gradle Gradleのキャッシュもうまく扱えます。エミュレータテストは、次のようなコミュニティ製Actionを使ってKVM対応のLinuxランナー上で実行できます。 reactivecircus/android-emulator-runner.
署名は、Secretからkeystoreをデコードし、Gradleプロパティ経由でパスワードを渡すことです。アップロードにはfastlane、 supplyGradle Play Publisherプラグイン、またはコミュニティ製Actionを使います。何もマネージドではありませんが、隠されているものもありません。Linuxの実行時間は最も安く済みます。ガイド: GitHub Actionsによる自動 Capacitor Android build.
GitLab CI
GitLabも同じです。Android SDK が入ったDockerイメージなら、共有Linuxランナーで動作します。GitLabのMobile DevOps機能にはkeystore用のSecure Filesや、ジョブにサービスアカウントを公開できるGoogle Play連携があり、fastlane設定のボイラープレートを減らせます。ガイド: GitLabでの自動 Capacitor Android build.
Bitrise
BitriseのAndroidサポートは、Android Build、Android Sign、Google Play Deployといったステップが中心で、テストやエミュレータのステップもあります。Keystoreはアプリの code signing設定に一度アップロードするだけです。Google Play Deployステップは、トラックや段階的ロールアウト(staged rollout)の割合にも対応しています。料金はクレジット制なので、Android buildはiOSより安いものの、素のLinuxランナーよりは高くつきます。UIベースのワークフローエディタを求めるモバイルチームに向いています。
Codemagic
Codemagicはキーストアを名前付きリファレンスとして保存し codemagic.yaml それを指すため、ファイルはリポジトリやログに一切表示されません。 google_play publishingブロックでトラック、ロールアウト率、ドラフトとして提出するかどうかを設定します。ネイティブAndroid、Flutter、React Native、Ionic、およびCapacitorをビルドします。課金はビルド分あたりまたは年間固定プランです。
Appcircle
Appcircleは、署名アイデンティティモジュールにkeystoreを保存し、Google Playへの公開フローを通じてリリースします。テスターへの配布やエンタープライズアプリストアも利用可能です。セルフホスト型のAppcircle Serverオプションが、規制の厳しいチームに選ばれる主な理由です。codeやキーがネットワーク外に流出しないためです。
CircleCI
CircleCIは公開します cimg/android SDKがインストールされたDockerイメージ、およびエミュレータテストやキャッシュ用のヘルパーを含むAndroid orbを提供します。署名とアップロードはスクリプトまたはfastlaneで行います。課金はクレジット制で、Linux Dockerエグゼキューターが最も安価なリソースクラスです。CircleCIがスタックの残りをすでに実行している場合、合理的な選択肢となります。
Azure DevOps
Azure Pipelinesには、各ステップ用のファーストパーティタスクがあります: Gradle@3 ビルド用 AndroidSigning@3 署名とzipalign用、keystore用のセキュアファイル、およびトラックアップロードと段階的ロールアウト用のGoogle Play拡張機能のリリースタスク。課金は並列ジョブあたりです。App CenterのAndroidビルドを使用していたチームにとって、自然な移行先となります。
Capgo のビルド
Capgo のビルド は、CIが呼び出すCapacitorアプリ向けのビルドサービスです。ジョブは実行します bun run build と bunx cap sync androidその後に:
bunx @capgo/cli@latest build request com.example.app \
--platform android \
--build-mode release \
--android-track internal
Capgo はビルドマシン上で Gradle を実行し、あなたの keystore で署名し、最大値を読み取ります versionCode Google Play から取得し、それをインクリメントして、選択したトラックに AAB をアップロードします。 --android-release-status, --android-flavorや --submit-to-store-review 残りは制御できます。Google Play 以外の APK ビルド(キオスク端末、MDM)では、 --no-playstore-upload --output-upload 代わりにダウンロードリンクを返します。
セットアップはガイド付きです: bunx @capgo/cli@latest build init --platform android keystore を作成またはインポートし、Google サインインを通じて Google Cloud サービスアカウントと Play Console の招待をプロビジョニングできます。これは手動で最も間違いやすいステップです。
公平を期すために:Android は、Linux ランナーがどこでも安価なため、Capgo Build が最も節約できるプラットフォームではありません。Android での価値は、iOS パイプラインとの一貫性、バージョンコードの自動管理、CI における Android SDK や JDK のメンテナンス不要、そして Web 専用の変更に対する同じ CLI の配信です Live Updates 。単一のビルドは 10 分間に制限されています。
Androidの課題と各プラットフォームの対応
Keystoreの紛失
Keystoreを失うと、アプリを二度と更新できなくなることを意味していました。Play App Signingでは、保持しているKeystoreはアップロードキーのみであり、Play Consoleのサポートに新しいアップロードキーの登録を依頼できます。それでも、オフラインバックアップは取っておくべきです。上記のすべてのプラットフォームはKeystoreを暗号化して保存しますが、リスクは通常、開発者のラップトップにあるコピーです。新しいものが必要な場合は、 Android keystore ジェネレーター がブラウザで生成します。
バージョン code の競合
Playは、 versionCode がすでに使用されているアップロードを拒否します。選択肢: CI実行番号から導出 (GitHub、GitLab、CircleCI)、プラットフォームのビルド番号変数を使用 (Bitrise、Codemagic、Appcircle)、または Capgo Build にPlayから最新値を読み取って増分させる。
Gradle ビルドが遅い
コールド Capacitor Androidビルドでは、数百MBの依存関係がダウンロードされます。 ~/.gradle/caches と ~/.gradle/wrapper のキャッシュにより、繰り返しビルドが大幅に高速化されます。Gradleに十分なメモリを割り当ててください。 gradle.properties (org.gradle.jvmargs=-Xmx4g) をホスト型ランナー上で実行し、iOS と Android を直列ではなく並列ジョブでビルドします。
プラグインと AGP のアップグレード
新しい Android Gradle Plugin のバージョンは、古いプラグインを壊すことがあります。プロジェクト内で AGP を固定し、ブランチ上でアップグレードしてください。具体的な修正方法は AGP 9 で Capacitor プラグインのビルドエラーを修正 と Capacitor における Android ビルドエラーの解決方法.
Play サービスアカウントの権限
「The caller does not have permission」は最も一般的なアップロードエラーです。サービスアカウントには、Play Console の「ユーザーと権限」でアプリのリリース権限を付与して招待する必要があります。また、その Google Cloud プロジェクトで Google Play Android Developer API が有効化されている必要があります。新しいサービスアカウントが API によって受け入れられるまでには、時間がかかる場合があります。
選び方
| あなたの状況 | 適したユースケース |
|---|---|
| Android のみ、すでに GitHub または GitLab を使用中 | GitHub Actions または GitLab CI |
| ビジュアルなワークフローエディタを求めているネイティブ Android チーム | Bitrise |
| YAML でマネージドキーストアと Play 公開を求めているクロスプラットフォームチーム | Codemagic |
| すべてセルフホストする必要がある | Appcircle Server またはセルフホストランナー |
| App Center や Microsoft スタックからの移行 | Azure DevOps |
| Capacitor アプリで、任意の CI から Android と iOS を一つの CLI で扱いたい | Capgo のビルド |
同じ判断の iOS 側については、こちらを参照してください iOSアプリ向けCI/CDプラットフォーム比較。特にCapacitorアプリ(ライブアップデートを含む)については、こちらを参照してください Capacitor アプリ向け CI/CD プラットフォームの比較.
移行前のクイックチェックリスト
- アップロード用keystoreファイルと両方のパスワードが揃っていること、およびエイリアスが一致していることを確認してください。
- Play Consoleでアップロードキーとして登録されている証明書を確認し、そのSHA-1を以下と比較してください
keytool -list -v -keystore release.jks. - 個人用アカウントを再利用するのではなく、新しいCI用に専用のサービスアカウントを作成してください。
- Capacitor 8プロジェクトでは、新しいプラットフォームがJDK 21でビルドされることを確認してください。
- 本番リリースに切り替える前に、まず内部トラックへのアップロードを1回実行してください。