メモ > 技術 > IDE: AndroidStudio > 製品用、開発用などの切り分け
製品用、開発用などの切り分け
パッケージ名が同じアプリは上書きインストールされる。
つまり、GooglePlayからインストールした本番アプリがあると、その端末には開発版をインストールできない。
が、フレーバーを使用することによりこの問題を解消できる。
flavorDimensionsによるflavorの指定方法 - Qiita
https://qiita.com/boohbah/items/389b159a1693247b15de
Android StudioでFlavor・BuildTypeを分岐させてアプリビルドする詳細手順 | PisukeCode - Web開発まとめ
https://pisuke-code.com/android-studio-build-variants/
開発環境・検収環境・本番環境での処理の分岐も、この仕組みで対応できそう。
■前提
productFlavors
production ... 製品用
develop ... 開発用
buildTypes
release ... リリース用
debug ... デバッグ用
と設定するものとする。
■プロジェクトの作成
新規 Android Studio プロジェクトの開始。
↓
新規プロジェクトの作成
アプリケーション名: Build Test1
会社ドメイン: refirio.net
プロジェクトの場所: C:\Users\refirio\AndroidStudioProjects\BuildTest1 (アプリケーション名をもとに自動入力される。)
パッケージ名: net.refirio.buildtest1 (アプリケーション名と会社ドメインをもとに自動入力される。)
Kitlinサポートを含める: チェックする
「次へ」をクリック。
↓
ターゲットAndroidデバイス
「API 19: Android 4.4 (KitKat)」にして「次へ」をクリック。
↓
Mobile にアクティビティを追加する
「空のアクティビティ」が選択されているので、そのまま「次へ」をクリック。
↓
アクティビティの設定
特に変更せず「完了」をクリック。
エミュレータと実機で、アプリを起動できるかテストする。
■Flavorの設定
app の build.gradle の
buildTypes {
の上(下ではない)に以下のコードを追加。
flavorDimensions "mode"
productFlavors {
production {
}
develop {
applicationIdSuffix ".dev"
}
}
さらに
buildTypes {
の中に以下のコードを追加。
(デバッグ版書き出し時に「.debug」を付けたくないなら、省略しても良さそう。要検証。)
debug {
applicationIdSuffix ".debug"
}
さらに manifestPlaceholders を追加。
(デバッグ版とリリース版で別のアプリ名を表示する準備。)
android {
compileSdkVersion XX
defaultConfig {
〜 略 〜
manifestPlaceholders = [appName:"@string/app_name"]
}
〜 略 〜
productFlavors {
〜 略 〜
develop {
〜 略 〜
manifestPlaceholders = [appName:"@string/app_name_dev"]
}
}
}
app\src\main\AndroidManifest.xml のアプリ名を調整。
(デバッグ版とリリース版で別のアプリ名を表示する準備。)
android:label="@string/app_name"
↓
android:label="${appName}"
app\src\main\res\values\strings.xml で開発版のアプリ名を追加。
(デバッグ版とリリース版で別のアプリ名を定義。)
<string name="app_name">Build Test1</string>
<string name="app_name_dev">Build Test1 Dev</string> … 追加。
■ビルドの切り替え
画面左端の「ビルド・バリアント」をクリックすると、その中の「ビルド・バリアント」部分でビルドを切り替えられる。
「developDebug」と「productionDebug」を切り替えると、名前の違うアプリをそれぞれインストールできる。
「developRelease」と「productionRelease」は何故かエラーになって実行できない。
プロジェクト作成直後も「debug」と「release」から選択できるが、この「release」も実行できない。
リリース版は署名の登録が必要…などがあるみたい。
要勉強。
Android Studio : debugビルドとReleaseビルドの切替、releaseビルドの追加方法、署名付きapk作成方法 - 生活を良くします-怠惰なプログラミング
https://www.what-a-day.net/entry/2016/12/11/001948
■ビルド設定によるプログラムの分岐
設定が完了した上で実行すると、以下にプログラムが自動作成される。
app\build\generated\source\buildConfig\production\debug\net\refirio\buildtest1\BuildConfig.java
この内容を利用して、以下のように分岐する。
if (BuildConfig.DEBUG) {
Log.d("TEST", "DEBUG")
} else {
Log.d("TEST", "RELEASE")
}
if ("develop".equals(BuildConfig.FLAVOR)) {
Log.d("TEST", "develop")
} else {
Log.d("TEST", "production")
}
■プッシュ通知を使用する場合
※未検証
環境ごとに google-services.json を取得して配置する必要があるらしい。
Firebaseプロジェクト自体を分ける方法と、分けない方法があるらしい。
Firebaseプロジェクトを開発環境用と本番環境用にシンプルに分ける方法 #Android - Qiita
https://qiita.com/hinom77/items/9cd6818210a52f86a6a3
複数のプロジェクトを構成する | Firebase
https://firebase.google.com/docs/projects/multiprojects?hl=ja
ChatGPT曰く、Firebaseプロジェクト自体を分ける方がいいらしい。
誤送信が一番怖いので、確かにその方がいいかもしれない。
↓
どちらの方法も可能ですが、一般的には Firebaseプロジェクトを複数作成するのが推奨されます。
? Firebaseプロジェクトを環境ごとに分ける(推奨) → google-services.json を環境ごとに用意する
メリット
・Firebaseのデータが環境ごとに完全に分離される
・本番環境と開発環境を明確に区別できる
・誤送信を防ぎやすい(開発用通知を本番ユーザーに誤って送ることがない)
デメリット
・Firebaseプロジェクトを複数作成する手間がかかる
・管理が増える(プロジェクトごとに設定を変更する必要がある)
? 1つのFirebaseプロジェクトで複数のアプリIDを管理する → 各アプリのgoogle-services.jsonを個別に取得し、環境ごとに適用する
メリット
・Firebaseプロジェクトを1つに統合できるため、管理が楽
・データを統合管理しやすい
デメリット
・本番・開発でデータが混ざる可能性がある(誤送信のリスクがある)
・プッシュ通知の送信先を区別するため、デバイストークンに環境情報を付与する必要がある
■その他参考になりそうなページ
アプリケーション ID の設定 | Android Developers
https://developer.android.com/studio/build/application-id?hl=ja
https://developer.android.com/studio/build/application-id?hl=ja#%E3%83%93%E3%83%AB%E3%83%89_%E3%83%9...