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 activity needs a different intent-filter depending on buildType. Is this possible?
I get the following error in 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">
The manifest file is also where you can declare what types of hardware or software features your app requires, and thus, which types of devices your app is compatible with. Google Play Store does not allow your app to be installed on devices that don't provide the features or system version that your app requires.
xml file in the directory structure. Android Manifest usually contains pre-defined or static information which is then used to run the app. However, Android toolchain provides customization by allowing you to specify dynamic information through variable declaration, generally referred as Android Manifest placeholders.
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).
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With