I have the following modules inside my project for which I cannot get Gradle to merge the Android manifests properly:
myproject_alpha
myproject_beta
myprojec
Declare the header of your manifest as follows:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
Then, use one of the following appropriate attributes on any activity, activity-alias, service, receiver, or provider element that you want to merge:
tools:merge="override"
tools:merge="remove"
This info was gleaned from:
https://android.googlesource.com/platform/tools/base/+/idea133/build-system/manifest-merger/src/main/java/com/android/manifmerger/ManifestMerger.java
If you examine the class that merges the manifests, you'll see that the mergeNewOrEqual()
method is not smart enough to merge elements that are not identical. Unfortunately, this is the method that is used to merge providers and activities.
So the only "solution" would be to either to only define the elements in one place, or to give them identical signatures in both definitions.
I have issues with the answer above in that when I compile, I always get the message
Invalid instruction 'merge', valid instructions are : REMOVE,REPLACE,STRICT
I found success in importing the tools as in @swooby answer and then adding tools:node="merge"
in the <activity>
tag for the Activity being launched I want to replace and then adding
<intent-filter tools:node="remove">
<action android:name="android.intent.action.MAIN"/>
to the Activity's launcher that I do not want to have a launcher icon
Hope this helps.