UnsatisfiedLinkError:findLibrary返回null

时间:2015-03-26 20:34:50

标签: android java-native-interface google-glass

我正在撰写Google Glass应用程序。我正在使用第三方库,其中包含一些资产(以及将它们放在assets / dir中的说明),一些罐子(以及将它们放在libs / dir中的说明)和.so(以及放置的说明)它在libs / armenabi-v7a /).

当我运行应用程序时,我得到一个UnsatisfiedLinkError,看起来没有包含.so。解压缩这个证实了这一点,我没有在任何地方看到.so。

java.lang.UnsatisfiedLinkError: Couldn't load nameofsofile_jni from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.package.demo-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.package.demo-1, /vendor/lib, /system/lib]]]: findLibrary returned null
        at java.lang.Runtime.loadLibrary(Runtime.java:358)
        at java.lang.System.loadLibrary(System.java:529)
        at <Calls inside the external library>

我的build.gradle:

apply plugin: 'com.android.application'

repositories {
    jcenter()
    flatDir {
        dirs 'prebuilt-libs'
 }
}

android {
    compileSdkVersion "Google Inc.:Glass Development Kit Preview:19"
    buildToolsVersion "21.1.2"

defaultConfig {
    applicationId "com.package.demo"
    minSdkVersion 19
    targetSdkVersion 21
    versionCode 1
    versionName "1.0"
}

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
}

dependencies {
    compile fileTree(dir: new File(buildDir, 'libs'), include: '*.jar')
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile files('src/main/libs/jarone.jar')
    compile files('src/main/libs/jartwo.jar')
    compile files('src/main/libs/jarthree.jar')
}

如何让它包含.so?

1 个答案:

答案 0 :(得分:1)

默认情况下,Android Studio中的.so文件应放在src/main/jniLibs/而不是src/main/libs/。我没有理由让您更改此设置,但可以将以下代码添加到android{}文件的build.gradle部分。

sourceSets.main {
    jniLibs.srcDir 'src/main/libs'
}