我遇到与this question相同的问题,但那里的答案并没有解决我的问题。
我没有通过gdxsetup.jar创建项目,我只包括gdx.jar和gdx-backend-android.jar。我将libgdx.so添加到libs / x86,但它仍然会引发异常。我该怎么解决这个问题?
logcat的:
02-16 11:59:45.604: E/AndroidRuntime(14788): FATAL EXCEPTION: main
02-16 11:59:45.604: E/AndroidRuntime(14788): java.lang.ExceptionInInitializerError
02-16 11:59:45.604: E/AndroidRuntime(14788): at java.lang.Class.newInstanceImpl(Native Method)
02-16 11:59:45.604: E/AndroidRuntime(14788): at java.lang.Class.newInstance(Class.java:1130)
02-16 11:59:45.604: E/AndroidRuntime(14788): at android.app.Instrumentation.newActivity(Instrumentation.java:1078)
02-16 11:59:45.604: E/AndroidRuntime(14788): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2210)
02-16 11:59:45.604: E/AndroidRuntime(14788): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349)
02-16 11:59:45.604: E/AndroidRuntime(14788): at android.app.ActivityThread.access$700(ActivityThread.java:159)
02-16 11:59:45.604: E/AndroidRuntime(14788): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)
02-16 11:59:45.604: E/AndroidRuntime(14788): at android.os.Handler.dispatchMessage(Handler.java:99)
02-16 11:59:45.604: E/AndroidRuntime(14788): at android.os.Looper.loop(Looper.java:176)
02-16 11:59:45.604: E/AndroidRuntime(14788): at android.app.ActivityThread.main(ActivityThread.java:5419)
02-16 11:59:45.604: E/AndroidRuntime(14788): at java.lang.reflect.Method.invokeNative(Native Method)
02-16 11:59:45.604: E/AndroidRuntime(14788): at java.lang.reflect.Method.invoke(Method.java:525)
02-16 11:59:45.604: E/AndroidRuntime(14788): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)
02-16 11:59:45.604: E/AndroidRuntime(14788): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)
02-16 11:59:45.604: E/AndroidRuntime(14788): at dalvik.system.NativeStart.main(Native Method)
02-16 11:59:45.604: E/AndroidRuntime(14788): Caused by: com.badlogic.gdx.utils.GdxRuntimeException: Couldn't load shared library 'gdx' for target: Linux, 32-bit
02-16 11:59:45.604: E/AndroidRuntime(14788): at com.badlogic.gdx.utils.SharedLibraryLoader.load(SharedLibraryLoader.java:114)
02-16 11:59:45.604: E/AndroidRuntime(14788): at com.badlogic.gdx.utils.GdxNativesLoader.load(GdxNativesLoader.java:34)
02-16 11:59:45.604: E/AndroidRuntime(14788): at com.badlogic.gdx.backends.android.AndroidApplication.<clinit>(AndroidApplication.java:62)
02-16 11:59:45.604: E/AndroidRuntime(14788): ... 15 more
02-16 11:59:45.604: E/AndroidRuntime(14788): Caused by: java.lang.UnsatisfiedLinkError: Couldn't load gdx from loader dalvik.system.PathClassLoader[dexPath=/data/app/com.example.gamr-1.apk,libraryPath=/data/app-lib/com.example.gamr-1]: findLibrary returned null
02-16 11:59:45.604: E/AndroidRuntime(14788): at java.lang.Runtime.loadLibrary(Runtime.java:355)
02-16 11:59:45.604: E/AndroidRuntime(14788): at java.lang.System.loadLibrary(System.java:525)
02-16 11:59:45.604: E/AndroidRuntime(14788): at com.badlogic.gdx.utils.SharedLibraryLoader.load(SharedLibraryLoader.java:110)
02-16 11:59:45.604: E/AndroidRuntime(14788): ... 17 more
如果有帮助,我正在运行32位Linux。
答案 0 :(得分:9)
我遇到的问题是,由于某种原因,libgdx.so
未被复制到Android项目中的任何armeabi
,armeabi-v7a
或x86
个文件夹中lib
文件夹。
从libgdx发行版中复制这些内容对我有用。
答案 1 :(得分:3)
我的问题是我试图在共享库中创建我的GDX应用程序(也就是说,不是编译成APK的东西),但还没有在我的lib中设置所有GDX包含的东西。
所以我有:
MyProject
-->MyMainApp
-->-->build.gradle <-- no updates required, doesn't do anything with GDX
-->MySharedLibraryWhereMyGameEngineIs
-->-->build.gradle <-- this is where the problem was
在共享库的build.gradle中,我没有包含sourceSets
参数。
添加它解决了我的问题。 GDX现在成功启动。
apply plugin: 'com.android.library'
android {
... config stuff ...
sourceSets { // this wasn't here before
main { // this wasn't here before
jniLibs.srcDirs = ['libs'] // this wasn't here before
} // this wasn't here before
instrumentTest.setRoot('tests')// this wasn't here before
}
... a bunch of other config stuff ...
}
答案 2 :(得分:0)
在我通过第一次更新上传到我的应用程序(“十月兄弟”)后,实际上我也遇到了同样的问题。从Play商店安装后,第一个发行版可以完美运行,但更新在启动后立即崩溃。检查Logcat,我确实一直面临这个问题。
我的第一个发行版可以正常工作但没有更新的原因很简单:因为我只想修复一个小错误,所以我从GitHub中检出了该项目,只运行了一次桌面应用程序以验证该修复程序,然后立即创建签名的AppBundle。看起来我只需要在创建AppBundle之前至少运行一次“ android”运行配置即可。更确切地说,是build.grade
模块的android
,它执行以下任务:
// android/build.gradle
...
// called every time gradle gets executed, takes the native dependencies of
// the natives configuration, and extracts them to the proper libs/ folders
// so they get packed with the APK.
task copyAndroidNatives {
doFirst {
file("libs/armeabi/").mkdirs()
file("libs/armeabi-v7a/").mkdirs()
file("libs/arm64-v8a/").mkdirs()
file("libs/x86_64/").mkdirs()
file("libs/x86/").mkdirs()
configurations.natives.files.each { jar ->
def outputDir = null
if (jar.name.endsWith("natives-arm64-v8a.jar")) outputDir = file("libs/arm64-v8a")
if (jar.name.endsWith("natives-armeabi-v7a.jar")) outputDir = file("libs/armeabi-v7a")
if(jar.name.endsWith("natives-armeabi.jar")) outputDir = file("libs/armeabi")
if(jar.name.endsWith("natives-x86_64.jar")) outputDir = file("libs/x86_64")
if(jar.name.endsWith("natives-x86.jar")) outputDir = file("libs/x86")
if(outputDir != null) {
copy {
from zipTree(jar)
into outputDir
include "*.so"
}
}
}
}
}
我认为,一旦我点击 Build> Build Bundle(s)/ APK(s),该android/build.gradle
就会被执行。但这似乎并非如此。
答案 3 :(得分:-1)
我发现这很简单: 添加
static { System.loadLibrary("gdx");}