使用 Android.bp 为 GNU/Linux 系统构建项目

Build project with Android.bp for GNU/Linux system

我正在开发一个命令行工具,我在 Android 中 运行;但我也想编译 运行 它独立于桌面系统,例如 Ubuntu GNU/Linux 系统。

目前它使用 Android.bp 文件并在 AOSP.

中构建

如何使用 Android.bp 构建 GNU/Linux 系统?

我当然可以将 Android.bp 重写为一个普通的旧 Makefile,但我不想创建这个额外的代码层来维护。

我在 Android 方面的有限经验表明这不是一件容易的事。正常的解决方案似乎是根据另一个构建系统生成 Android 文件,或者解析 Android 文件并为另一个构建系统生成文件。不幸的是,我知道没有任何现有工具不适合您

您可以指定应该为哪个目标构建模块:AndroidHost两者Host 表示 GNU/Linux 如果您在其中构建 AOSP。

Android

这是为设备架构构建的典型二进制模块。

cc_binary {
    name: "my-binary",
    srcs: [ "main.cpp" ],
    shared_libs: [ "libcutils" ]
}

主持人

有多个 _host 模块类型(例如 cc_binary_hostcc_test_hostjava_binary_host)将创建主机二进制文件。

cc_binary_host {
    name: "my-binary-host",
    srcs: [ "main.cpp" ],
    shared_libs: [ "libcutils" ]
}

两者都

如果要同时构建设备二进制文件和主机二进制文件,可以使用 host_supported: true.

cc_binary {
    name: "my-binary",
    srcs: [ "main.cpp" ],
    shared_libs: [ "libcutils" ],
    host_supported: true
}

您可能想要为 androidhost 指定额外的标志、定义、来源等。您可以使用 target 属性:

cc_binary {
    name: "my-binary",
    srcs: [ "main.cpp" ],
    shared_libs: [ "libcutils" ],
    host_supported: true,

    target: {
        android: {
            // android specific properties
        },
        host: {
            // host-side specific properties
        }
    }
}

关于模块依赖性的注释

同一目标需要支持另一个模块所依赖的每个模块。

示例:cc_binary_host 不能依赖于 cc_libraryhost_supported: false