我正在尝试运行一个应用程序,我得到一个奇怪的事情: 该应用程序使用一个库项目,我已经以这种方式将它加载到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
为什么?
答案 0 :(得分:0)
首先是
System.loadLibrary("freerdp_android");
并且,正如Esparver wrote,回答类似的问题:
在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"); }
答案 1 :(得分:0)
有些应用程序(使用Play商店库)只能在谷歌默认的Android模拟器上运行,因为依赖于其他应用程序,即播放商店应用程序和其他一些原因。
因此尝试使用新的genymotion android模拟器,它比默认模拟器具有更多功能。
答案 2 :(得分:0)
如果使用Gradle的APP_ABI
,则必须将仿真设备ABI添加到Application.mk
文件中的abiFilters
变量或Gradle中的externalNativeBuild
块中。
通常,您的列表中需要包含x86
或x86_64
。
请参见NDK Guide