如何在bazel中合并AndroidManifest.xml

时间:2017-05-02 03:09:00

标签: 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)。

1 个答案:

答案 0 :(得分:1)

我没有足够的stackoverflow信誉来响应评论链,但听起来你所追求的是exports_manifest的{​​{1}}属性。

https://bazel.build/versions/master/docs/be/android.html#android_library.exports_manifest处的文档说默认值是1,但是,文档是基于源代码更改尚未进入Bazel版本的。现在,您需要将android_library添加到exports_manifest = 1。在下一个Bazel版本中,这将不再是必要的。

另外,关于“AAR模块”:如果这些是预先构建的.aar文件,您将需要使用aar_import规则。它没有exports_manifest属性,因为它将始终默认导出。如果这些是Gradle Android库模块,那么您可以使用android_library规则。如果你指的是支持库,@ androidsdk // com.android.support:support-annotations-23.0.1实际上是一个JAR,而不是AAR。