Android gradle 两种不同产品风格的两种不同启动器活动
Android gradle two different launcher activities for two different product flavors
这是我的案例
productFlavors {
paid {
applicationId "com.paid.app"
}
free {
applicationId "com.free.app"
}
}
并且在 paid
风格中,与 main
或 free
相比,我需要一个不同的启动器 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
<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>
当我开始在 paid
构建变体中安装应用程序时,它总是安装两个应用程序,即免费和付费,但应用程序名称相同。当我卸载任何一个时,这两个应用程序都会被卸载。不应该只有 paid
变体构建付费应用而 free
变体构建免费应用吗?以下是我的工作环境
dependencies {
classpath 'com.android.tools.build:gradle:1.3.0'
}
Android Studio 1.4 beta 2
您没有安装 2 个应用程序。
在您的清单中使用付费风格,您将 2 个 Activity 与 LAUNCHER 类别合并。
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
这样您将有 2 个图标来启动您的应用程序。一个用于 MainActivity
,一个用于 SecondActivity
。
如果您想为每种口味使用不同的 Activity,则必须在每种口味中使用相同的 Activity。
app/src/free/java/..../MainActivity
app/src/paid/java/..../MainActivity
实际上你可以做到这一点,有 2 个清单文件而不复制 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>
意味着在清单合并付费风味时,您从 main 中删除定义启动器 activity 的 intent-filter,并将其添加到 SecondMainActivity。
这是我的案例
productFlavors {
paid {
applicationId "com.paid.app"
}
free {
applicationId "com.free.app"
}
}
并且在 paid
风格中,与 main
或 free
相比,我需要一个不同的启动器 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
<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>
当我开始在 paid
构建变体中安装应用程序时,它总是安装两个应用程序,即免费和付费,但应用程序名称相同。当我卸载任何一个时,这两个应用程序都会被卸载。不应该只有 paid
变体构建付费应用而 free
变体构建免费应用吗?以下是我的工作环境
dependencies {
classpath 'com.android.tools.build:gradle:1.3.0'
}
Android Studio 1.4 beta 2
您没有安装 2 个应用程序。
在您的清单中使用付费风格,您将 2 个 Activity 与 LAUNCHER 类别合并。
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
这样您将有 2 个图标来启动您的应用程序。一个用于 MainActivity
,一个用于 SecondActivity
。
如果您想为每种口味使用不同的 Activity,则必须在每种口味中使用相同的 Activity。
app/src/free/java/..../MainActivity
app/src/paid/java/..../MainActivity
实际上你可以做到这一点,有 2 个清单文件而不复制 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>
意味着在清单合并付费风味时,您从 main 中删除定义启动器 activity 的 intent-filter,并将其添加到 SecondMainActivity。