致命异常:Android Studio库中的主要java.lang.UnsatisfiedLinkError

时间:2013-12-04 08:18:33

标签: android android-studio android-library

我在android studio的项目的libs文件夹中添加了FDxSDKProAndroid.jar文件。还在build.gradle文件中添加了依赖项。

dependencies {
    compile 'com.android.support:support-v4:18.0.0'
    compile 'com.google.android.gms:play-services:4.0.30'
    compile files('libs/FDxSDKProAndroid.jar')
}

项目正确构建没有任何错误,但onRuntime我遇到以下错误,如何解决此错误?

以下行发生错误,

sgfplib=new JSGFPLib((UsbManager)getSystemService(Context.USB_SERVICE));

错误:

12-04 13:35:13.022  12345-12345/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.UnsatisfiedLinkError: Couldn't load jnisgfplib from loader dalvik.system.PathClassLoader[DexPathList[dexElements=[zip file "/data/app/com.mycompany.mytrack-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.mycompany.mytrack-1, /vendor/lib, /system/lib]]]: findLibrary returned null
            at java.lang.Runtime.loadLibrary(Runtime.java:359)
            at java.lang.System.loadLibrary(System.java:514)
            at SecuGen.FDxSDKPro.JSGFPLib.<clinit>(JSGFPLib.java:150)
            at com.mycompany.mytrack.FingerPrintActivity.onCreate(FingerPrintActivity.java:105)
            at android.app.Activity.performCreate(Activity.java:5122)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2270)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358)
            at android.app.ActivityThread.access$600(ActivityThread.java:156)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1340)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:153)
            at android.app.ActivityThread.main(ActivityThread.java:5297)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
            at dalvik.system.NativeStart.main(Native Method)
12-04 13:35:13.033      511-529/? E/AppErrorDialog﹕ Failed to get ILowStorageHandle instance

4 个答案:

答案 0 :(得分:23)

您可以将.so个文件放入jniLibs的{​​{1}}文件夹中。这是在AS 0.7.2 1

中引入的

作为示例,请参阅this中的@CommonsWare,或查看此page了解官方样本(滚动到页面底部)

答案 1 :(得分:3)

看起来它正在尝试加载本机库,并且Android Gradle中还没有支持本机代码。您应该仔细检查您的图书馆的文档以确认;我试图查找它,但它看起来像是一个没有可公开访问的文档的商业图书馆。

答案 2 :(得分:3)

这是我在尝试将.so文件导入Android Studio 1.5时与同一个指纹库集成时的最后一次黑客攻击 此行发生错误

sgfplib=new JSGFPLib((UsbManager)getSystemService(Context.USB_SERVICE));

解决方法是在src / main / jniLibs中创建一个名为armeabi-v7a的文件夹,因此层次结构应该作为附加的屏幕截图。

enter image description here

希望这可以帮助:)使用最新的Android Studio 1.5

答案 3 :(得分:2)

有一种方法..但它是一个简单的黑客。 你可以绑定armeabi文件夹里面有XXXX.so文件。

这些是本机代码,而@Scott Barta表示Android Gradle中不支持本机代码。

所以让我们像普通的jar文件一样包装它。 第1步:创建一个文件夹并将其命名为'lib' 第2步:在lib文件夹中获取armeabi&gt; xxxx.so文件。 Setp 3:现在压缩lib文件并将压缩文件命名为XXXXX.zip。

现在项目结构将是XXXX.zip-lib-armeabi-xxxx.so

步骤4:将zip文件复制到android studio的Libs文件夹。 步骤5:将xxxx.zip重命名为xxxx.jar 第6步:将以下代码粘贴到gradle的依赖项中。

依赖{     编译fileTree(dir:'libs',包括:'* .jar') }

现在同步gradle然后运行。

注意:只有当模拟器的cpu是armeabi时,此armeabi才有效。 对于intel x86,您可能需要在zip中创建“x86”文件夹并将相应的.so文件粘贴到该文件夹​​中。

这对我有用。试试吧:)

快乐编码..