标签: android-soong

Android soong/android.bp构建如何工作?

谷歌推出了Soong构建系统,取代了旧的makefile系统.知道它是如何工作的吗?请告诉我有关Android.bp的信息

android android-build android-source android-soong

11
推荐指数
3
解决办法
1万
查看次数

AOSP项目是如何搭建的?

AOSP 的所有 git 项目都由 repo 工具克隆,该工具读取此 xml:https : //android.googlesource.com/platform/manifest/+/refs/heads/master/default.xml

AOSP 指南说为了构建,我们应该source build/envsetup.sh在 repo 克隆所有存储库的文件夹上运行。因此,让我们看看platform/build清单存储库中的 default.xml。我们得到

  <project path="build/make" name="platform/build" groups="pdk" >
    <copyfile src="core/root.mk" dest="Makefile" />
    <linkfile src="CleanSpec.mk" dest="build/CleanSpec.mk" />
    <linkfile src="buildspec.mk.default" dest="build/buildspec.mk.default" />
    <linkfile src="core" dest="build/core" />
    <linkfile src="envsetup.sh" dest="build/envsetup.sh" />
    <linkfile src="target" dest="build/target" />
    <linkfile src="tools" dest="build/tools" />
  </project>
Run Code Online (Sandbox Code Playgroud)

我们确认envsetup.sh 所在的位置。,它在platform/build。它定义了m根据 AOSP 指南构建整个 AOSP 项目的函数:

function _trigger_build()
(
    local -r bc="$1"; shift
    if T="$(gettop)"; then
      _wrap_build "$T/build/soong/soong_ui.bash" …
Run Code Online (Sandbox Code Playgroud)

android go android-source android-soong

11
推荐指数
1
解决办法
615
查看次数

如何从树中构建 AOSP 拉丁语 IME?

我正在尝试构建 AOSP 拉丁语 IME(源代码:https : //android.googlesource.com/platform/packages/inputmethods/LatinIME/+/master)而无需下载整个 AOSP 源代码。理想情况下,我想将该项目构建为 Gradle 项目,以便我可以轻松地将其与我现有的 Android 应用程序集成。

我已经取得了一些进展

1] 在 Android Studio 中创建一个空白项目

2]复制粘贴“java”和“java-overridable”文件夹并将“res”文件夹的内容复制粘贴到我的项目中

但是,在项目编译时,由于以下错误,打开时键盘崩溃:

无法加载本机库 jni_latinime

