使用 Bazel 运行 Android 应用程序时构建失败

Posted

技术标签:

【中文标题】使用 Bazel 运行 Android 应用程序时构建失败【英文标题】:Build failing when running an Android app with Bazel 【发布时间】:2021-07-24 16:09:16 【问题描述】:

我正在尝试按照教程使用 Bazel 构建 android 应用程序,如下所示: https://docs.bazel.build/versions/master/tutorial/android-app.html。正在使用以下命令成功构建应用程序:

bazel build //src/main:app

但是,当我尝试使用命令 bazel mobile-install //src/main:app 运行应用程序时,构建失败并出现以下错误:

INFO:分析的目标 //src/main:app(加载了 0 个包,配置了 0 个目标)。 信息:找到 1 个目标... 错误:/Users/kanzashaikh/examples/android/tutorial/src/main/BUILD:1:15:安装 //src/main:app 失败:(退出 1):incremental_install 失败:执行命令 bazel-out/darwin- 时出错py2-opt-exec-2B5CBBC6/bin/external/bazel_tools/tools/android/incremental_install --output_marker bazel-out/darwin-fastbuild/bin/src/main/app_files/full_deploy_marker --dexmanifest ...(剩余11个参数( s) 跳过) 回溯(最近一次通话最后): 文件“/private/var/tmp/_bazel_kanzashaikh/df06cea5303c222cca918b7a24c9d8ca/execroot/ma​​in/bazel-out/darwin-py2-opt-exec-2B5CBBC6/bin/external/bazel_tools/tools/android/incremental_install. runfiles/bazel_tools/tools/android/incremental_install.py”,第 25 行,在 从并发进口期货 ImportError:没有名为并发的模块 目标 //src/main:app 构建失败 使用 --verbose_failures 查看失败的构建步骤的命令行。 INFO:经过时间:0.311s,关键路径:0.19s 信息:3 个进程:3 个内部。 失败:构建未成功完成

如何解决这个问题?

【问题讨论】:

【参考方案1】:

看起来 bazel 正在使用 python2(文件路径中的 darwin-py2-opt-exec-2B5CBBC6 中的 py2),但 incremental_install.py 中的 from concurrent import futures 在 python2 中不起作用。

如果您没有安装 python3,请尝试安装它并查看是否可以解决问题。

如果您确实安装了 python3,请检查您的 bazel 版本,旧版本的 bazel 可能默认为 python2。

【讨论】:

您好,感谢您的回答!所以我确实检查了我的 python 和 bazel 版本,并且都更新了。 Python 版本是 3.9.5,bazel 版本是 4.1.0。但是,问题仍然存在。我是否特别需要告诉 bazel 以某种方式使用 python 3?还是应该自行检测?如果我需要具体说,你能告诉我怎么做吗? 我想补充一点,当我在终端中运行我的 python3 shell 并运行命令“从并发导入期货”时,它根本没有给我任何错误。所以,我假设 bazel 以某种方式使用 python2 或者它正在引用其他一些并发文件,但我也在我的系统中查找了任何名为 concurrent 的文件,但没有。

以上是关于使用 Bazel 运行 Android 应用程序时构建失败的主要内容,如果未能解决你的问题,请参考以下文章

当我使用 Bazel Test 时,Nest 无法解析 RootTestModule 上下文中的依赖关系

当所有单独的测试都通过时,为啥我的 Bazel 测试报告失败?

Bazel 使用标签运行

从安装程序安装 bazel 0.21.0 在 ubuntu 18.04.1 上失败

Bazel + QtCreator

Bazel + C++ 项目:如何为“运行”命令指定工作目录