在cocos2d-x 集成 cmgame时,有时会遇到这个错误
02-26 16:51:18.565: W/dalvikvm(16222): JNI WARNING: JNI method called with exception pending
02-26 16:51:18.565: W/dalvikvm(16222): in Ljava/lang/Runtime;.nativeLoad:(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljava/lang/String; (RegisterNatives)
02-26 16:51:18.565: W/dalvikvm(16222): Pending exception is:
02-26 16:51:18.565: I/dalvikvm(16222): java.lang.NoClassDefFoundError: com/ir/gc/CustomContentProvider
02-26 16:51:18.565: I/dalvikvm(16222): at java.lang.Runtime.nativeLoad(Native Method)
02-26 16:51:18.566: I/dalvikvm(16222): at java.lang.Runtime.loadLibrary(Runtime.java:368)
02-26 16:51:18.566: I/dalvikvm(16222): at java.lang.System.loadLibrary(System.java:535)
02-26 16:51:18.566: I/dalvikvm(16222): at com.letu.cocos2dxTest.CmgameApplication.onCreate(CmgameApplication.java:13)
02-26 16:51:18.569: I/dalvikvm(16222): at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:969)
02-26 16:51:18.569: I/dalvikvm(16222): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4115)
02-26 16:51:18.569: I/dalvikvm(16222): at android.app.ActivityThread.access$1300(ActivityThread.java:134)
02-26 16:51:18.569: I/dalvikvm(16222): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1285)
02-26 16:51:18.569: I/dalvikvm(16222): at android.os.Handler.dispatchMessage(Handler.java:99)
02-26 16:51:18.569: I/dalvikvm(16222): at android.os.Looper.loop(Looper.java:154)
02-26 16:51:18.569: I/dalvikvm(16222): at android.app.ActivityThread.main(ActivityThread.java:4624)
02-26 16:51:18.569: I/dalvikvm(16222): at java.lang.reflect.Method.invokeNative(Native Method)
02-26 16:51:18.569: I/dalvikvm(16222): at java.lang.reflect.Method.invoke(Method.java:511)
02-26 16:51:18.569: I/dalvikvm(16222): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809)
02-26 16:51:18.569: I/dalvikvm(16222): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576)
02-26 16:51:18.569: I/dalvikvm(16222): at dalvik.system.NativeStart.main(Native Method)
02-26 16:51:18.569: I/dalvikvm(16222): Caused by:
02-26 16:51:18.569: I/dalvikvm(16222): java.lang.ClassNotFoundException: com.ir.gc.CustomContentProvider
02-26 16:51:18.569: I/dalvikvm(16222): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
02-26 16:51:18.569: I/dalvikvm(16222): at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
02-26 16:51:18.569: I/dalvikvm(16222): at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
原因时我的libmegjb.so不是直接拷贝到libs下面的,而是在jni下的prebuilt下面 预编的
经过预编义,libmegij.so会被 strip ,丢失一些符号或者ndk认为没用的东西
找了本办法:
写一个脚本
mybuild.sh
#!/bin/sh
/Users/yangzheng/Installation/Android/android-ndk-r8e/ndk-build $@
cp jni/prebuilt/libmegjb.so libs/armeabi
嘿嘿,其实就是执行完ndk-build后自己拷贝一份libmegjb.so
然后让eclipse的Build command 里 改成 执行 mybuild.sh
ok,问题解决
其实这是办法,应该想办法让ndk在prebuilt的时候不要strip,但是还没找到合适的方法,所以就先这样弄了