特别注意:全程请保持网络能正常访问 google
GITHUB:https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/android
- 准备 android 5.1 版本以上的 手机 低版本的不支持。
- 下载 tensorflow 源码
git clone --recurse-submodules https://github.com/tensorflow/tensorflow
git clone git@github.com:tensorflow/tensorflow.git - 用 android studio 打开
- 试着 run了一下 出现错误
Error:Execution failed for task ':buildNativeBazel'. > A problem occurred starting process 'command '/usr/local/bin/bazel''
- 需要安装 bazel ( 我在 mac 上开发的。 ubuntu 或者window 参考 https://docs.bazel.build/versions/master/install-os-x.html
brew cask install caskroom/versions/java8
brew install bazel
- 需要安装 NDK
android studio : file -> project structure -> SDK location 最后的 Android NDK location 如果为空 ,点下面的 download下载,并解压。将路径填到上面的框里。https://dl.google.com/android/repository/android-ndk-r12b-darwin-x86_64.zip
- 需要安装 bazel ( 我在 mac 上开发的。 ubuntu 或者window 参考 https://docs.bazel.build/versions/master/install-os-x.html
- 到tensorflow 工作目录 编译(需要下载包)
-
bazel build -c opt //tensorflow/examples/android:tensorflow_demo
- 出错误 ,原因是 tensorflow 工作目录里没有 andorid sdk
-
This build requires an Android SDK. Please add the android_sdk_repository rule to your WORKSPACE.
-
clang: error: unknown argument: '-m<platform_for_version_min>-version-min=11.1'
打开 tensorflow 根目录下的 WORKSPACE 编辑 sdk 和 ndk
- 又报错误
C++ compilation of rule '@protobuf_archive//:protobuf' failed (Exit 1). fatal error: 'stdlib.h' file not found #include <stdlib.h>
原因是 git 时没有加 –recurse-submodules 参数 。用于获取 TesorFlow 依赖的 protobuf 库
- 依然还有错误,一堆 .h 文件找不到。查了些资料,说 NDK不能超过 r12b ,重新下载个 r12b , 替换掉默认的。( tensorflow 文档推荐的是 14b,我没有试应该也可以。我之前下的是 16)
https://dl.google.com/android/repository/android-ndk-r12b-darwin-x86_64.zip
- OK成功
Target //tensorflow/examples/android:tensorflow_demo up-to-date: bazel-bin/tensorflow/examples/android/tensorflow_demo_deploy.jar bazel-bin/tensorflow/examples/android/tensorflow_demo_unsigned.apk bazel-bin/tensorflow/examples/android/tensorflow_demo.apk INFO: Elapsed time: 861.504s, Critical Path: 99.12s
- 编译完的 apk 在一个非常诡异的位置
//tensorflow/bazel-out/darwin_x86_64-opt/bin/tensorflow/examples/android/tensorflow_demo.apk
adb install -r ./bazel-out/darwin_x86_64-opt/bin/tensorflow/examples/android/tensorflow_demo.apk
mac安装 adb
brew cask install android-platform-tools
- 可能出现如下错误
-
Gradle sync failed: Cause: error in opening zip file Consult IDE log for more details (Help | Show Log) (451ms)
将 gradle-wrapper.properties 中
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
替换成
distributionUrl=http\://services.gradle.org/distributions/gradle-4.1-all.zip
出错误Xcode version must be specified to use an Apple CROSSTOOL
bazel clean --expunge sudo xcode-select -s /Applications/Xcode.app/Contents/Developer sudo xcodebuild -license
- 附,解决最后问题的一篇文章,顺带致谢。
http://blog.csdn.net/wojiaopanpan/article/details/77488056
站住你好,我是个新手最近想做tf的安卓部署,想请教下,bazel的版本有要求吗,我brew install bazel的下载速度实在令人发指,无奈弄了个之前的版本;另外我用bazel 0.7.0版本做build,报错如下:C++ compilation of rule ‘//tensorflow/examples/android:libtensorflow_demo.so’ failed (Exit 1).
src/main/tools/process-wrapper-legacy.cc:56: “execvp(/bin/false, …)”: No such file or directory 还请求教是什么情况呀
你 bazel 升到最新版本试试。