Memo

メモ > 技術 > 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...

Advertisement