最重要三点:注意版本,注意版本,注意版本!
- git pull git@github.com:XiaoMi/mace.git
- 照着https://mace.readthedocs.io/en/latest/installation/env_requirement.html#optional-dependencies,Docker不用装 ,把依赖项都装好,请一定要注意版本,TensorFlow不能用最新版,bazel不能用最新版,JDK也不能用最新版!不过我没有安装Docker和ONNX,但也是可以成功编译运行的。
- 在path中设置ANDROID_NDK_HOME和JAVA_HOME,NDK使用r15c,JDK使用1.8.0
- cd mace/mace
- sh build-standalone-lib.sh,这个命令是用来编译生成各个平台架构下的libmace.a和libmace.so,当然也可以修改脚本只编译对应平台的静态或动态库
- cd mace/examples/android/
- sh build.sh,这个脚本脚本里默认的架构是arm64-v8a,执行成功会生成apk,位于app/build/outputs/apk/release/。
- cd app/build/outputs/apk/release
- adb install -f app-app-release.apk
- 应用名默认是“识物”
我在过程中遇到3个问题,前两个是编译库时遇到的,第三个是生成app时遇到的,都与依赖项版本有关,现在贴出来,希望大家遇到了不要慌:
- no such package系列,原因时bazel版本过高,我最开始安装的是0.21.0,降到0.19.0以下就可以,最好安装推荐的版本。
ERROR: Analysis of target '//mace/libmace:libmace_dynamic' failed;
build aborted: no such package '@tflite//': The native http_archive rule is deprecated. load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") for a drop-in replacement.
Use --incompatible_remove_native_http_archive=false to temporarily continue using the native rule
- 提示tuple没有types属性,原因是TensorFlow版本不对,换成依项推荐版本即解决
AttributeError: 'tuple' object has no attribute
- 由于我使用的是ubuntu18.04,所以java版本是10.0.2,gradle是3.0.1,解决这个问题,两个办法,一是升级gradle,二是降级java版本。第一种需要修改工程中的gradle相关文件,推荐使用第二种,下载JDK1.8.0,然后在path中将JAVA_HOME指向JDK1.8.0的路径,问题解决。
Error:Could not determine java version from “10.0.2"