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