Android gradle two different launcher activities f

2020-02-09 09:26发布

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

2条回答
Fickle 薄情
2楼-- · 2020-02-09 09:47

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.

查看更多
Bombasti
3楼-- · 2020-02-09 09:49

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
查看更多
登录 后发表回答