在不同的构建类型中自定义AndroidManifest
我想在不同的构建类型中定制AndroidManifest。 例如在调试模式下,我只想要导出一个活动。
假设主要清单:
/main/AndroidManifest.xml
<application>
<activity
android:name="com.example.MainActivity" />
</application>
调试清单:
/debug/AndroidManifest.xml
<application>
<activity
android:name="com.example.MainActivity"
android:exported="true" />
</application>
清单示例(与调试相同):
/example/AndroidManifest.xml
<application>
<activity
android:name="com.example.MainActivity"
android:exported="true" />
</application>
在调试清单中,我获得了Duplicate registration for activity com.example.MainActivity
这就是我创建示例构建类型的原因。
/build.gradle
android {
buildTypes {
example.initWith(buildTypes.debug)
}
}
但它也行不通。
[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>
我想知道这是否是一个错误,缺少功能(将在未来实施)还是我做错了什么?
我知道我可以在发行版和调试版中提供不同的清单(没有在/main
),但我不认为这是一个好的解决方案。
编辑:到目前为止的解决方案是在资源中定义布尔,并在主清单中使用它。 在调试资源布尔将true
而释放false
。 这个解决方案似乎比重复清单好得多,但问题仍然存在。
从gradle插件0.10开始,它终于得到支持。 有关新清单合并的更多信息:http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger
目前(gradle plugin 0.10)它需要build.gradle
额外配置
android {
useOldManifestMerger false
}
我知道我可以在发行版和调试版中提供不同的清单(没有在/ main中),但我不认为这是一个好的解决方案。
不幸的是,在你不能在主清单和构建类型清单中定义相同的事物(Activity,Service,Receiver等)时清单合并存在限制。 解决方案是仅在主清单中定义非生成类型特定的东西,并在生成类型清单中定义其他所有内容。
链接地址: http://www.djcxy.com/p/76083.html上一篇: Customize AndroidManifest in different build types
下一篇: How do I get dialyzer to ignore certain unexported functions?