使用 Bazel 属性覆盖 'tools:replace'。
在 Bazel Android 环境中,当使用 tools:replace 属性时可能会遇到冲突和错误。这通常是因为这个属性只能在 Android Gradle Plugin 中使用。
为了解决这个问题,可以使用 Bazel 的属性覆盖功能来代替 tools:replace。具体来说,可以使用 android_binary() 和 android_library() 规则中的 manifest_overrides 属性来覆盖文件中的默认值。以下是一个示例 android_binary() 规则:
android_binary(
name = "my_binary",
manifest = "path/to/AndroidManifest.xml",
manifest_overrides = {
"permission": "android.Permissions.RECORD_AUDIO",
},
deps = [
"//my/library:my_library",
],
)
在上面的示例中,“my_binary”规则将覆盖默认的 AndroidManifest.xml,这里使用 manifest_overrides 属性来添加一条新的权限声明。
请注意,manifest_overrides 属性是一个字典,其中键是要覆盖的属性名称,值是要覆盖的属性值。
这个解决方法可以避免使用 tools:replace 属性时可能出现的冲突和错误,在 Bazel Android 环境中保持一个稳定的构建。