这个错误是有道理的,因为我没有构建和包含 C++ 本机库(在这里找到:https : //android.googlesource.com/platform/packages/inputmethods/LatinIME/+/master/native/jni/)键盘才能发挥作用。

如何构建在上述链接中找到的本机库并将其包含在我的 Gradle 项目中?有没有办法在不下载整个 AOSP 源代码的情况下编译这些 C++ 文件?

该项目带有一个“Android.bp”文件,它似乎指定了如何编译 C++ 文件。不幸的是,我不知道如何使用 Soong 构建系统。https://android.googlesource.com/platform/packages/inputmethods/LatinIME/+/master/native/jni/Android.bp

android android-source android-soong

6
推荐指数
1
解决办法
1004
查看次数

本机代码覆盖与android soong构建系统

我正在尝试使用soong构建系统使用AOSP源代码为我的本机组件生成代码覆盖率报告.

我扩展了aosp vhal,但单元测试用例与下面的链接相同. http://androidxref.com/8.1.0_r33/xref/hardware/interfaces/automotive/vehicle/2.0/default/tests/

尝试将以下内容添加到Android.bp中的cc_test,cc_binary

native_coverage : true,

    cflags: [
         "-g",
         "-O0",
         "-fprofile-arcs",
         "-ftest-coverage",
    ],

     ldflags : [
        "-fprofile-arcs",
        "-ftest-coverage",
    ],
Run Code Online (Sandbox Code Playgroud)

本地二进制单元测试覆盖是在out/target/product中生成的,但我找不到gcno中间体.

在命令下运行会为每个测试文件提供*.gcda文件.

adb shell \
    GCOV_PREFIX=/data/local/tmp \
    GCOV_PREFIX_STRIP=`echo $ANDROID_BUILD_TOP | grep -o / | wc -l` \
    /data/local/tmp/unit-tests-coverage
Run Code Online (Sandbox Code Playgroud)

我试过下面的链接,但不知道如何继续:(

http://logan.tw/posts/2015/04/28/check-code-coverage-with-clang-and-lcov/ https://android.googlesource.com/platform/bionic.git/+/master- soong https://android.googlesource.com/platform/build/soong/+/581341d%5E%21/ https://android.googlesource.com/platform/external/e2fsprogs/+/fedfb27%5E%21/ https : //android.googlesource.com/platform/development/+/master/scripts/acov#23 http://androidxref.com/9.0.0_r3/xref/bionic/README.md#293

我不确定谷歌的vts框架是否可用于生成本机代码覆盖. https://codelabs.developers.google.com/codelabs/android-vts-8/#6

生成" gcnodir "但不确定如何使用它./coverage/data/nativetest64/vehicle-unit-tests-coverage/unit-tests-coverage.gcnodir

android code-coverage gcov android-source android-soong

6
推荐指数
1
解决办法
818
查看次数

如何在 android.bp 文件中添加 srcs :[] 的相对路径

我正在使用 androidmk 工具将 Android.mk 文件转换为 Android.bp,在许多地方我们都有 Android.mk chaning,因此它会生成 srcs:[] 的相对路径,但它不适用于 Android.bp 构建。抛出错误:路径在目录之外:../../XX.cpp

srcs:[ "example1.cpp" "../../example2.cpp" --- 该文件的错误 ]

路径在目录之外:“../../example2.cpp”

android android-soong

6
推荐指数
1
解决办法
8652
查看次数

Android.bp:如何添加外部标头 .h 文件

我有一个与How to add external header files during bazel/tensorflow build类似的问题。但我希望有更好的解决方案。

我有一个模块需要其他位置的一些外部 .h 头文件。假设我尝试包含“vendor/external/include/thirdpary.h”,在 Android.bp 中,我添加了一些类似的行:

include_dirs: [
"vendor/external/include",
]
Run Code Online (Sandbox Code Playgroud)

但是当我将它包含在我的 CPP 文件中时,编译器抱怨这个文件不存在:

#include "thirdpary.h"
Run Code Online (Sandbox Code Playgroud)

android hal android-soong

5
推荐指数
1
解决办法
3193
查看次数

将 Android.mk 中的共享库包含到 Android.bp 的 cc_test 中

我有一个 Android.mk,它构建了一些库:

ifeq ($(CONDITION),something)
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
BDROID_DIR := $(TOP_DIR)system/bt
LOCAL_CFLAGS += \
        -Wall \
        -Werror
LOCAL_SRC_FILES := ...
LOCAL_HEADER_LIBRARIES := libutils_headers
LOCAL_C_INCLUDES += ...
LOCAL_SHARED_LIBRARIES := \
        libcutils \
        liblog
LOCAL_MODULE := libowner-vendor
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_MODULE_OWNER := owner
LOCAL_PROPRIETARY_MODULE := true
include $(BUILD_SHARED_LIBRARY)

include $(call first-makefiles-under,$(LOCAL_PATH))
endif
Run Code Online (Sandbox Code Playgroud)

我想向其中添加一个测试模块,最好是 cc_test,因为我希望能够使用 atest 实用程序调用它。

显然,像这样简单地将其添加到“shared_libs”部分是行不通的:

Android.bp:

cc_test = {
    proprietary: true,
    name: "libowner-vendor-test",
    cflags: [
        "-Werror",
        "-Wall",
    ],
    srcs: [...],
    shared_libs: [
        ...,
        "libowner-vendor",
    ],
    host_supported: false,
} …
Run Code Online (Sandbox Code Playgroud)

android android-soong

5
推荐指数
1
解决办法
4251
查看次数

有没有办法在 Android.bp 中添加/删除模块?

我正在尝试根据环境变量集在 Android.bp 中添加/删除模块。例如,如果我将 BUILD_SOURCE 设置为 1,则 Android.bp 中的 cc_prebuilt_binary 会被删除,而会添加一些 cc_binary。

我已经看过指南并看到了下面的句子, https://android.googlesource.com/platform/build/soong/#how-do-i-write-conditionals

Soong 故意不支持 Android.bp 文件中的条件。相反,需要条件的构建规则的复杂性在 Go 中处理

但我找不到控制整个模块而不是模块中的属性的方法。

有谁知道该怎么做或者指南在哪里?

提前致谢 :)

android android-soong

5
推荐指数
1
解决办法
8630
查看次数

如何使用 Android.bp 解决依赖项缺失的变体 arch:common 问题?

最初,该依赖项包含在 Android 9 的 Android.mk 文件中。该模块可以编译并运行,不会出现任何构建错误。

迁移到 Android 11 时,必须将依赖项“libvlc”添加到 Android.bp static_libs 中。

 android_app {

   compile_multilib: "both",

   static_libs: [
    " libvlc",
    ...
   ],
 }

cc_prebuilt_library_shared {
    name: "libvlc",
    srcs: ["libs/libvlc.so"],
    vendor: true,
}
Run Code Online (Sandbox Code Playgroud)

这会引发错误:

  dependency "libvlc" of "MyModule" missing variant:

  os:android, arch:common

available variants:
  os:android, image:vendor.30, arch:arm64_armv8-a_cortex-a53, sdk:, link:shared, version:

  os:android, image:vendor.30, arch:arm64_armv8-a_cortex-a53, sdk:, link:static, version:

  os:android, image:vendor.30, arch:arm_armv7-a-neon_cortex-a9, sdk:, link:shared, version:

  os:android, image:vendor.30, arch:arm_armv7-a-neon_cortex-a9, sdk:, link:static, version:

14:54:21 soong bootstrap failed with: exit status 1

#### failed to build …
Run Code Online (Sandbox Code Playgroud)

android-source libvlc android-soong android-11

5
推荐指数
0
解决办法
2051
查看次数

什么是art.go?为什么它被认为是在 bp 文件中写入条件的一种方式?

我试图找到一种在 .bp 文件中写入条件的方法。

我在这里找到了一个文档:https : //android.googlesource.com/platform/build/soong/+/HEAD/README.md

它有一个“我如何编写条件?” 部分,它指向 art.go:https ://android.googlesource.com/platform/art/+/master/build/art.go

这几乎不是上述问题的答案。它需要比简单的链接更多的说明。

我的 Android.bp 中有 cc_binary 用于我开发的模块 (HAL)。

cc_binary {
  name: "name",
  init_rc: ["script.rc"],
  vintf_fragments: ["fragments.xml"],
  relative_install_path: "path",
  srcs: ["src1.cpp", "src2.cpp", ...],
  shared_libs: ["sh_lib1", "sh_lib2", ...],
  tstic_libs: ["lib1", "lib2", ...],
}
Run Code Online (Sandbox Code Playgroud)

我想添加一个条件 cflag (-DCONDITIONAL),如果环境变量 SOME_ENV_VAR 等于“some_value”,它将被设置为 1。

我在 AOSP 中发现了很多类似 *.go 文件的示例,但结果证明它们对我没有用,因为我不能简单地将那里描述的实践应用到我的案例中。我也没有找到任何关于 *.go 文件的文档,其中描述了如何使用它们做事。我什至找不到“最简单的用法示例”之类的东西。

有谁知道我在这里尝试做的事情有可能吗?

android android-soong

3
推荐指数
1
解决办法
1976
查看次数

使用 .bp 为 android 创建未剥离的可执行文件

我想构建 aosp 本机测试并在模拟器上调试它。是否可以使用调试符号构建可执行文件?我尝试将-g-ggdb添加到 Android .bp:

    cflags: [
        "-Werror",
        "-Wall",
        "-g",
    ],
Run Code Online (Sandbox Code Playgroud)

但这没有帮助,我仍然被剥夺了可执行文件。

debugging android gdb android-soong

3
推荐指数
1
解决办法
1623
查看次数