27

我正在尝试添加一个外部库 Scandit。我不断收到此错误:

    java.lang.UnsatisfiedLinkError: Couldn't load scanditsdk-android-3.3.1 from loader dalvik.system.PathClassLoader[dexPath=/data/app/com.clover.barcode2-1.apk,libraryPath=/data/app-lib/com.clover.barcode2-1]: findLibrary returned null
    at java.lang.Runtime.loadLibrary(Runtime.java:365)
   .....

我认为这是因为我没有正确包含库附带的 .so 文件,但我不知道该怎么做。

我正在使用 Android Studio,我通过转到模块设置 - > 库添加了库,并添加了带有 jar 的目录和带有 so 文件的目录。

4

5 回答 5

78

您可以使用 gradle 0.7.2+ 在 Android Studio 中添加预构建的 *.so 文件。首先在 /app/src/main/ 位置创建 jniLibs,并复制 jniLibs 中所有带有 *.so 文件(armeabi、armeabi-v7a、mips、x86)的文件夹。

在此处输入图像描述

于 2014-03-16T18:16:18.923 回答
9

要使用本机库(so 文件),您需要在“build.gradle”文件中添加一些代码。

此代码用于在“清理项目”时清理“armeabi”目录并将“so”文件复制到“armeabi”中。

task copyJniLibs(type: Copy) {
    from 'libs/armeabi'
    into 'src/main/jniLibs/armeabi'
}
tasks.withType(JavaCompile) {
    compileTask -> compileTask.dependsOn(copyJniLibs)
}
clean.dependsOn 'cleanCopyJniLibs'

我是从下面提到的。 https://gist.github.com/pocmo/6461138

于 2015-03-04T07:54:55.097 回答
6

我的项目中有一个 libs 文件夹,其中包含了外部库,将行 compile fileTree(dir: 'libs', include: '*.jar') 添加到 gradle 的构建文件中的 dependencies {} 中。

然后我创建了一个 lib 文件夹,并在其中创建了一个 armeabi 文件夹,我在其中插入了所有需要的 .so 文件。然后我将文件夹压缩成 .zip(zip 文件中的结构现在是 lib/armeabi/*.so),我将 .zip 文件重命名为 armeabi.jar 并将其作为外部库添加到 libs 文件夹中。

于 2015-05-09T01:55:12.173 回答
1

我认为这是新的 gradle 构建系统的问题。尝试这个答案的解决方案。还有一个谷歌小组讨论的链接,它更详细地描述了解决方案和问题。

于 2013-06-24T17:42:29.393 回答
-1
splits {
    abi {
        enable true
        reset()
        include 'x86', 'x86_64', 'arm64-v8a', 'armeabi-v7a', 'armeabi'
        universalApk false
    }
}

我从 facebook fresco library 得到这个代码

于 2015-07-07T12:16:13.627 回答