在 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 代码加载。
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 模型。
直接使用 AAR 文件¶
您也可以直接在应用中指定一个 AAR 文件。我们在每次发布时都会将预编译的 AAR 上传到 S3,或者作为快照。
已发布版本(推荐)¶
版本 |
AAR |
SHASUMS |
---|---|---|
主分支的快照¶
从 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 文件添加到您的应用
下载 AAR。
将其作为文件路径添加到您的 Gradle 构建规则中。
AAR 文件本身不包含依赖项信息,不像 Maven 中的 AAR 包含了 pom.xml。Java 包需要 fbjni
和 soloader
,目前要求用户显式声明依赖项。因此,需要在 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 文件。
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-v8a
或 x86_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
设置为 Release
或 Debug
。
使用 MediaTek 后端¶
要使用 MediaTek 后端,在安装和设置好 SDK 后,将 NEURON_BUFFER_ALLOCATOR_LIB
和 NEURON_USDK_ADAPTER_LIB
设置为相应的路径。
使用高通 AI 引擎后端¶
要使用 高通 AI 引擎后端,在安装和设置好 SDK 后,将 QNN_SDK_ROOT
设置为相应的路径。
运行时集成¶
这是一个用 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 模块,准备输入数据,运行推理,并处理输出数据。
请使用 DeepLabV3AndroidDemo 和 LlamaDemo 来获取使用 ExecuTorch AAR 包的代码示例。
Java API 参考¶
请参阅 Java API 参考。