Reputation: 2973
This is my case
productFlavors {
paid {
applicationId "com.paid.app"
}
free {
applicationId "com.free.app"
}
}
and in paid
flavor I need a different launcher activity in comparison to main
or free
as done below
main/AndroidManifest.xml
<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>
paid/AndroidManifest.xml
<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>
And when I begin to install app in paid
build variants, it always install two apps i.e. free and paid but with same app name. And when I uninstall any one , both the app gets uninstalled. Shouldn't only paid
variant build a paid app and free
variant build a free app? Following is my working environment
dependencies {
classpath 'com.android.tools.build:gradle:1.3.0'
}
Android Studio 1.4 beta 2
Upvotes: 18
Views: 8733
Reputation: 1368
Actually you can do that, with having 2 manifest files and without duplicating the activity:
main/AndroidManifest.xml:
<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>
paid/AndroidManifest.xml:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.yourpackage">
<activity
android:name=".MainActivity"
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>
meaning that at manifest merge for paid flavor you remove the intent-filter that defines the launcher activity from main and add it to SecondMainActivity.
Upvotes: 30
Reputation: 364556
You are not installing 2 apps.
Using the paid flavor in your Manifest you will merge 2 Activities with the LAUNCHER category.
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
In this way you will have 2 icons to launch your app. One for the MainActivity
,one for the SecondActivity
.
If you want a different Activity for each flavor,you have to use the same Activity in each flavor.
app/src/free/java/..../MainActivity
app/src/paid/java/..../MainActivity
Upvotes: 8