写在开始
- 在这篇文章中, 会手把手教你如何在你的电脑上将Tensorflow-lite Android Demo给跑起来, 希望会对那些需要在Android原生应用落地的童鞋有所帮助.
准备工作
- 下载Android Studio(我直接下的最新的)
下载地址: https://developer.android.com/studio/
- 从github上clone Tensorflow
➜ sample ✗ git clone https://github.com/tensorflow/tensorflow.git Cloning into 'tensorflow'... remote: Enumerating objects: 7, done. remote: Counting objects: 100% (7/7), done. remote: Compressing objects: 100% (7/7), done. remote: Total 479815 (delta 0), reused 6 (delta 0), pack-reused 479808 Receiving objects: 100% (479815/479815), 282.03 MiB | 7.41 MiB/s, done. Resolving deltas: 100% (385210/385210), done. Checking out files: 100% (13949/13949), done.
导入项目, 开干.!!
- 打开Android Studio:
- 先别导入项目, 直接点击Configure->SDK Manager:
- 这里需要安装SDK和NDK(其实选择Android 9.0和NDK就可以了, 我这里有些包之前装的, 直接打勾, 点ok就好):
- 安装好SDK和NDK之后, 点击Open an existing Android Studio Project:
- 选择我们刚刚clone下来的项目中的tensorflow/tensorflow/lite/java/demo目录:
- 然后需要等待一会, 导入项目会自动去下载一些依赖包, 过一会右下角会有如下提示, 点击 Add root:
- 如果一直卡在这个界面, 请点击右边那个小叉叉关闭当前的process, 并点击左上角Preferences->Appearance & Behavior->System Settings->HTTP Proxy检查你的proxy配置:
- 如果出现找不到toolchains的错误, 请手动下载NDK覆盖原NDK目录:
错误: Gradle sync failed: No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android Consult IDE log for more details (Help | Show Log) (1 m 7 s 18 ms)
解决方案:
- 到NDK官网下载对应平台的NDK (我直接下的最新的mac版本) https://developer.android.com/ndk/downloads/?hl=zh-cn
- 解压文件, 并拷贝至指定目录(这里以macos为例; Windows, Linux思路一致, 请自行google)
➜ ndk ✗ unzip android-ndk-r16b-darwin-x86_64.zip ➜ ndk ✗ rm -rvf ~/Library/Android/sdk/ndk-bundle ➜ ndk ✗ cp -rvf android-ndk-r16b ~/Library/Android/sdk/ndk-bundle
改为我们手动下载的NDK之后, 点击右上角的这个按钮, sync一下:
- 然后等一会, 会跳出这个框框要更新Gradle Plugin, 点击Update:
- 过一会, 发现右下角报了个这个错误:
Gradle sync failed: Could not find method jackOptions() for arguments [build_c83lec3ciu5xopt1opuwlj8q5$_run_closure1$_closure6$_closure11@1b729409] on DefaultConfig_Decorated{name=main, dimension=null, minSdkVersion=DefaultApiVersion{mApiLevel=21, mCodename='null'}, targetSdkVersion=DefaultApiVersion{mApiLevel=26, mCodename='null'}, renderscriptTargetApi=null, renderscriptSupportModeEnabled=null, renderscriptSupportModeBlasEnabled=null, renderscriptNdkModeEnabled=null, versionCode=1, versionName=1.0, applicationId=android.example.com.tflitecamerademo, testApplicationId=null, testInstrumentationRunner=null, testInstrumentationRunnerArguments={}, testHandleProfiling=null, testFunctionalTest=null, signingConfig=null, resConfig=null, mBuildConfigFields={}, mResValues={}, mProguardFiles=[], mConsumerProguardFiles=[], mManifestPlaceholders={}, mWearAppUnbundled=null} of type com.android.build.gradle.internal.dsl.DefaultConfig. Consult IDE log for more details (Help | Show Log) (40 s 747 ms)
别慌, 我们去build.gradle(Module:app)里面将这段内容注释掉就好了, 注意画圈圈的地方:
然后再点击这个小按钮:
- 又是一小段等待时间, 然后会发现有两个提示, 不着急, 打勾的地方, 一个一个点:
- 然后catch到另外一个错误:
Could not find com.android.tools.build:aapt2:3.2.1-4818971. Searched in the following locations: file:/Users/Kyle/Library/Android/sdk/extras/m2repository/com/android/tools/build/aapt2/3.2.1-4818971/aapt2-3.2.1-4818971.pom file:/Users/Kyle/Library/Android/sdk/extras/m2repository/com/android/tools/build/aapt2/3.2.1-4818971/aapt2-3.2.1-4818971-osx.jar file:/Users/Kyle/Library/Android/sdk/extras/google/m2repository/com/android/tools/build/aapt2/3.2.1-4818971/aapt2-3.2.1-4818971.pom file:/Users/Kyle/Library/Android/sdk/extras/google/m2repository/com/android/tools/build/aapt2/3.2.1-4818971/aapt2-3.2.1-4818971-osx.jar file:/Users/Kyle/Library/Android/sdk/extras/android/m2repository/com/android/tools/build/aapt2/3.2.1-4818971/aapt2-3.2.1-4818971.pom file:/Users/Kyle/Library/Android/sdk/extras/android/m2repository/com/android/tools/build/aapt2/3.2.1-4818971/aapt2-3.2.1-4818971-osx.jar https://jcenter.bintray.com/com/android/tools/build/aapt2/3.2.1-4818971/aapt2-3.2.1-4818971.pom https://jcenter.bintray.com/com/android/tools/build/aapt2/3.2.1-4818971/aapt2-3.2.1-4818971-osx.jar https://google.bintray.com/tensorflow/com/android/tools/build/aapt2/3.2.1-4818971/aapt2-3.2.1-4818971.pom https://google.bintray.com/tensorflow/com/android/tools/build/aapt2/3.2.1-4818971/aapt2-3.2.1-4818971-osx.jar Required by: project :app
别慌, 只是少了点东西, 淡定的打开build.gradle(Project:demo), 加上箭头指的这行. (注意标红的两个地方, 一个是文件名, 一个是增加的内容):
然后再点击这个小按钮:
- 然后经过一小段时间的等待, 可以发现只剩下一个warning了:
- 既然是警告, 说明代码还是可以正常运行的, 我们继续. 试试能不能编译成apk导出来在手机上安装测试:
- 出现打包成功的提示, 点击标红的这里, 会自动打开apk所在文件夹:
- 然后我们将其拷贝到手机上, 安装:
- 欧了, 跑起来:
写在结束
- 总体上来说, 坑还是有的, 但是如果用心爬的话, 还是可以爬出来, 这只是开始, 后续想要在Android上面直接跑模型, 还有很长的路要走, 大家共勉吧.
Be First to Comment