Gradle: How to merge Android manifest files for different buildTypes which need the same Activity, but with different intent-filters

后端 未结 3 1269
野趣味
野趣味 2020-12-05 05:47

so I\'m trying to use gradle to create a separate buildType, but that buildType needs to use different characteristics for the same Activity. In this case, my splash activit

相关标签:
3条回答
  • 2020-12-05 06:04

    Change the AndroidManifest in the consuming app/lib from:

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

    To:

    <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">
    
    0 讨论(0)
  • 2020-12-05 06:15

    Let me post a full solution that works. In this case, the application manages intent filters for both images and videos. However, for a particular flavor, we only want to capture videos, not images.

    Say your activity is defined like this:

    <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>
    

    For your flavor named myFlavor, that I assume you already have, you have to have this in your AndroidManifest.xml file:

    <!-- 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>
    

    Sync with Gradle, and check the final manifest, that is usually in myApp/build/intermediates/manifests/full/myFlavor/debug/AndroidManifest.xml

    0 讨论(0)
  • 2020-12-05 06:16

    It's not possible to merge the intent-filter separately at the moment so I would recommend copying the whole <activity> node into

    src/buildtype1/AndroidManifest.xml
    

    and

    src/buildtype2/AndroidManifest.xml
    

    and it'll get merged automatically into the final manifest (of course you also want to remove it from the main manifest).

    0 讨论(0)
提交回复
热议问题