TensorFlow Android 演示:无法使用 Bazel 构建,无法读取 RELEASE.TXT

TensorFlow Android demo: unable to build with Bazel, could not read RELEASE.TXT

最近我一直在学习如何使用 TensorFlow,想在我的电脑上设置 Android 演示,看看它们是如何工作的。我按照 here 提供的说明进行操作,唯一的区别是我通过 Android Studio 安装了 Android SDK,并通过 SDK 管理器安装了 Android NDK。直到 $ bazel build //tensorflow/examples/android:tensorflow_demo,一切正常,但在那之后,我从终端收到这个错误:

ERROR: no such package '@androidndk//': Could not read RELEASE.TXT in Android NDK: /home/me/.cache/bazel/_bazel_me/f3471be34d1e62bf21975aa777cedaa3/external/androidndk/ndk/RELEASE.TXT (No such file or directory).
ERROR: no such package '@androidndk//': Could not read RELEASE.TXT in Android NDK: /home/me/.cache/bazel/_bazel_me/f3471be34d1e62bf21975aa777cedaa3/external/androidndk/ndk/RELEASE.TXT (No such file or directory).

通过查看类似问题,我的理解是此错误是因为 RELEASE.TXT 文件未包含在最新版本的 Android NDK 中。 This issue suggested downgrading to a previous version of NDK which contains a RELEASE.TXT file, and provided links to download such versions. However, the link that I followed (https://dl.google.com/android/ndk/android-ndk-r10e-linux-x86_64.bin) 下载了一个 .bin 文件,我无法使用。 post 还建议在 WORKSPACE 文件中注释掉 NDK 条目,但我还没有尝试过,因为我不知道它是否会导致进一步的复杂化。

我尝试过的另一种方法是转到错误日志 (/home/me/.cache/bazel/_bazel_me/f3471be34d1e62bf21975aa777cedaa3/external/androidndk/ndk) 指示的路径并创建一个空白 RELEASE.TXT 文件,这没有任何区别。 (我无法在我安装的 NDK 中创建一个,因为它是路径 /home/me/android-studio/android-studio/plugins/android-ndk/lib 中的 .jar 文件形式,因此我只能看到这条路径。)

就目前而言,我走到了死胡同。是否有另一种方法可以在不降级或注释掉 NDK 条目的情况下解决此问题?如果没有,我如何安装以前版本的 Android NDK?

您是否考虑过在不使用 Bazel 的情况下使用另一种方法为 Android 编译 TensorFlow?在 TensorFlow Makefile

中有描述

我还在 TensorFlow 的官方 GitHub 存储库中将此作为问题 #3175 发布,并且已解决。可以在该线程中找到我为解决问题所遵循的步骤的逐个播放。有点绕,所以我认为可以解决这样的问题的步骤如下:

  1. 如果您在 git 克隆 TensorFlow 存储库时没有使用 --recursive 选项,请使用该选项重新克隆它。
  2. 降级到 Android NDK r11c(并确保相应地更新 WORKSPACE 文件)。 Linux 版本的 link 可以在 GitHub 线程中找到。
  3. 检查您的 Android SDK 和构建工具的版本。如果它们与 WORKSPACE 文件中写入的默认版本不同,请确保对其进行更改。
  4. 您可能 运行 遇到尚未解决的 TensorFlow 问题。 (#3374) 如果是这样,运行 ./configure 作为解决方法。

这应该允许 Bazel 构建成功进行。