tom*_*ozb 8 android android-manifest android-gradle-plugin
我想在不同的构建类型中自定义AndroidManifest.例如,在调试模式下,我只想要导出一个Activity.
假设主要清单:
/main/AndroidManifest.xml
<application>
<activity
android:name="com.example.MainActivity" />
</application>
Run Code Online (Sandbox Code Playgroud)
调试清单:
/debug/AndroidManifest.xml
<application>
<activity
android:name="com.example.MainActivity"
android:exported="true" />
</application>
Run Code Online (Sandbox Code Playgroud)
示例清单(与调试相同):
/example/AndroidManifest.xml
<application>
<activity
android:name="com.example.MainActivity"
android:exported="true" />
</application>
Run Code Online (Sandbox Code Playgroud)
在调试清单中,我得到了 Duplicate registration for activity com.example.MainActivity
这就是我创建示例构建类型的原因.
/build.gradle
android {
buildTypes {
example.initWith(buildTypes.debug)
}
}
Run Code Online (Sandbox Code Playgroud)
但它也行不通.
[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>
Run Code Online (Sandbox Code Playgroud)
我想知道这是一个bug,缺少功能(将来会实现)还是我做错了什么?
我知道我可以在发布和调试中提供不同的清单(没有一个/main),但我不认为这是一个很好的解决方案.
编辑:
到目前为止的解决方案是在资源中定义bool并在主清单中使用它.在调试资源中,bool将true在发布时false.这个解决方案似乎比重复的清单要好得多,但问题仍然存在.
从 gradle 插件 0.10 开始,它终于被支持了。有关新清单合并的更多信息:http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger
目前(gradle插件0.10)它需要这个额外的配置build.gradle
android {
useOldManifestMerger false
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3272 次 |
| 最近记录: |