• 文档 >
  • 在 Android 上使用 ExecuTorch
快捷方式

在 Android 上使用 ExecuTorch

为了在 Android 上使用,ExecuTorch 提供了 Java/Kotlin API 绑定和 Android 平台集成,可作为 AAR 文件提供。

注意:本页面涵盖通过 AAR 库进行的 Android 应用集成。ExecuTorch C++ API 也可以从 Android 原生代码中使用,相关文档可以在 本交叉编译页面 上找到。

安装

所有 ExecuTorch Android 库都打包到一个 Android 库 (AAR) 中,即 executorch.aar,可用于通用(图像/音频处理)和 LLM(LLaMA)用例。在每个版本中,预编译的 AAR 构件都会上传到 Maven 和 S3。用户也可以从源代码构建 AAR。

库的内容

AAR 构件包含用于用户集成到其 Java/Kotlin 应用代码中的 Java 库,以及相应的 JNI 库 (.so 文件),该文件在初始化期间由 Java 代码加载。

  • Java 库

  • JNI 包含相应 Java 代码的 JNI 绑定,以及 ExecuTorch 原生库,包括:

    • 核心 ExecuTorch 运行时库

    • XNNPACK 后端

    • 可移植内核

    • 优化内核

    • 量化内核

    • LLaMa 特定的自定义操作库。

  • 提供两种 ABI 变体:arm64-v8a 和 x86_64。

AAR 库可用于 arm64-v8a 或 x86_64 架构的通用 Android 设备。它可以跨各种外形尺寸使用,包括手机、平板电脑、电视盒子等,因为它不包含任何 UI 组件。

从 Maven Central 使用 AAR

ExecuTorch 可在 Maven Central 上获得。

只需将目标 org.pytorch:executorch-android:0.7.0 添加到您的 Android 应用依赖项 (build.gradle) 中,然后构建您的应用。

例如

# app/build.gradle.kts
dependencies {
    implementation("org.pytorch:executorch-android:0.7.0")
}

注意:如果您想使用 v0.5.0 版本,请使用依赖项 org.pytorch:executorch-android:0.5.1

点击下面的截图观看演示视频,了解如何添加包并通过 Android Studio 运行简单的 ExecuTorch 模型。 在 Android 上集成和运行 ExecuTorch

直接使用 AAR 文件

您也可以直接在应用中指定一个 AAR 文件。我们在每次发布时都会将预编译的 AAR 上传到 S3,或者作为快照。

主分支的快照

从 2025-04-12 开始,您可以下载夜间构建的 main 分支快照。

  • executorch.aar: https://ossci-android.s3.amazonaws.com/executorch/release/snapshot-{YYYYMMDD}/executorch.aar

  • executorch.aar.sha256sums: https://ossci-android.s3.amazonaws.com/executorch/release/snapshot-{YYYYMMDD}/executorch.aar.sha256sums

  • YYYYMMDD 替换为您要使用的实际日期。

  • AAR 文件由 此工作流 生成。

例如

curl -O https://ossci-android.s3.amazonaws.com/executorch/release/snapshot-20250412/executorch.aar
curl -O https://ossci-android.s3.amazonaws.com/executorch/release/snapshot-20250412/executorch.aar.sha256sums

我们的目标是让每个每日快照都可用且可用。但是,为了获得最佳稳定性,请使用已发布版本,而不是快照。

使用 AAR 文件

将 AAR 文件添加到您的应用

  1. 下载 AAR。

  2. 将其作为文件路径添加到您的 Gradle 构建规则中。

AAR 文件本身不包含依赖项信息,不像 Maven 中的 AAR 包含了 pom.xml。Java 包需要 fbjnisoloader,目前要求用户显式声明依赖项。因此,需要在 Gradle 规则中添加另外两个 dependencies

implementation("com.facebook.soloader:soloader:0.10.5")
implementation("com.facebook.fbjni:fbjni:0.5.1")

用法示例

在您的应用工作目录中,例如 executorch/examples/demo-apps/android/LlamaDemo,

