构建适用于 Android 的 LiteRT

本文档介绍了如何在 Android Studio 上 。通常,您无需在本地构建 LiteRT Android 库。 如果您只是想使用它,请参阅 Android 快速入门,详细了解如何使用 在您的 Android 项目中创建。

使用夜间快照

如需使用夜间快照,请将以下代码库添加到您的根 Gradle build 配置。

allprojects {
    repositories {      // should be already there
        mavenCentral()  // should be already there
        maven {         // add this repo to use snapshots
          name 'ossrh-snapshot'
          url 'https://oss.sonatype.org/content/repositories/snapshots'
        }
    }
}

将夜间快照添加到 build.gradle 的依赖项(或根据需要进行修改)

...
dependencies {
    ...
    implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly-SNAPSHOT'
    implementation 'com.google.ai.edge.litert:litert-gpu:0.0.0-nightly-SNAPSHOT'
    implementation 'com.google.ai.edge.litert:litert-support:0.0.0-nightly-SNAPSHOT'
    ...
}
...

在本地构建 LiteRT

在某些情况下,您可能希望使用 LiteRT 的本地 build。对于 例如,您可能会构建包含 从 TensorFlow 中选择的操作、 或者可能想对 LiteRT 进行本地更改。

使用 Docker 设置构建环境

  • 下载 Docker 文件。下载 Docker 文件,即表示您同意 您在使用时须遵守以下服务条款:

点击接受,即表示您特此同意,对 Android Studio 和 Android 原生开发套件将受 Android 软件 《开发套件许可协议》网址: https://developer.android.com/studio/terms(此类网址可能会更新或更改 更新)。

您必须接受服务条款才能下载 文件。

  • 您可以根据需要更改 Android SDK 或 NDK 版本。将已下载的 Docker 文件,然后通过运行以下命令构建 Docker 映像:
docker build . -t tflite-builder -f tflite-android.Dockerfile
  • 通过将当前文件夹装载到以交互方式启动 Docker 容器 /host_dir(请注意,/tensorflow_src 是 TensorFlow 存储库):
docker run -it -v $PWD:/host_dir tflite-builder bash

如果您在 Windows 上使用 PowerShell,请将“$PWD”替换掉以“pwd”开头。

如果您想在主机上使用 TensorFlow 代码库,请先装载该主机 目录 (-v hostDir:/host_dir)。

  • 进入容器后,您可以运行以下命令来下载 其他 Android 工具和库(请注意,您可能需要接受 许可):
sdkmanager \
  "build-tools;${ANDROID_BUILD_TOOLS_VERSION}" \
  "platform-tools" \
  "platforms;android-${ANDROID_API_LEVEL}"

现在,您应继续前往配置工作区和 .bazelrc 部分,以配置构建设置。

构建完库后,您可以将它们复制到 /host_dir 以便在主机上访问这些文件

在不使用 Docker 的情况下设置构建环境

安装 Bazel 和 Android 前提条件

Bazel 是 TensorFlow 的主要构建系统。要使用它进行构建, 并在您的系统上安装 Android NDK 和 SDK。

  1. 安装最新版本的 Bazel 构建系统
  2. 构建原生 (C/C++) LiteRT 需要 Android NDK 代码。目前推荐的版本是 25b,您可以在这里找到 此处
  3. Android SDK 和构建工具 此处,或 作为 Android Studio。构建 Tools API >= 23 是构建 LiteRT 的推荐版本。

配置 WORKSPACE 和 .bazelrc

这是构建 LiteRT 所需的一次性配置步骤 库。在根 TensorFlow 检出中运行 ./configure 脚本 目录,然后回答“是”当脚本要求以交互方式配置 ./WORKSPACE 时 。该脚本将尝试使用 以下环境变量:

  • ANDROID_SDK_HOME
  • ANDROID_SDK_API_LEVEL
  • ANDROID_NDK_HOME
  • ANDROID_NDK_API_LEVEL

如果未设置这些变量,则必须在脚本中以交互方式提供它们 提示。成功的配置应生成类似于以下内容的条目 在根文件夹的 .tf_configure.bazelrc 文件中添加以下代码:

build --action_env ANDROID_NDK_HOME="/usr/local/android/android-ndk-r25b"
build --action_env ANDROID_NDK_API_LEVEL="21"
build --action_env ANDROID_BUILD_TOOLS_VERSION="30.0.3"
build --action_env ANDROID_SDK_API_LEVEL="30"
build --action_env ANDROID_SDK_HOME="/usr/local/android/android-sdk-linux"

构建和安装

正确配置 Bazel 后,您可以 结账根目录,如下所示:

bazel build -c opt --cxxopt=--std=c++17 --config=android_arm64 \
  --fat_apk_cpu=x86,x86_64,arm64-v8a,armeabi-v7a \
  --define=android_dexmerger_tool=d8_dexmerger \
  --define=android_incremental_dexing_tool=d8_dexbuilder \
  //tensorflow/lite/java:tensorflow-lite

这将在 bazel-bin/tensorflow/lite/java/ 中生成一个 AAR 文件。注意事项 这样会产生AAR 有多种不同的架构;如果没有 需要所有这些功能,请使用适合部署环境的那一部分。

您可以仅针对一组模型构建较小的 AAR 文件,具体操作步骤如下:

bash tensorflow/lite/tools/build_aar.sh \
  --input_models=model1,model2 \
  --target_archs=x86,x86_64,arm64-v8a,armeabi-v7a

上述脚本将生成 tensorflow-lite.aar 文件,并可选择性地生成 tensorflow-lite-select-tf-ops.aar 文件(如果其中一个模型使用的是 Tensorflow 操作。有关详情,请参阅 缩减 LiteRT 二进制文件大小部分。

将 AAR 直接添加到项目中

tensorflow-lite.aar 文件移动到以下位置中名为 libs 的目录中: 项目。修改应用的 build.gradle 文件以引用新目录 并将现有的 LiteRT 依赖项替换为新的本地库, e.g.:

allprojects {
    repositories {
        mavenCentral()
        maven {  // Only for snapshot artifacts
            name 'ossrh-snapshot'
            url 'https://oss.sonatype.org/content/repositories/snapshots'
        }
        flatDir {
            dirs 'libs'
        }
    }
}

dependencies {
    compile(name:'tensorflow-lite', ext:'aar')
}

将 AAR 安装到本地 Maven 制品库

从结账根目录执行以下命令:

mvn install:install-file \
  -Dfile=bazel-bin/tensorflow/lite/java/tensorflow-lite.aar \
  -DgroupId=org.tensorflow \
  -DartifactId=tensorflow-lite -Dversion=0.1.100 -Dpackaging=aar

在应用的 build.gradle 中,确保您具有 mavenLocal() 依赖项并 将标准 LiteRT 依赖项替换为支持 指定 TensorFlow 操作:

allprojects {
    repositories {
        mavenCentral()
        maven {  // Only for snapshot artifacts
            name 'ossrh-snapshot'
            url 'https://oss.sonatype.org/content/repositories/snapshots'
        }
        mavenLocal()
    }
}

dependencies {
    implementation 'org.tensorflow:tensorflow-lite:0.1.100'
}

请注意,此处的 0.1.100 版本纯粹是为了 测试/开发安装本地 AAR 后,您可以使用标准 应用代码中的 LiteRT Java 推理 API