android-studio - Android中的Tensorflow,gradle问题

标签 android-studio gradle tensorflow

我正在尝试在工作的 android 中使用 tensorflow,这有点超出了默认项目文件夹。我修改了我的 build.gradle,但显然我错过了一些东西,因为我的应用程序在运行时崩溃,符合本地库的不可用性。我花了好几个小时来解决这个问题,但无济于事。有人可以帮忙吗?

基本上,我比较了工作 tf demo 和我的 .so 生成的 APK 中的 .so 文件,它们是不同的。所以我想我必须在我的脚本中的某个地方......

def bazel_location = '/usr/local/bin/bazel'
    def tf_location = '/home/poborak/SW/tensorflow-master'

    def cpuType = 'armeabi-v7a'
    def nativeDir = 'src/main/jniLibs/' + cpuType

project.buildDir = 'gradleBuild'
getProject().setBuildDir('gradleBuild')

buildscript {
    System.properties['com.android.build.gradle.overrideVersionCheck'] = 'true'

    repositories {
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.3'
    }
}

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"
    defaultConfig {
        applicationId "bazinac.aplikacenahouby"
        minSdkVersion 21
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    sourceSets {
        main {
            manifest.srcFile 'src/main/AndroidManifest.xml'
            java.srcDirs = ['src/main/java', tf_location+'/tensorflow/contrib/android/java']
            resources.srcDirs = ['src/main/java']
            aidl.srcDirs = ['src/main/java']
            renderscript.srcDirs = ['src/main/java']
            res.srcDirs = ['src/main/res']
            assets.srcDirs = ['src/main/assets']
            jniLibs.srcDirs = ['src/main/jniLibs']
            jni.srcDirs = []
        }

        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }

    buildTypes {

        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }

        debug {
            debuggable true
         }
    }
}


dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.android.support:design:23.4.0'
    testCompile 'junit:junit:4.12'
    compile 'org.apache.commons:commons-io:1.3.2'
}


task buildNative(type:Exec) {
    workingDir tf_location
    commandLine bazel_location, 'build', '-c', 'opt', \
      'tensorflow/examples/android:tensorflow_native_libs', \
       '--crosstool_top=//external:android/crosstool', \
       '--cpu=' + cpuType, \
       '--host_crosstool_top=@bazel_tools//tools/cpp:toolchain'
}

task copyNativeLibs(type: Copy) {
    from(tf_location+'bazel-bin/tensorflow/examples/android') { include '**/*.so' }
    into nativeDir
        duplicatesStrategy = 'include'
    }

    copyNativeLibs.dependsOn buildNative
    assemble.dependsOn copyNativeLibs

最佳答案

最后我找到了解决方法。就是将 Gradle 降级到 2.14.xx 和 Android Plugin 版本 2.1.3。然后我附加了 assembleDebug.dependsOn copyNativeLibs,它现在可以工作了。当然,我仍然会对更好的解决方案感兴趣。 (在较新的 APV 中无法识别 AssembleDebug 属性。

关于android-studio - Android中的Tensorflow,gradle问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41149048/

相关文章:

java - Android Studio,缺少android.support.annotation包

android-studio - Android Studio 1.1.0的Gradle同步失败

java - SwipeRefreshLayout 不遵守约束

java - 如何在相机 2 api 片段中捕获和预览显示到 ImageView ?

android - 用于通过git标签自动执行Android版本控制的Gradle脚本

java - 在 Android Studio 0.3.6 中添加外部库

python - 如何抑制张量中的小元素

tensorflow - 如何为三元组损失制作数据集

python - 获取参数 <tf.Tensor 'batch:0' shape=(128, 56, 56, 3) dtype=float32> 不能解释为张量。

java - 我们应该考虑哪些 build.gradle 文件,为什么?