我正在尝试添加一个外部库,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文件的目录。
答案 0 :(得分:68)
您可以使用gradle 0.7.2+在Android Studio中添加预先构建的* .so文件。首先在这个位置/ app / src / main / location创建jniLibs,然后在jniLibs中复制带有* .so文件(armeabi,armeabi-v7a,mips,x86)的所有文件夹。
答案 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'
答案 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壁画库中获取此代码