1 前提条件
AndroidStudio 1.3
productFlavor、buildTypeの設定は完了していて、以下のflavorがあるものとする
develop
staging
producFlavorの設定の仕方は以下を参照。
AndroidStudio1.3でproductFlavor (外部参照jarまで差し替えるよ)
http://qiita.com/le_skamba/items/af290f53f6d5ac0a2603
2 最終目標
あるproductFlavor/buildTypeにだけ、Activityを追加する
(当然、該当のBuildVarientにだけそのActivityを呼び出すコードがある)
3 Activityを追加したいflavorのパッケージ下に追加する
例えば、flavor「staging」の「flavortest.jp.sampleflavor.gui」に「SubActivity」を追加する場合。
(1) BuildVarientsをstagingのものにする
(2) プロジェクトエクスプローラの「flavortest.jp.sampleflavor.gui」を右クリック
(3) 「New」-「Activity」-「Blank Activity」(勿論作りたいActivityに合わせた物を選んで良い)をクリック
(4) Activity名やレイアウトファイル名など任意に記入し、パッケージ名を確認してFinishをクリック
(5) Manifestfileを確認する
上記手順で、manifests/下に、AndroidManifest.xml(stating)というのが増えているので開くと、以下のようにActivityだけ記述されている。
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application>
<activity android:name="flavortest.jp.sampleflavor.gui.SubActivity"
android:label="@string/title_activity_sub"
>
</activity>
</application>
</manifest>
実際のファイルは、app/src/staging/下に存在する。
手動でActivityを追加したのであれば、app/src/staging直下にmanifestファイルを作ってやって、追加したいActivityだけ書いておけば良い。
ちなみに、AndroidManifest.xml(stating)を開くと、strings.xmlの参照などでCannot resolve symbol
とエラー表示されている場合があるが、ビルドは通って実行も問題なく出来るので気にしなくて良い模様。
※ちなみに、Acticity名を以下のように相対パスで書くと、package名がdefaultConfigと異なる場合にActivity Not Foundになるので、絶対パスで書く必要がある模様。
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application>
<activity android:name=".gui.SubActivity" // <--相対で書いたらNG
android:label="@string/title_activity_sub"
>
</activity>
</application>
</manifest>
おそらくパッケージ名の置換がビルド時にうまく行われないようだ。
(main/Manifestfile.xmlは相対パスで書いても大丈夫なのにね)
4 Activity呼び出しコードを書く
サンプル。staging/MainActivityに以下のように書いた。
Intent intent = new Intent(getApplicationContext(), SubActivity.class);
startActivity(intent);
同じコードをMainActivity(develop)に書くと、SubActivityがないよとコンパイルエラーが出る。developには作成していないので、正しい。
release/debugにだけ追加したい場合も、同様の手順でOK。
デバッグ時だけ出すデバッグ情報用の画面とか、レイアウトやアイコンの確認用の画面とか、デバッグしたいメニューの階層が深いのでいきなりそこに飛べるテスト用画面とか、特にdebugで用途がありそうですね。