为 bazel 设置 targetSdkVersion 和 compileSdkVersion,android tensorflow

Setting targetSdkVersion and compileSdkVersion for bazel, android tensorflow

我需要有关如何为 bazel 分别设置目标和编译 Sdk 版本的帮助。

我想 运行 遵循 this 教程 phone 上的 tensorflow。为 bazel 编辑 WORKSPACE 后如下:

android_sdk_repository(
    name = "androidsdk",
    api_level = 24,
    build_tools_version = "24.0.1",
    path = "/home/Android/Sdk",
)

android_ndk_repository(
    name="androidndk",
    path="/home/Android/Sdk/ndk-bundle",
    api_level=21)

我在 phone 安装 apk 时遇到解析错误:

adb install -r bazel-bin/tensorflow/examples/android/tensorflow_demo.apk

我启用了 usb 调试和第 3 方 apk 安装。 phone 使用 Android 4.4.4,所以我更改了 WORKSPACE 配置以匹配它(工具和 API 由 SDK 管理器正确安装)为:

android_sdk_repository(
    name = "androidsdk",
    api_level = 19,
    build_tools_version = "19.1.0",
    path = "/home/Android/Sdk",
)

android_ndk_repository(
    name="androidndk",
    path="/home/Android/Sdk/ndk-bundle",
    api_level=21)

构建为:

bazel build //tensorflow/examples/android:tensorflow_demo

我最终遇到了一些这种类型的错误:

Error at 5 : /tmp/android_resources_tmp7060220119759636814/merged_resources/values-v21/values.xml:5: error: Error retrieving parent for item: No resource found that matches the given name 'android:Theme.Material.Light'.

关注 answer, I should build for compile API version > 21 but at the same time target API version 19. It can be easily set for gradle. However I have not found any clue how to do that for bazel。任何建议表示赞赏!

如果您要针对较低的 Android API 级别,您要编辑的文件实际上是 tensorflow/examples/android/AndroidManifest.xml。将 WORKSPACE 文件设置保留在您通过 sdk 安装的最高 API 级别(APIs 可以使用 $ANDROID_HOME/tools/android 安装)。

您可以在 AndroidManifest.xml 中将最低 API 级别降低到 19,但请注意,您将在 phone 运行 演示中遇到运行时错误,除非您更换与 camera2 api(添加了 API 级别 21)的演示代码与类似的 android.hardware.camera 代码。