Android studio编译TensorFlow lite工程

1.系统环境

window10/tensorflow-gpu  1.8.0/Python 3.6.4/cuda 9.0/cudnn-9.0-windows10-x64-v7/Android studio 3.1.2

2.源码下载

从Github上下载最新的TensorFlow源码,下载路径:https://github.com/tensorflow/tensorflow.git

3.TensorFlow lite项目导入

Android studio中导入tensorflow\contrib\lite\java\demo目录下的工程,导入工程过程中,Android studio会根据工程配置,下载组件,大约需要5分钟(根据网络状况而定)。

错误1:Error:Your project path contains non-ASCII characters. This will most likely cause the build to fail on Windows. Please move your project to a different directory. See http://b.android.com/95744 for details. This warning can be disabled by adding the line 'android.overridePathCheck=true' to gradle.properties file in the project directory.

意思是工程目录中有中文路径,笔者比较懒,未重新在其他目录下打开,在gradle.properties中添加android.overridePathCheck=true即可

错误2:Failed to find target with hash string 'android-26' in: C:\Users\XX\AppData\Local\Android\Sdk

没有相应的sdk,直接点击下载即可

错误3:Failed to find Build Tools revision 26.0.1

没有安装编译工具,直接点击下载安装即可

错误4:Failed to resolve: com.android.support.constraint:constraint-layout:1.0.2

在Module的build.gradle中导入了compile 'com.android.support.constraint:constraint-layout:1.0.2',但未安装该库,直接点击下载安装即可。

关键:在这一步一定要选择update,不然后面编译会报错,工程中classpath 'com.android.tools.build:gradle:2.3.1',选择update后会被更新为classpath 'com.android.tools.build:gradle:3.1.2',这里3.1.2对应为笔者使用的Android studio版本


错误5:Could not find method jackOptions() for arguments [build_3m9f21u2svx90yaz0c7evm6pp$_run_closure1$_closure4$_closure9@40991bbd] on DefaultConfig_Decorated{name=main, dimension=null, minSdkVersion=DefaultApiVersion{mApiLevel=15, 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=android.support.test.runner.AndroidJUnitRunner, 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.
工程在Module的build.gradle中使用了jack编译,jack编译器已经被google废弃,直接删除
jackOptions {
    enabled true
}

错误6:Failed to find Build Tools revision 27.0.3

直接点击下载安装即可

错误7:Error: java.util.concurrent.ExecutionException: com.android.builder.internal.aapt.v2.Aapt2Exception: AAPT2 error: check logs for details

Android的Gradle 3.0以上版本插件默认启动Aapt2,目的是为了改进增量资源的处理,可以在gradle.properties文件中添加android.enableAapt2=false

错误8:The specified Android SDK Build Tools version (26.0.1) is ignored, as it is below the minimum supported version (27.0.3) for Android Gradle Plugin 3.1.2.
Android SDK Build Tools 27.0.3 will be used.

由于手上只有Android8.0.0版本手机,需要降低grade版本号,修改project的build.gradle中classpath 'com.android.tools.build:gradle:3.0.1'

4.编译apk

问题9:

错误: 找不到符号
符号:   方法 setNumThreads(int)
位置: 类型为Interpreter的变量 tflite

注释掉:

if (tflite != null)
    tflite.setNumThreads(num_threads);

编译完成,在tensorflow\contrib\lite\java\demo\app\build\outputs\apk\debug下生成app-debug.apk。

最后下载模型,解压到tensorflow\contrib\lite\java\demo\app\src\main\assets,重新编译apk即可使用。

https://storage.googleapis.com/download.tensorflow.org/models/tflite/inception_v3_slim_2016_android_2017_11_10.zip
https://storage.googleapis.com/download.tensorflow.org/models/tflite/mobilenet_v1_224_android_quant_2017_11_08.zip

补充:window10 ,Android studio 3.0,tensorflow 1.8导入tensorflow\tensorflow\examples\android工程可能还会遇到以下错误:

Unable to find source java class:
 'D:\\github\tensorflow\tensorflow\java\src\main\java\org\tensorflow\op\core\Constant.java' 
because it does not belong to any of the source dirs:
 '[D:\\github\tensorflow\tensorflow\examples\android\src\main\java,
 D:\\github\tensorflow\tensorflow\examples\android\src,
 D:\\github\tensorflow\tensorflow\examples\android\build-types\debug\java,
 D:\\github\tensorflow\tensorflow\examples\android\gradleBuild\generated\source\r\debug,
 D:\\github\tensorflow\tensorflow\examples\android\gradleBuild\generated\source\buildConfig\debug,
 D:\\github\tensorflow\tensorflow\examples\android\gradleBuild\generated\source\aidl\debug,
 D:\\github\tensorflow\tensorflow\examples\android\gradleBuild\generated\source\rs\debug]'

该问题是Android studio导入工程的bug,可以通过build->rebuild project解决。


猜你喜欢

转载自blog.csdn.net/u010349092/article/details/80683744