Gradle:如何为需要相同Activity但具有不同intent-filters的不同buildType合并Android清单文件

Kar*_*ela 15 action build intentfilter gradle android-manifest

所以我试图使用gradle来创建一个单独的buildType,但是buildType需要为同一个Activity使用不同的特性.在这种情况下,我的splash活动需要一个不同的intent-filter,具体取决于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">
Run Code Online (Sandbox Code Playgroud)

Xav*_*het 11

目前无法单独合并intent-filter,因此我建议将整个<activity>节点复制到

src/buildtype1/AndroidManifest.xml
Run Code Online (Sandbox Code Playgroud)

src/buildtype2/AndroidManifest.xml
Run Code Online (Sandbox Code Playgroud)

它会自动合并到最终的清单中(当然你也想从主清单中删除它).


esp*_*chi 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>
Run Code Online (Sandbox Code Playgroud)

对于你的名为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>
Run Code Online (Sandbox Code Playgroud)

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