如何在NDK 22+版本构建适配ARM64的TensorFlow Lite?
适配NDK25构建TensorFlow Lite for Android ARM64的解决方案
问题2解答:无需局限于NDK≤21,可使用NDK22+构建TFLite
TensorFlow 2.11支持通过调整构建配置适配NDK22+版本,官方文档的Bazel限制是由于旧版Bazel的兼容性问题,可通过修改Bazel配置或改用CMake构建绕过。推荐使用CMake构建,更贴合Android项目的CMake集成流程。
问题1:正确的构建配置步骤
提供两种可行方案,按需选择:
方案一:修改Bazel配置适配NDK25构建
环境准备
- 安装Bazel 5.3.0及以上版本(TF2.11推荐版本,对NDK22+兼容性更好)
- 确认NDK25的完整路径,例如
~/Android/Sdk/ndk/25.2.9519653
调整TensorFlow源码配置
- 打开
tensorflow/workspace.bzl,找到android_ndk_repository节点,修改参数:android_ndk_repository( name = "androidndk", api_level = 21, # 或你的目标Android API版本 ndk_version = "25.2.9519653", path = "~/Android/Sdk/ndk/25.2.9519653", platforms_root = "~/Android/Sdk/ndk/25.2.9519653/platforms" # 解决platforms目录找不到问题 )
- 打开
运行配置脚本
./configure交互流程中:
- 询问"Do you wish to build TensorFlow with Android NDK support?"时选
Yes - 输入NDK的完整绝对路径
- 指定Android API level为21或更高版本
- 其余选项按需选择,最后确认配置
- 询问"Do you wish to build TensorFlow with Android NDK support?"时选
构建ARM64架构的TFLite动态库
bazel build --config=android_arm64 //tensorflow/lite:libtensorflowlite.so构建产物路径:
bazel-bin/tensorflow/lite/libtensorflowlite.so
方案二:使用CMake直接构建(推荐,无需Bazel)
此方案更适配Android项目的CMake集成流程,兼容性更强:
获取TF2.11源码
git clone https://github.com/tensorflow/tensorflow.git cd tensorflow git checkout v2.11.0创建构建目录并配置CMake
mkdir build_android_arm64 && cd build_android_arm64执行CMake配置(替换NDK路径为你的实际路径):
cmake .. \ -DCMAKE_SYSTEM_NAME=Android \ -DCMAKE_SYSTEM_VERSION=21 \ -DCMAKE_ANDROID_ARCH_ABI=arm64-v8a \ -DCMAKE_ANDROID_NDK=~/Android/Sdk/ndk/25.2.9519653 \ -DCMAKE_ANDROID_STL_TYPE=c++_shared \ -DTFLITE_ENABLE_XNNPACK=ON \ -DTFLITE_BUILD_SHARED_LIB=ON \ -DCMAKE_BUILD_TYPE=Release参数说明:
TFLITE_BUILD_SHARED_LIB=ON:构建动态库.soTFLITE_ENABLE_XNNPACK=ON:可选,开启XNNPACK硬件加速CMAKE_ANDROID_STL_TYPE=c++_shared:使用C++共享库,需与项目配置一致
执行构建
make -j$(nproc) libtensorflowlite构建产物路径:
build_android_arm64/libtensorflowlite.so
集成到Android项目
- 将构建好的
libtensorflowlite.so复制到Android项目的app/src/main/jniLibs/arm64-v8a/目录 - 在项目的
CMakeLists.txt中添加链接配置:# 导入TFLite动态库 add_library(tensorflowlite SHARED IMPORTED) set_target_properties(tensorflowlite PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/../jniLibs/arm64-v8a/libtensorflowlite.so ) # 链接到你的原生库 target_link_libraries(your-native-lib-name tensorflowlite android log )
内容的提问来源于stack exchange,提问作者Turgut
相关产品推荐
相关产品推荐

