【发布时间】:2013-12-22 16:41:29
【问题描述】:
我想在不同的构建类型中自定义 AndroidManifest。例如在调试模式下,我只想导出一个 Activity。
假设主清单:
/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 中的清单),但我认为这不是一个好的解决方案。
编辑:
到目前为止的解决方案是在资源中定义 bool 并在主清单中使用它。
在调试资源中,布尔值将是 true,而在版本 false 中。这个解决方案似乎比重复的清单好得多,但问题仍然存在。
【问题讨论】:
标签: android android-manifest android-gradle-plugin