I'm working on an Android library project, in the default src/main/AndroidManifest.xml, the MainActivity is the launcher activity.
For the sake of something else, I created product flavors. Yes, it works perfect if I want to trigger / show different activitis inside different product flavors. However, I wanna keep the default launcher activity from src/main/ folder, while register another flavored activity as the new launcher activity. So that for different product flavors, I could have different launcher activities, and from them I could still start original "launcher" activity in src/main/.
Could anyone kindly tell me how to achive that? Thanks a lot.
Notes:
Adding if (BuildConfig.FLAVOR.equals("flavorName"))
code to original launcher activity is not prefered. Because I don't want to modify the production code from someone else (this is a library project).
I've tried manifestmerger
and tools:replace
, but seems like it doesn't work for intent-filter
(I noticed that the element merging policy for intent-filter is always).
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
If this may work, could you please kindly guide me how to make it work? Thanks.
What I have tried:
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
.