当前位置: 首页 > 知识库问答 >
问题:

如何使用bazel为android构建cc_test

裴甫
2023-03-14
    null

看起来bazel在cc_test和android toolchain上有问题

有什么方法可以使用Bazel为android构建和运行一个可执行文件吗?也许我错过了一些命令行参数

编辑:

ERROR: missing input file '@androidsdk//:platform-tools/adb' 
ERROR: unit/BUILD:61:1: //unit:unit_android: missing input file '@androidsdk//:platform-tools/adb' Target //unit:unit_android failed to build 
ERROR: unit/BUILD:61:1 1 input file(s) do not exist
sh_test(
    name = "unit_android",
    srcs = ["unit_android.sh"],
    data = [
        ":unit",
        #"@androidsdk//:adb",
    ],
    deps = [
        "@bazel_tools//tools/bash/runfiles", # to access the manifest
    ],
)
adb: error: failed to copy '.../_bazel_exb_a/yg32wcuz/execroot/test/bazel-out/armeabi-v7a-fastbuild/bin/unit/unit' to 'C:/Development/msys2/data/local/tmp/unit'
unknown parameter - /users
android_ndk_repository(
    name = "androidndk", # Required. Name *must* be "androidndk".
    api_level = 26
)

android_sdk_repository(
    name = "androidsdk", # Required. Name *must* be "androidsdk".
    api_level = 26
)

共有1个答案

张伯寅
2023-03-14

--crosstool_top本身设置目标和宿主crosstool,因此您可能只需要将--host_crosstool_top设置回默认值:--host_crosstool_top=@bazel_tools//tools/cpp:toolchain

编辑:

不幸的是,Bazel test不支持在设备上运行测试。需要有一些测试运行器,知道如何将测试放在设备上,运行它,并收集结果。一个非常简单的版本可能看起来像:

int main(int argc, char** argv) {
  // Test always passes.
  // Return non-zero for test failure.
  return 0;
}
adb=external/androidsdk/platform-tools/adb

# The test requires a running emulator or connected device.
# The name of the cc_test binary can be passed in using the
# args attribute of sh_test to make this script generic.
$adb push example_test /data/local/tmp

# adb shell returns the exit code of the command
# that was executed, and the exit code of the
# test shell script determines if the sh_test target
# passes or fails.
$adb shell "/data/local/tmp/example_test"
cc_test(
  name = "example_test",
  srcs = ["test.cc"],
  linkopts = ["-pie"],
  linkstatic = 1,
)

sh_test(
  name = "example_android_cc_test",
  srcs = ["example_android_cc_test.sh"],
  data = [
      ":example_test",
      "@androidsdk//:adb",
  ],
)
 类似资料:
  • 首先,我安装并配置了Bazel,现在我可以使用该教程成功地编译和部署应用程序。 然而,我被Android Studio困住了。我安装了官方的Bazel插件,然后尝试将我的Bazel项目导入到Android studio(从构建文件导入)。我得到了同步错误: 在项目目录下找到2个目标;同步其中的2个。从项目视图目录同步目标: //src/main/java/com/example/bazel:gre

  • 我目前正在按照这里的说明使用bazel从源代码构建tenorflow。 设置配置并尝试构建配置后,出现以下错误: Cuda配置错误:将C:/Program Files/NVIDIA GPU Computing读取到olkit/Cuda/v9时出错。0/include/cudnn。h:爪哇。伊奥。IOException:错误:src/main/native/win-dows/processes jn

  • 我想将ant构建迁移到Bazel4.2.1。ant构建使用Eclipse编译器(ECJ-3.27.0)。 在Bazel中声明Java编译器的方法是。 因此,我查看了的输出,并尝试使用vanilla工具链作为灵感()。 显示整个编译器命令行(加上更多构建步骤): 我不知道有哪个Java编译器接受。是否必须以不同的方式传递?

  • 我试图按照以下教程使用Bazel构建一个Android应用程序:https://docs.Bazel.build/versions/master/tutorial/android-app.html。应用程序正在通过以下命令成功构建: 但是,当我尝试使用命令运行应用程序时,生成失败,出现以下错误: 信息:分析目标//src/main:app(加载0个包,配置0个目标)。信息:发现1个目标...错误:

  • 问题内容: 我正在尝试从Eclipse迁移项目,但是没有尝试过。在Eclipse中,我有3个项目(2个android应用程序项目和1个android库项目)。2个应用程序项目取决于库项目。当我执行gradle导出时,我得到3个无效的项目。我愿意对项目进行重组,但没有找到有关如何完成此工作的任何文档。 有没有办法使Eclipse导出的3个项目一起工作?我最好重新组织一下工作,如果可以的话,是否应该提

  • 作为我们创建bazel-maven transition interop工具(从更细粒度的bazel JAR创建maven大小的JAR)的努力的一部分,需要创建sources JAR。 对于目标,有一种机制可以使用后缀创建它 是否有另一种机制?