How to use a different launcher activity in a product flavor? How to use a different launcher activity in a product flavor? android android

How to use a different launcher activity in a product flavor?


What I have tried:

  1. Enabling Manifest Merger, which doesn't work;
  2. Using activity-alias, which doesn't work either.

Finally I found out that the problem could be solved by just adding one line:

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

==================================================

To make it clear, I'll go through the problem and solution one more time:

Under src/main/java there is a MainActivity, and in corresponding src/main/AndroidManifest.xml it specifies MainActivity as the launcher activity:

<activity android:name=".MainActivity"    android:label="@string/app_name" >    <intent-filter>        <action android:name="android.intent.action.MAIN" />        <category android:name="android.intent.category.LAUNCHER" />    </intent-filter></activity>

That is a very easy part. Now we start with the product flavor part.

Due to some reason, in a product flavor, I don't want to overwrite the MainActivity, instead, I have a YetAnotherMainActivity. The goal is to set the YetAnotherMainActivity as the new launcher activity in the product flavor, and it should still be able to call MainActivity.

And here, is how you can set the new activity in product flavor as the new launcher activity:

flavorX/AndroidManifest.xml:

<activity android:name="com.example.YetAnotherMainActivity"    android:label="@string/title_yet_another_main_activity">    <intent-filter>        <action android:name="android.intent.action.MAIN" />        <category android:name="android.intent.category.LAUNCHER" />        <category android:name="android.intent.category.DEFAULT" />    </intent-filter></activity>

Yep, it turns out deadly easy. Just add android.intent.category.DEFAULT.


I think that <activity-alias> fits there more than any other solution (have no idea why @JingLi couldn't get it working. Maybe there were some troubles year ago, but for now it's okay).

For example, we have the following manifest in main:

<manifest        xmlns:android="http://schemas.android.com/apk/res/android"        package="com.example.application">    <application>        <activity android:name=".InfoActivity"/>        <activity-alias             android:name="com.example.application.Launcher"            android:targetActivity=".InfoActivity">            <intent-filter>                <action android:name="android.intent.action.MAIN"/>                <category android:name="android.intent.category.LAUNCHER"/>            </intent-filter>        </activity-alias>    </application></manifest>

And we want to replace launcher activity with DebugInfoActivity from debug flavor. So, we need to just replace the targetActivity attribute in the specified <activity-alias> tag:

<manifest         xmlns:android="http://schemas.android.com/apk/res/android"        xmlns:tools="http://schemas.android.com/tools">    <application>        <activity android:name=".DebugInfoActivity"/>        <!-- to not litter the manifest -->        <activity                 android:name="com.example.application.InfoActivity"                tools:node="remove"/>        <activity-alias                android:name="com.example.application.Launcher"                android:targetActivity=".DebugInfoActivity"                tools:replace="android:targetActivity"/>    </application></manifest>

Notes:

  • In the example we use the same package name for main and debug.
  • We have to enter the full name for activity-alias, so the merger can merge their correctly.

With the solution we also can inherit all attributes and childs from main activity-alias to not duplicate their in debug.


I guess I am not late :)So today I got the same problem. @seroperson solution was correct but If you do not want the default launcher activity at all then just use the below code in your flavor's manifest:

<activity        android:name=".DefaultLauncherActivity"        tools:node="remove"        >