Edited at

特定のproductFlavor/buildTypeにだけActivityを追加する

More than 3 years have passed since last update.


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だけ記述されている。


AndroidManifest.xml(stating)

<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になるので、絶対パスで書く必要がある模様。


相対パスはActivityNotFoundになる

<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に以下のように書いた。


MainActivity(staging)

Intent intent = new Intent(getApplicationContext(), SubActivity.class);

startActivity(intent);

同じコードをMainActivity(develop)に書くと、SubActivityがないよとコンパイルエラーが出る。developには作成していないので、正しい。

release/debugにだけ追加したい場合も、同様の手順でOK。

デバッグ時だけ出すデバッグ情報用の画面とか、レイアウトやアイコンの確認用の画面とか、デバッグしたいメニューの階層が深いのでいきなりそこに飛べるテスト用画面とか、特にdebugで用途がありそうですね。