I want to customize AndroidManifest in different build types. For example in debug mode I just want an Activity to be exported.
Assume main manifest:
/main/AndroidManifest.xml
<application>
<activity
android:name="com.example.MainActivity" />
</application>
Debug manifest:
/debug/AndroidManifest.xml
<application>
<activity
android:name="com.example.MainActivity"
android:exported="true" />
</application>
Example manifest (same as debug):
/example/AndroidManifest.xml
<application>
<activity
android:name="com.example.MainActivity"
android:exported="true" />
</application>
In the debug manifest I get Duplicate registration for activity com.example.MainActivity
That's why I created the example build type.
/build.gradle
android {
buildTypes {
example.initWith(buildTypes.debug)
}
}
But it also doesn't work.
[AndroidManifest.xml:17, AndroidManifest.xml:4] Trying to merge incompatible /manifest/application/activity[@name=com.example.MainActivity] element:
<activity
-- @android:name="com.example.MainActivity">
--</activity>
--(end reached)
<activity
++ @android:exported="true"
++ @android:name="com.example.MainActivity">
++</activity>
I'm wondering whether this is a bug, missing feature (will be implemented in the future) or I'm doing something wrong?
I know I can provide different manifest in release and debug (without the one in /main), but I don't think this is a good solution.
EDIT:
The solution so far is to define bool in resources and use it inside main manifest.
In debug resources the bool will be true while in the release false. This solution seems much better than duplicated manifests, but the question is still actual.
As of gradle plugin 0.10 it's finally supported. More info about new manifest merger: http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger
At the moment (gradle plugin 0.10) it requires this extra configuration in build.gradle
android {
useOldManifestMerger false
}
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