awacleberryの備忘録

アナログ人間のデジタル日記。

【Android】ProductFlaver で起動アクティビティーを代えるに際しやったこと

やりたいこと

2つの productFlavor で起動アクティビティーを代える。

  • first -> FirstMainActivity
  • second -> SecondMainActivity

なお、first のマニュフェストにおいて LAUNCHER は指定済みの状況下で、second で別のアクティビティーを起動させたい。そのまま second のマニュフェストに SecondMainActivity を LAUNCHER 指定しても、2つ起動してしまう(アイコンが2つできる等)。

失敗した方法

オーバーライドさせたい方のマニュフェストに、

<category android:name="android.intent.category.DEFAULT" />

を入れれば良いみたいな話が stackoverflow にあったけど、うまくいかなかった(以下のリンク)。

https://stackoverflow.com/questions/32320585/how-to-use-a-different-launcher-activity-in-a-product-flavor

エイリアスを作って対応する方法もあるみたいだけど、あんまりシンプルじゃない気がする。

成功した対応

要は、LAUNCHER の指定をしているアクティビティーは1つにしたいので、オーバーライドさせたいマニュフェストでメインの LAUNCHER の指定を削除すればよい。

 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     package="com.yourpackage">
         <activity
              android:name=".FirstMainActivity"
              android:label="@string/app_name">
                  <intent-filter tools:node="remove">
                        <action android:name="android.intent.action.MAIN" />
                        <category android:name="android.intent.category.LAUNCHER"/>
                  </intent-filter>
         </activity>
         <activity
              android:name=".SecondMainActivity"
              android:label="@string/app_name">
                  <intent-filter>
                      <action android:name="android.intent.action.MAIN" />
                      <category android:name="android.intent.category.LAUNCHER" />
                  </intent-filter>
        </activity>

</manifest>

インテントフィルターで tools:node="remove" をしている。ベストプラクティスかは不明。以下の stackoverflow を参考にした。

https://stackoverflow.com/questions/32324213/android-gradle-two-different-launcher-activities-for-two-different-product-flavo