如何在 bazel 中合并 AndroidManifest.xml
How to merge AndroidManifest.xml in bazel
我的 android 项目包含一些 aar 模块,它们有自己的 AndroidManifest.xml。我应该怎么做才能将 aar 的清单合并到最终的 AndroidManifest.xml?
非常感谢您的帮助!
我的android_binary
规则:
android_binary(
name="apk",
custom_package = "com.xtbc",
manifest_merger = "android",
manifest = "AndroidManifest.xml",
resource_files = glob(["res/**"], exclude=["res/.DS_Store"]),
assets = glob(["assets/**"], exclude=["assets/.DS_Store"]),
assets_dir = "assets",
multidex = "manual_main_dex",
main_dex_list = "mainDexList.txt",
dexopts = [
"--force-jumbo"
],
deps = [
":lib",
":base_lib",
":jni"
]
)
:base_lib
是一个模块(即 android_library
规则):
android_library(
name = "base_lib",
srcs = glob(["base/src/**/*.java"]),
custom_package = "com.xtbc.base",
manifest = "base/AndroidManifest.xml",
resource_files = glob(["base/res/**"], exclude=["base/res/.DS_Store"]),
assets = glob(["base/assets/**"], exclude=["base/assets/.DS_Store"]),
assets_dir = "base/assets",
deps = [
"@androidsdk//com.android.support:support-annotations-23.0.1"
]
)
它有自己的base/AndoridManifest.xml
,我想要的是:base_lib
的AndroidManifest.xml会合并到最后的AndroidManifest.xml(即:apk
的 AndroidManifest.xml).
我没有足够的 Whosebug 信誉来回复评论链,但听起来你想要的是 android_library
的 exports_manifest
属性。
https://bazel.build/versions/master/docs/be/android.html#android_library.exports_manifest 的文档说默认值为 1,但是,该文档基于尚未进入 Bazel 版本的源代码更改。现在您需要将 exports_manifest = 1
添加到您的 android_library
上。在下一个 Bazel 版本中,这将不再是必需的。
此外,关于 "AAR modules":如果这些是预构建的 .aar 文件,您将需要使用 aar_import 规则。它没有 exports_manifest 属性,因为它总是默认导出。如果这些是 Gradle Android 库模块,那么您可以只使用 android_library 规则。如果您指的是支持库,@androidsdk//com.android.support:support-annotations-23.0.1 实际上是一个 JAR,而不是 AAR。
我的 android 项目包含一些 aar 模块,它们有自己的 AndroidManifest.xml。我应该怎么做才能将 aar 的清单合并到最终的 AndroidManifest.xml?
非常感谢您的帮助!
我的android_binary
规则:
android_binary(
name="apk",
custom_package = "com.xtbc",
manifest_merger = "android",
manifest = "AndroidManifest.xml",
resource_files = glob(["res/**"], exclude=["res/.DS_Store"]),
assets = glob(["assets/**"], exclude=["assets/.DS_Store"]),
assets_dir = "assets",
multidex = "manual_main_dex",
main_dex_list = "mainDexList.txt",
dexopts = [
"--force-jumbo"
],
deps = [
":lib",
":base_lib",
":jni"
]
)
:base_lib
是一个模块(即 android_library
规则):
android_library(
name = "base_lib",
srcs = glob(["base/src/**/*.java"]),
custom_package = "com.xtbc.base",
manifest = "base/AndroidManifest.xml",
resource_files = glob(["base/res/**"], exclude=["base/res/.DS_Store"]),
assets = glob(["base/assets/**"], exclude=["base/assets/.DS_Store"]),
assets_dir = "base/assets",
deps = [
"@androidsdk//com.android.support:support-annotations-23.0.1"
]
)
它有自己的base/AndoridManifest.xml
,我想要的是:base_lib
的AndroidManifest.xml会合并到最后的AndroidManifest.xml(即:apk
的 AndroidManifest.xml).
我没有足够的 Whosebug 信誉来回复评论链,但听起来你想要的是 android_library
的 exports_manifest
属性。
https://bazel.build/versions/master/docs/be/android.html#android_library.exports_manifest 的文档说默认值为 1,但是,该文档基于尚未进入 Bazel 版本的源代码更改。现在您需要将 exports_manifest = 1
添加到您的 android_library
上。在下一个 Bazel 版本中,这将不再是必需的。
此外,关于 "AAR modules":如果这些是预构建的 .aar 文件,您将需要使用 aar_import 规则。它没有 exports_manifest 属性,因为它总是默认导出。如果这些是 Gradle Android 库模块,那么您可以只使用 android_library 规则。如果您指的是支持库,@androidsdk//com.android.support:support-annotations-23.0.1 实际上是一个 JAR,而不是 AAR。