はじめに
Firebase App Distributionを使って、テスター向けにAPKファイル(Androidアプリ)を配布してみます。
- Android Studio
- Firebase App Distribution
Androidアプリの配布
test-apk-hello
アプリの作成
New Project
> Basic Views Activity
パッケージ名: com.example.test_apk_hello
Firebase プロジェクトの追加
- Firebase のコンソールを開く
- プロジェクトを追加する
プロジェクト名:test-apk-hello
アプリの追加と設定
Android
アイコンをクリックし、アプリにFirebase(SDK)を追加する
-
アプリを登録
する
パッケージ名:com.example.test_apk_hello
-
構成ファイルをダウンロードして追加する
ダウンロードファイル:google-services.json
追加先: モジュール(アプリレベル)のルート ディレクトリ(app
) - Firebase SDKを追加する
ルートレベル(プロジェクト レベル)の Gradle ファイル
→[project]/build.gradle.kts
モジュール(アプリレベル)の Gradle ファイル
→[project]/[app-module]/build.gradle.kts
- Android プロジェクトと Gradle ファイルを同期する
{
"project_info": {
"project_number": "123456789012",
"project_id": "test-apk-hello",
"storage_bucket": "test-apk-hello.firebasestorage.app"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:123456789012:android:ffffffffffffffffffffff",
"android_client_info": {
"package_name": "com.example.test_apk_hello"
}
},
"oauth_client": [],
"api_key": [
{
"current_key": "CurRneTkey123currentKEY321CURrntKeY333"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": []
}
}
}
],
"configuration_version": "1"
}
plugins {
// ...
// Add the dependency for the Google services Gradle plugin
id("com.google.gms.google-services") version "4.4.3" apply false
}
plugins {
id("com.android.application")
// Add the Google services Gradle plugin
id("com.google.gms.google-services")
...
}
dependencies {
// Import the Firebase BoM
implementation(platform("com.google.firebase:firebase-bom:34.0.0"))
// TODO: Add the dependencies for Firebase products you want to use
// When using the BoM, don't specify versions in Firebase dependencies
implementation("com.google.firebase:firebase-analytics")
// Add the dependencies for any other desired Firebase products
// https://firebase.google.com/docs/android/setup#available-libraries
}
アプリ名とバージョン名
アプリ名は、リソースのstrings.xml
ファイルに記述されています。
<resources>
<string name="app_name">TestAPK Hello</string>
バージョン名とバージョンコードは、ルートレベル(プロジェクト レベル)の Gradle ファイル ([project]/build.gradle.kts
)に記述されています。
versionCode = 1
versionName = "1.0"
配布する際は、その都度、バージョンコード(versionCode
)を変更します。
ビルド - APKファイルの生成
Androidアプリをビルドし、APKファイル(app-debug.apk
)を生成します。
- メニュー >
Build
>Generate App Bundles or APKs
>Generate APKs
[project]/app/build/outputs/apk/debug/app-debug.apk
配布の開始
- 左のメニューから、
実行
>App Distribution
を選択する -
開始
をクリックする - グループ追加:
Join
- 招待リンクを作成: https://appdistribution.firebase.dev/i/3163df5d52d9ca08
- 招待リンクからユーザー登録する(電子メールアドレス)
配布 - ファイルのアップロード
- 左のメニューから、
実行
>App Distribution
を選択する -
リリース
で、APKファイルをアップロードする - グループを追加する:
Join
- リリース内容を記入する
-
n人のテスターに配布
ボタンで配布する
アプリのインストール(テスター側)
- テスターが電子メールを受け取る
- 受け取ったメール本文のリンクを開く
-
app-tester.apk
をダウンロードし、インストールする(App Testerアプリ) -
TestAPK Hello
をインストールし、開く
バージョンアップ - ファイルのアップロード
- 左のメニューから、
実行
>App Distribution
を選択する -
リリース
で、APKファイルをアップロードする - グループを追加する:
Join
- リリース内容を記入する
-
n人のテスターに配布
ボタンで配布する
アプリのバージョンアップ(テスター側)
- テスターが電子メールを受け取る
- 受け取ったメール本文のリンクを開く
- App Testerアプリが開くので、アプリを更新する
まとめ
Firebase App Distributionを使って、テスター向けにAPKファイル(Androidアプリ)を配布しました。
おまけ
Github Actions で、ビルドから配布まで可能です。
実装例: android-release.yml
name: Android Release
on:
push:
tags:
- "*"
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Get repository name
id: repository
run: echo "name=${GITHUB_REPOSITORY#${GITHUB_REPOSITORY_OWNER}/}" >> $GITHUB_OUTPUT
- name: Set up Java 17 (Temurin)
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '17'
- name: Decode keystore from secret
run: |
echo "${{ secrets.SIGNING_KEY }}" | base64 -d > release.jks
- name: Decode Firebase credentials
run: |
echo "${{ secrets.FIREBASE_CREDENTIALS }}" | base64 -d > firebase.json
- name: Make gradlew executable
run: chmod +x ./gradlew
- name: Build APK (Release)
run: ./gradlew assembleRelease appDistributionUploadRelease --stacktrace
env:
KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
STORE_PASSWORD: ${{ secrets.STORE_PASSWORD }}
STORE_FILE: ${{ github.workspace }}/release.jks
GOOGLE_APPLICATION_CREDENTIALS: ${{ github.workspace }}/firebase.json
FIREBASE_RELEASE_NOTES: これはリリースノートです。
FIREBASE_GROUPS : Join
- name: Locate and rename generated APK
id: find_apk
run: |
APK_PATH=$(find ${{ github.workspace }}/app -name "*.apk" | head -n 1)
NEW_APK_PATH=${{ github.workspace }}/${{ steps.repository.outputs.name }}.${{ github.ref_name }}.apk
cp "$APK_PATH" "$NEW_APK_PATH"
echo "APK found at: $APK_PATH"
echo "New APK path: $NEW_APK_PATH"
echo "release_apk_path=$NEW_APK_PATH" >> $GITHUB_OUTPUT
# Ensure workflow permissions: Settings > Actions > General > Workflow permissions: Read and write
- name: Upload APK to GitHub Release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ github.ref }}
name: APK ${{ github.ref_name }}
files: ${{ steps.find_apk.outputs.release_apk_path }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Set up GitHub CLI
run: sudo apt-get install gh -y
- name: Create tag and release on external repository
env:
GH_TOKEN: ${{ secrets.PAT_FOR_TEST_APK_HELLO_REL }}
TAG_NAME: ${{ github.ref_name }}
APK_PATH: ${{ steps.find_apk.outputs.release_apk_path }}
GH_OWNER: <GitHubのオーナー名>
GH_REPO: <GitHubのリポジトリ名>
run: |
gh api \
-X POST \
-H "Accept: application/vnd.github+json" \
/repos/$GH_OWNER/$GH_REPO/git/refs \
-f ref="refs/tags/$TAG_NAME" \
-f sha="$(gh api /repos/$GH_OWNER/$GH_REPO/commits/main --jq .sha)"
gh release create "$TAG_NAME" \
--repo $GH_OWNER/$GH_REPO \
--title "APK $TAG_NAME" \
--notes "外部にリリースしました。" \
"$APK_PATH"
GitHubのSecretsに保存するキー
キー | 内容 | 備考 |
---|---|---|
【アプリ署名】 | ||
SIGNING_KEY | キーストア(.jks) | base64化 |
STORE_PASSWORD | キーストアのパスワード | |
KEY_ALIAS | 鍵を識別する名前 | |
KEY_PASSWORD | 鍵のパスワード | |
【App Distribution】 | ||
FIREBASE_CREDENTIALS | Google サービスアカウントの秘密鍵 | base64化 |
Google サービスアカウントの秘密鍵 - FIREBASE_CREDENTIALS
- Firebase コンソール → 歯車 → プロジェクトの設定 → サービスアカウント
- 「新しい秘密鍵の生成」で JSON をダウンロード
ファイル名:test-apk-hello-firebase-adminsdk-fbsvc-ee4fe2b8a1.json
- Base64 化して GitHub Secrets
FIREBASE_CREDENTIALS
に保存
base64 -w 0 test-apk-hello-firebase-adminsdk-fbsvc-ee4fe2b8a1.json > test-apk-hello-firebase-adminsdk-fbsvc-ee4fe2b8a1.json.base64.txt