cocos2d-x游戏新项目中搭android的在jni调用是出现以下问题:
1.Cocos2dxRenderer中的 调用jni接口Cocos2dxRenderer.nativeOnResume()时挂了,提示的错误是:Cocos2dxRenderer_nativeOnResume UnsatisfiedLinkError
第一步,看看Java_org_cocos2dx_lib_Cocos2dxRenderer.cpp是否被编译成目标文件.o,在libarmeabi.a中是可以很清晰地看到这个Java_org_cocos2dx_lib_Cocos2dxRenderer.o。因此这个是存在的。
第二步,已知这个文件中另外一个jni调用的本地方法nativeInit,但这个方法在main.cpp中被定义;在代码中是能被正常调用的;把这个定义的方法挪到文件Java_org_cocos2dx_lib_Cocos2dxRenderer.cpp中,代码调用时也是挂了。
第三步,有可能这个文件没有被链接如动态库中,但是这个.o文件确实在libarmeabi.a中,在最后被连接入游戏的动态库中。
第四步,基于以上的试验结果,有可能是这个目标文件.o最后被优化,并没有被链接入游戏的动态库中。试验可以在Java_org_cocos2dx_lib_Cocos2dxRenderer.cpp定义一个函数,注意这个方法不在extern“C”中,然后为不被优化掉,因此在main.cpp调用这个函数,这样应该就不会被优化。代码一跑,终于好了。。。
第五步,jni中还有文件TouchesJni.cpp也一样是被优化了,没有最后链接入游戏的动态库了。