Android上的GdxRuntimeException:无法为目标加载共享库“gdx”

我开发了一个Libgdx应用程序,并在我的Samsung Galaxy S3(4.1.2)上进行了testing,效果很好。 我试图在Galaxy Grand(4.1.2)上testing它,但是失败了。 在logcat中,我发现了以下内容:

caused by com.badlogic.gdx.utils.GdxRuntimeException couldn't load shared library 'gdx' for target: Linux, 32-bit 

这只发生在改变设备,所以不知道是什么原因?!

完整的logcat:

 05-22 20:25:01.745: E/AndroidRuntime(12725): FATAL EXCEPTION: main 05-22 20:25:01.745: E/AndroidRuntime(12725): java.lang.ExceptionInInitializerError 05-22 20:25:01.745: E/AndroidRuntime(12725): at java.lang.Class.newInstanceImpl(Native Method) 05-22 20:25:01.745: E/AndroidRuntime(12725): at java.lang.Class.newInstance(Class.java:1319) 05-22 20:25:01.745: E/AndroidRuntime(12725): at android.app.Instrumentation.newActivity(Instrumentation.java:1068) 05-22 20:25:01.745: E/AndroidRuntime(12725): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2025) 05-22 20:25:01.745: E/AndroidRuntime(12725): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135) 05-22 20:25:01.745: E/AndroidRuntime(12725): at android.app.ActivityThread.access$700(ActivityThread.java:140) 05-22 20:25:01.745: E/AndroidRuntime(12725): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237) 05-22 20:25:01.745: E/AndroidRuntime(12725): at android.os.Handler.dispatchMessage(Handler.java:99) 05-22 20:25:01.745: E/AndroidRuntime(12725): at android.os.Looper.loop(Looper.java:137) 05-22 20:25:01.745: E/AndroidRuntime(12725): at android.app.ActivityThread.main(ActivityThread.java:4935) 05-22 20:25:01.745: E/AndroidRuntime(12725): at java.lang.reflect.Method.invokeNative(Native Method) 05-22 20:25:01.745: E/AndroidRuntime(12725): at java.lang.reflect.Method.invoke(Method.java:511) 05-22 20:25:01.745: E/AndroidRuntime(12725): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) 05-22 20:25:01.745: E/AndroidRuntime(12725): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 05-22 20:25:01.745: E/AndroidRuntime(12725): at dalvik.system.NativeStart.main(Native Method) 05-22 20:25:01.745: E/AndroidRuntime(12725): Caused by: com.badlogic.gdx.utils.GdxRuntimeException: Couldn't load shared library 'gdx' for target: Linux, 32-bit 05-22 20:25:01.745: E/AndroidRuntime(12725): at com.badlogic.gdx.utils.SharedLibraryLoader.load(SharedLibraryLoader.java:104) 05-22 20:25:01.745: E/AndroidRuntime(12725): at com.badlogic.gdx.utils.GdxNativesLoader.load(GdxNativesLoader.java:34) 05-22 20:25:01.745: E/AndroidRuntime(12725): at com.badlogic.gdx.backends.android.AndroidApplication.<clinit>(AndroidApplication.java:61) 05-22 20:25:01.745: E/AndroidRuntime(12725): ... 15 more 05-22 20:25:01.745: E/AndroidRuntime(12725): Caused by: java.lang.UnsatisfiedLinkError: Couldn't load gdx: findLibrary returned null 05-22 20:25:01.745: E/AndroidRuntime(12725): at java.lang.Runtime.loadLibrary(Runtime.java:365) 05-22 20:25:01.745: E/AndroidRuntime(12725): at java.lang.System.loadLibrary(System.java:535) 05-22 20:25:01.745: E/AndroidRuntime(12725): at com.badlogic.gdx.utils.SharedLibraryLoader.load(SharedLibraryLoader.java:100) 05-22 20:25:01.745: E/AndroidRuntime(12725): ... 17 more 

当我尝试将由libGDX生成的项目加载到Android Studio中时,我收到了与原始post完全相同的错误:

 > "caused by com.badlogic.gdx.utils.GdxRuntimeException couldn't load > shared library 'gdx' for target: Linux, 32-bit" 

经过一些研究(特别是www.badlogicgames.com/forum/viewtopic.php?f=11&t=9097),我find了evilEntity的这个优秀的教程,展示了如何将libGDX项目导入到Android Studio中:

http://imgur.com/a/IBFIV

我无法逐字重复教程,因为它既是文本也是屏幕截图,但是按照以下步骤,我只能导入生成的项目,只显示教程中列出的修改:

请注意,我在这里重复evietity的答案,因为它在不同的网站上的另一个论坛上,堆栈溢出中有足够的评论表明,只是简单地链接到其他网站上的解决scheme是不好的forms。

还请注意,我在这里包括这个答案,因为这是omarsafwany的问题中包含的错误信息,这是我的关键点,而不是他的问题的具体情况。 希望没关系。

  1. 导入项目:
    • select包含全部三个生成项目的顶层文件夹(共享,桌面,android)
    • select“从现有来源创build项目”
    • 重命名这三个库(libs = LibGDX-Desktop,libs1 = LibDGX-Android,libs2 = LibDGX-Shared)
    • 接受剩余的默认值并点击“完成”
    • 这三个项目都应该出现在你的项目浏览器中。
  2. 导出共享库
    • 右键单击共享模块,然后select“打开模块设置”
    • 转到共享模块并selectlibgdx共享库旁边的“导出”
    • 去Android模块,并添加共享模块作为依赖项(通过点击绿色+)
    • 转到桌面模块并添加共享模块作为依赖项(通过点击绿色+)
  3. 编辑Android运行configuration
    • 通过在现有名称的末尾添加“-android”来重命名androidconfiguration
    • select“目标设备”中的“显示select器对话框”
  4. 添加桌面运行configuration
    • 点击绿色,然后select“应用程序”
    • 在顶部给它一些名字,然后点击'Main class'字段旁边的… 在对话框中select项目,find桌面启动器的主要类。 点击确定。
    • 现在我们需要改变工作目录。 点击…并从文件夹视图selectAndroid启动器的资产文件夹。 没有它,桌面启动器将无法find所需的图像和其他东西运行。
    • 最后要做的是selectclasspath。 select桌面模块。 点击确定。

细节:

从设备上完全卸载我的应用程序并再次部署。 这解决了这个问题

我想清楚是什么问题。从一开始就只在三星Galaxy S3上加载了一些C ++文件,当我编辑这些文件时,我没有使用ndk编译。所以当试图在另一个移动设备上testing时,新的修改不适用。 我build立了他们,应用程序运行成功。