安卓模拟器找不到库



我正在尝试运行一个应用程序,但我遇到了一件奇怪的事情:该应用程序使用了一个库项目,我以这种方式将其加载到MainActivity中:

static{    
 System.loadLibrary("freerdp-android");
 }

现在,如果我用智能手机启动应用程序,没有问题,而如果我用模拟器启动它,我会得到这个:

08-27 20:10:51.637: E/AndroidRuntime(388): FATAL EXCEPTION: main
08-27 20:10:51.637: E/AndroidRuntime(388): java.lang.ExceptionInInitializerError
08-27 20:10:51.637: E/AndroidRuntime(388):  at java.lang.Class.newInstanceImpl(Native Method)
08-27 20:10:51.637: E/AndroidRuntime(388):  at java.lang.Class.newInstance(Class.java:1424)
08-27 20:10:51.637: E/AndroidRuntime(388):  at android.app.Instrumentation.newActivity(Instrumentation.java:1022)
...
08-27 20:10:51.637: E/AndroidRuntime(388): Caused by: java.lang.UnsatisfiedLinkError: Couldn't load freerdp-android: findLibrary returned null
08-27 20:10:51.637: E/AndroidRuntime(388):  at java.lang.Runtime.loadLibrary(Runtime.java:425)
08-27 20:10:51.637: E/AndroidRuntime(388):  at java.lang.System.loadLibrary(System.java:554)
08-27 20:10:51.637: E/AndroidRuntime(388):  ... 15 more

为什么?

有些应用程序(使用play store库)只在设备上运行,而不是在谷歌默认的android模拟器上运行,原因是依赖于其他应用程序,即play store应用程序和其他原因。

所以尝试使用新的genymotion android模拟器,它几乎没有比默认模拟器更多的功能。

首先它是

System.loadLibrary("freerdp_android");

正如Esparver所写,他回答了一个类似的问题:

在Java方面,看起来应该将其他库加载为好吧,按照适当的顺序:

static {
    System.loadLibrary("freerdp-utils");
    System.loadLibrary("freerdp-codec");
    System.loadLibrary("freerdp-gdi");
    System.loadLibrary("freerdp-core");
    System.loadLibrary("freerdp-rail");
    System.loadLibrary("freerdp-chche");
    System.loadLibrary("freerdp-crypto");
    System.loadLibrary("freerdp-sspi");
    System.loadLibrary("freerdp-channels");
    System.loadLibrary("rdpsnd_alsa");
    System.loadLibrary("cliprdr");
    System.loadLibrary("rdpsnd");
    System.loadLibrary("freerdp_android");
    System.loadLibrary("freerdp");
}

如果使用Gradle的externalNativeBuild,则必须将模拟设备ABI添加到Application.mk文件中的APP_ABI变量或Gradle中的abiFilters块中。

通常,您需要在列表中包含x86x86_64

请参阅NDK指南

最新更新