mkdir -p app/libs
curl https://ossci-android.s3.amazonaws.com/executorch/release/0.7.0/executorch.aar -o app/libs/executorch.aar

并在 Gradle 中包含它

# app/build.gradle.kts
dependencies {
    implementation(files("libs/executorch.aar"))
    implementation("com.facebook.soloader:soloader:0.10.5")
    implementation("com.facebook.fbjni:fbjni:0.5.1")
}

现在您可以编译您的应用并使用 ExecuTorch Android 库了。

从源代码构建

scripts/build_android_library.sh 是一个辅助脚本,用于构建 Java 库(.jar)、原生库(.so)和打包的 AAR 文件。

您需要 Android SDKNDK 才能使用它。

ExecuTorch CI 中使用的当前 NDK 版本:r27b。

您需要将 ANDROID_HOME 设置为 Android SDK 主目录,并将 ANDROID_NDK 设置为正确的 NDK 根目录(包含 NOTICE 文件)。

export ANDROID_HOME=/path/to/sdk
export ANDROID_NDK=/path/to/ndk
sh scripts/build_android_library.sh

目前,XNNPACK 后端始终使用该脚本进行构建。

可选环境变量

可选地,在运行 build_android_library.sh 之前设置这些环境变量。

ANDROID_ABIS

将环境变量 ANDROID_ABIS 设置为 arm64-v8ax86_64,如果您只需要为单个 ABI 构建原生库。

export ANDROID_ABIS=arm64-v8a
# or
# export ANDROID_ABIS=x86_64
sh scripts/build_android_library.sh

EXECUTORCH_CMAKE_BUILD_TYPE

根据您的需求,将环境变量 EXECUTORCH_CMAKE_BUILD_TYPE 设置为 ReleaseDebug

使用 MediaTek 后端

要使用 MediaTek 后端,在安装和设置好 SDK 后,将 NEURON_BUFFER_ALLOCATOR_LIBNEURON_USDK_ADAPTER_LIB 设置为相应的路径。

使用高通 AI 引擎后端

要使用 高通 AI 引擎后端,在安装和设置好 SDK 后,将 QNN_SDK_ROOT 设置为相应的路径。

使用 Vulkan 后端

要使用 Vulkan 后端,将 EXECUTORCH_BUILD_VULKAN 设置为 ON

Android 后端

以下后端可用于 Android:

后端

类型

文档

XNNPACK

CPU

文档

MediaTek NeuroPilot

NPU

文档

高通 AI 引擎

NPU

文档

Vulkan

GPU

文档

运行时集成

这是一个用 Java 编写的示例代码片段,演示了如何将 ExecuTorch 集成到 Android 应用中。

import org.pytorch.executorch.EValue;
import org.pytorch.executorch.Module;
import org.pytorch.executorch.Tensor;

public class MainActivity extends Activity {
    private Module module;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Load the ExecuTorch module
        Module module = Module.load("/data/local/tmp/add.pte");
        Tensor tensor1 = Tensor.fromBlob(new float[] {1.0f}, new long[] {1});
        Tensor tensor2 = Tensor.fromBlob(new float[] {20.0f}, new long[] {1});

        EValue eValue1 = EValue.from(tensor1);
        EValue eValue2 = EValue.from(tensor2);
        float result = module.forward(eValue1, eValue2)[0].toTensor().getDataAsFloatArray()[0];
    }
}

将相应的 pte 文件推送到手机

adb push extension/module/test/resources/add.pte /data/local/tmp/

此示例加载 ExecuTorch 模块,准备输入数据,运行推理,并处理输出数据。

请使用 DeepLabV3AndroidDemoLlamaDemo 来获取使用 ExecuTorch AAR 包的代码示例。

Java API 参考

请参阅 Java API 参考

文档

访问全面的 PyTorch 开发者文档

查看文档

教程

为初学者和高级开发者提供深入的教程

查看教程

资源

查找开发资源并让您的问题得到解答

查看资源