在编译imsdroid得到" java.lang.UnsatisfiedLinkError"时,我该怎么办?

时间:2016-08-22 04:32:56

标签: android imsdroid

此处我提供错误,而编译' imsdroid ':

Native code library failed to load.
dlopen failed: library "/data/data/org.doubango.imsdroid/lib/libtinyWRAP.so" not found



  Process: org.doubango.imsdroid, PID: 9195
    > java.lang.UnsatisfiedLinkError: Native method not found org.doubango.tinyWRAP.tinyWRAPJNI.swig_module_init:()V
    > at org.doubango.tinyWRAP.tinyWRAPJNI.swig_module_init(Native Method)
    > at org.doubango.tinyWRAP.tinyWRAPJNI.<clinit>(tinyWRAPJNI.java:554)
    > at org.doubango.tinyWRAP.XcapCallback.<init>(XcapCallback.java:0)
    > at org.doubango.imsdroid.Services.Impl.XcapService$MyXcapCallback.<init>(XcapService.java:0)
    > at org.doubango.imsdroid.Services.Impl.XcapService.<init>(XcapService.java:93)
    > at org.doubango.imsdroid.Services.Impl.ServiceManager.<clinit>(ServiceManager.java:91)
    > at org.doubango.imsdroid.Main.<init>(Main.java:132)
    > at java.lang.Class.newInstanceImpl(Native Method)
    > at java.lang.Class.newInstance(Class.java:1208)
    > at android.app.Instrumentation.newActivity(Instrumentation.java:1068)
    > at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2288)
    > at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2493)
    > at android.app.ActivityThread.access$800(ActivityThread.java:166)
    > at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1283)
    > at android.os.Handler.dispatchMessage(Handler.java:102)
    > at android.os.Looper.loop(Looper.java:136)
    > at android.app.ActivityThread.main(ActivityThread.java:5584)
    > at java.lang.reflect.Method.invokeNative(Native Method)
    > at java.lang.reflect.Method.invoke(Method.java:515)
    > at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
    > at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
    > at dalvik.system.NativeStart.main(Native Method)

有人可以给我一些建议来克服这个错误吗?

2 个答案:

答案 0 :(得分:0)

您的应用程序尝试加载本机库,检查此文件是否存在。这个问题最常出现是因为库不存在,或者JVM无法定位。这些Exception类的结构就在这里,

public class UnsatisfiedLinkErrorExample {

     // Define a method that is defined externally.
     native void CFunction();

     // Load an external library, called "clibrary".
     static {
          System.loadLibrary("clibrary");
     }

     public static void main(String argv[]) {
          UnsatisfiedLinkErrorExample example = new UnsatisfiedLinkErrorExample();
          example.CFunction ();
     }
}

有关详细信息,请参阅此处Exception

答案 1 :(得分:0)

IMSDroid使用Doubango后端支持库作为JNI Lib依赖项。 您必须按照步骤Building Doubango在Linux计算机上设置Doubango编译,以生成libTinyWRAP.so

这有点棘手,因为我最初对linux make文件等的了解并不多,所以我已经做了整整一年的工作。说明和文档也很有限。因此,如果您是初学者,则需要进行很多不眠之夜和在线咨询,然后才能按照自己的意愿进行工作。

毫无疑问,IMSDroid稳定且可以正常运行,并且功能强大且相当可靠。 Doubango库也很不错,但是没有任何具体文档。 即使在今天,与进行视频通话仍然是一回事!

您看到的此错误显然是因为libTinyWRAP.so文件不在应有的文件夹中,并且在安装应用程序时,此库未复制到设备上所需的lib文件夹中。

在Android Studio中使用Shift + Ctrl + F,然后寻找loadLibrary,它应该在android-ngn-stack内部或某些Engine.javaNgnEngine.java内部。您的错误来自那里。