15

所以我尝试使用gradle创建一个单独的buildType,但是那个buildType需要对同一个Activity使用不同的特性。在这种情况下,我的启动活动需要一个不同的意图过滤器,具体取决于 buildType。这可能吗?

我在gradle中收到以下错误:

:Tinder:processUtestManifest
[AndroidManifest.xml:67, AndroidManifest.xml:38] Trying to merge incompatible /manifest/application/activity[@name=com.<company_name>.activities.ActivitySplash] element:
  <activity
      @android:name="com.<company_name>.activities.ActivitySplash"
      <intent-filter>
          <action
--            @android:name="android.intent.action.MAIN">
  <activity
      @android:name="com.<company_name>.activities.ActivitySplash"
      <intent-filter>
          <action
++            @android:name="com.apphance.android.LAUNCH">
4

3 回答 3

11

目前无法单独合并意图过滤器,因此我建议将整个<activity>节点复制到

src/buildtype1/AndroidManifest.xml

src/buildtype2/AndroidManifest.xml

它会自动合并到最终清单中(当然您也希望将其从主清单中删除)。

于 2013-09-12T18:35:19.347 回答
5

让我发布一个完整的解决方案。在这种情况下,应用程序管理图像和视频的意图过滤器。但是,对于特定的风味,我们只想捕获视频,而不是图像。

假设您的活动定义如下:

<activity
    android:name=".MainActivity"
    android:configChanges="keyboardHidden|orientation|screenSize"
    android:label="@string/app_name"
    android:launchMode="singleTop"
    android:screenOrientation="landscape"
    android:theme="@style/CameraTheme">

    <intent-filter>
        <action android:name="android.media.action.IMAGE_CAPTURE"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>

    <intent-filter>
        <action android:name="android.media.action.VIDEO_CAPTURE"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</activity>

对于名为myFlavor的风味,我假设您已经拥有,您必须在AndroidManifest.xml文件中包含以下内容:

<!-- Remove the intent filter for images. MyFlavor is only for videos. -->
<activity
    android:name="com.androidsx.heliumvideochanger.MainActivity"
    tools:node="merge">

    <intent-filter tools:node="remove">
        <action android:name="android.media.action.IMAGE_CAPTURE"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</activity>

与 Gradle 同步,并检查最终清单,通常在myApp/build/intermediates/manifests/full/myFlavor/debug/AndroidManifest.xml

于 2015-03-26T19:03:10.280 回答
4

将消费 app/lib 中的 AndroidManifest 更改为:

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
...
<activity android:name="com.<company_name>.activities.ActivitySplash">

至:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
...
<activity android:name="com.<company_name>.activities.ActivitySplash"
    tools:merge="override">
于 2014-02-25T07:17:26.020 回答