在Android Studio中添加.so文件

时间:2013-05-23 04:59:59

标签: android android-studio

我正在尝试添加一个外部库,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文件的目录。

5 个答案:

答案 0 :(得分:68)

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

enter image description here

答案 1 :(得分:7)

使用本机库(所以文件) 您需要在“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

答案 2 :(得分:6)

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

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

# MyClass.py
import threading
import time

class MyClass:
    def check_list(self, theList, arg1):
        a_list = something()
        time.sleep(5)
        self.check_list(a_list, arg1)

    def __init__(self, arg1):
        if __name__ == '__main__':
            self.a_list = arg.returnAList()
            t = threading.Thread(target=self.check_list, args=(a_list, arg1))

我从facebook壁画库中获取此代码