LoginSignup
6
6

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-08-18

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で用途がありそうですね。

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6