【问题标题】:Android & Cocos2d-x: Exceptions on System.loadLibrary(libName); & onLoadNativeLibraries();Android & Cocos2d-x:System.loadLibrary(libName) 上的异常; & onLoadNativeLibraries();
【发布时间】:2014-07-22 13:27:19
【问题描述】:

好吧,我终于把 cocos2d-x 放到 IDE 中了,现在我可以做一些小的改动,比如更改标签文本。

但是当尝试添加精灵时,应用程序在我的手机 (Galaxy Ace 2) 上崩溃,我无法理解调试输出。

我跟着 THIS 视频设置了我的 IDE,我刚刚去模板项目中添加一个精灵......

有人可以帮我解决这个问题吗:

07-22 13:22:32.310: D/PhoneWindow(22070): couldn't save which view has focus because the focused view org.cocos2dx.lib.Cocos2dxGLSurfaceView@405240c8 has no id.
07-22 13:22:32.930: V/SurfaceView(22070): org.cocos2dx.lib.Cocos2dxGLSurfaceView@405240c8 got app visibiltiy is changed: false
07-22 13:22:32.930: I/GLThread(22070): noticed surfaceView surface lost tid=12
07-22 13:22:32.930: W/EglHelper(22070): destroySurface()  tid=12
07-22 13:22:32.960: D/CLIPBOARD(22070): Hide Clipboard dialog at Starting input: finished by someone else... !
07-22 13:23:05.190: W/dalvikvm(22133): threadid=1: thread exiting with uncaught exception (group=0x4001e578)
07-22 13:23:05.190: E/AndroidRuntime(22133): FATAL EXCEPTION: main
07-22 13:23:05.190: E/AndroidRuntime(22133): java.lang.UnsatisfiedLinkError: Couldn't load cocos2dcpp: findLibrary returned null
07-22 13:23:05.190: E/AndroidRuntime(22133):    at java.lang.Runtime.loadLibrary(Runtime.java:429)
07-22 13:23:05.190: E/AndroidRuntime(22133):    at java.lang.System.loadLibrary(System.java:554)
07-22 13:23:05.190: E/AndroidRuntime(22133):    at org.cocos2dx.lib.Cocos2dxActivity.onLoadNativeLibraries(Cocos2dxActivity.java:66)
07-22 13:23:05.190: E/AndroidRuntime(22133):    at org.cocos2dx.lib.Cocos2dxActivity.onCreate(Cocos2dxActivity.java:80)
07-22 13:23:05.190: E/AndroidRuntime(22133):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1050)
07-22 13:23:05.190: E/AndroidRuntime(22133):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
07-22 13:23:05.190: E/AndroidRuntime(22133):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
07-22 13:23:05.190: E/AndroidRuntime(22133):    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
07-22 13:23:05.190: E/AndroidRuntime(22133):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
07-22 13:23:05.190: E/AndroidRuntime(22133):    at android.os.Handler.dispatchMessage(Handler.java:99)
07-22 13:23:05.190: E/AndroidRuntime(22133):    at android.os.Looper.loop(Looper.java:130)
07-22 13:23:05.190: E/AndroidRuntime(22133):    at android.app.ActivityThread.main(ActivityThread.java:3691)
07-22 13:23:05.190: E/AndroidRuntime(22133):    at java.lang.reflect.Method.invokeNative(Native Method)
07-22 13:23:05.190: E/AndroidRuntime(22133):    at java.lang.reflect.Method.invoke(Method.java:507)
07-22 13:23:05.190: E/AndroidRuntime(22133):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
07-22 13:23:05.190: E/AndroidRuntime(22133):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:670)
07-22 13:23:05.190: E/AndroidRuntime(22133):    at dalvik.system.NativeStart.main(Native Method)
07-22 13:23:07.200: I/dalvikvm(22133): threadid=4: reacting to signal 3
07-22 13:23:07.200: I/dalvikvm(22133): Wrote stack traces to '/data/anr/traces.txt'

谢谢


附: Cocos2dxActivity.java 在第 66 行和第 80 行有错误。

第 66 行是 System.loadLibrary(libName);,第 80 行是 onLoadNativeLibraries(); 在第 65 行中,它将库名称声明为 String libName = bundle.getString("android.app.lib_name");

另外,我可以在 Manifest 中看到关键信息是:

<!-- Tell Cocos2dxActivity the name of our .so -->
<meta-data android:name="android.app.lib_name"
    android:value="cocos2dcpp" />

我确实有 NDK,并将它连接到我的 ./bash_profile 中。但我确实注意到控制台说:

python /Users/damianwilliams/Desktop/KittyKatch/proj.android/build_native.py -b release all 
NDK_ROOT not defined. Please define NDK_ROOT in your environment

