【问题标题】:Android gradle two different launcher activities for two different product flavorsAndroid 为两种不同的产品风格 gradle 两种不同的启动器活动
【发布时间】:2015-11-26 06:04:54
【问题描述】:

这是我的情况

productFlavors {
    paid {
        applicationId "com.paid.app"
    }
    free {
        applicationId "com.free.app"
    }
}

paid 风格中,与mainfree 相比,我需要不同的启动器活动,如下所示

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

【问题讨论】:

    标签: android gradle build.gradle


    【解决方案1】:

    实际上,您可以这样做,只需拥有 2 个清单文件且无需复制活动:

    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>
    

    付费/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 中删除定义启动器活动的意图过滤器并将其添加到 SecondMainActivity。

    【讨论】:

      【解决方案2】:

      您没有安装 2 个应用程序。

      使用 Manifest 中的付费风格,您会将 2 个活动与 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
      

      【讨论】:

      • 感谢您的信息。我知道在不同口味上制作相同的Activity 以制作两个不同的应用程序。我很好奇是否可以使用两个不同的默认或启动器活动来完成相同的操作。
      • @laaptu 如果您想要不同的默认或启动器活动,方法是相同的。在 flavor 文件夹中定义相同的类(不在 main 中)
      • 我已经完成了第二种方法,但得到“找到重复的类”错误。所以不确定它应该如何工作。
      • @Doomsknight 可能是您正在获得“重复的类”,因为您在风味和主文件夹中使用相同的类。你做不到。
      • 谢谢,这就是原因。只是想弄清楚如何将一个类用于两种口味,而另一种则用于另外两种。 :) 无需创建副本。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-29
      • 1970-01-01
      • 1970-01-01
      • 2016-07-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多