但我知道我的 bash 中有它,因为我的 bash 个人资料显示:

# Add environment variable COCOS_CONSOLE_ROOT for cocos2d-x
export COCOS_CONSOLE_ROOT=/Users/damianwilliams/Desktop/Android-Development-Root/cocos2d-x-3.2rc0/tools/cocos2d-console/bin
export PATH=$COCOS_CONSOLE_ROOT:$PATH

# Add environment variable NDK_ROOT for cocos2d-x
export NDK_ROOT=/Users/damianwilliams/Desktop/Android-Development-Root/android-ndk-r10
export PATH=$NDK_ROOT:$PATH

# Add environment variable ANT_ROOT for cocos2d-x
export ANT_ROOT=/Users/damianwilliams/Desktop/Android-Development-Root/apache-ant-1.9.4/bin
export PATH=$ANT_ROOT:$PATH

但我不知道如何处理这些信息,或者我是否正确构建了它。

【问题讨论】:

    标签: android eclipse debugging cocos2d-x logcat


    【解决方案1】:

    这是你的错误:

    java.lang.UnsatisfiedLinkError: Couldn't load cocos2dcpp: findLibrary returned null //  <-- error
    07-22 13:23:05.190: E/AndroidRuntime(22133):    at java.lang.Runtime.loadLibrary(Runtime.java:429)
    07-22 13:23:05.190: E/AndroidRuntime(22133):    at java.lang.System.loadLibrary(System.java:554)
    07-22 13:23:05.190: E/AndroidRuntime(22133):    at org.cocos2dx.lib.Cocos2dxActivity.onLoadNativeLibraries(Cocos2dxActivity.java:66) // <-- file name : line number
    07-22 13:23:05.190: E/AndroidRuntime(22133):    at org.cocos2dx.lib.Cocos2dxActivity.onCreate(Cocos2dxActivity.java:80) // <-- file name : line number
    

    找到错误在哪里的简单方法....查找括号( )..
    如果它包含您的 Activity 或 Java 文件名..这意味着可能有错误...

    这里... Cocos2dxActivity.java 文件中可能有错误...在第 66 行或第 80 行

    【讨论】:

    • MMmmmm....好思想的蝙蝠侠...!第 66 行是 System.loadLibrary(libName);,第 80 行是 onLoadNativeLibraries(); 但我不知道如何处理这些信息。顺便说一句,在第 65 行中,它将库名称声明为 String libName = bundle.getString("android.app.lib_name");
    • 好的。我该如何解决?我更新了问题以包含指向我用于设置 IDE 并添加所有库的视频的链接...
    【解决方案2】:

    我不认为你会喜欢这个答案。您的代码依赖于可能是本机代码的库。第 66 行的调用尝试加载本机二进制文件并失败。

    当然,加载失败的原因有很多。以下是一些:

    • 您没有构建该库,并且它不在您的 .apk 中
    • 每个平台都有自己构建库文件名的方式,从根名称(例如,foo.dylib、libfoo.so 等)开始。文件存在,但名称错误。
    • 库与您使用的硬件不兼容:加载失败

    您将必须找出该包中传递的文件名,在键“android.app.lib_name”处,并确定如何构建它所代表的可加载库。

    【讨论】:

    • 不......我喜欢这个答案很好......!哈哈。我大部分都不明白,但我会做一些研究,看看我是否能找到更多来建立这个问题。顺便说一句,你可以想象,我才刚刚开始,到目前为止我所做的一切都在这个视频中:youtu.be/2LI1IrRp_0w
    • @KittyKatch 搜索 Android NDK。
    • 是的,我有 NDK,并将它连接到我的 ./bash_profile 中。但我确实注意到控制台说:python /Users/damianwilliams/Desktop/KittyKatch/proj.android/build_native.py -b release all NDK_ROOT not defined. Please define NDK_ROOT in your environment 但我知道我的 bash 中有它,因为我的 bash 配置文件显示:# Add environment variable NDK_ROOT for cocos2d-x export NDK_ROOT=/Users/damianwilliams/Desktop/Android-Development-Root/android-ndk-r10 export PATH=$NDK_ROOT:$PATH 以及其他出口。
    • “echo $NDK_ROOT”说什么?你走在正确的道路上。你只需要原生库。
    • /Users/damianwilliams/Desktop/Android-Development-Root/android-ndk-r10
    【解决方案3】:

    解决方案是进入 Eclipse,右键单击我的项目并选择属性。在那里我去了 C/C++ Build,然后是 Environment。

    我点击了添加,为名称做了 NDK_ROOT,然后为值的路径...

    辛苦了……

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-23
      • 2011-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多