几天几夜,终解移动MM计费SDK接入bug

笔者在接入移动MM计费SDK的时候遇到了一个很严重的问题。

问题是这样的,移动MM提供的SDK包含jar和一堆so文件,按照说明文档,只需要将jar和so文件拷入libs下对应的文件夹即可。但笔者是Cocos2dx项目,Cocos2dx是C++和java混编移植的,也就是需要用到JNI,需要在jni目录下编写Android.mk文件。

一般在Android.mk引入第三方so的写法如下:

几天几夜,终解移动MM计费SDK接入bug 的确一般这样写就可以让Eclipse将so拷贝到libs目录。

可是实际测试结果是,那些so文件被Eclipse拷贝过去后竟然都变成了1kb,实际执行app的时候自然会报错,提示找不到so。

笔者由于不熟悉jni的原理,反复修改检查so文件,甚至新建一个空项目去测试so,结果是,只要编译,那些so都会变成1kb。

分析一下可以猜出,是因为Eclipse重新编译了so,而我们不需要编译,只需要它拷贝就行了。

笔者查遍百度也没得到解决办法,可恶的JNI硬是要给我重新编译so,编译成1kb...

笔者困扰了几天几夜,不吹牛,差点就放弃这个项目了。

几天几夜,终解移动MM计费SDK接入bug

编译so吧,第三方so报错,不编译so吧,cocos2dx本身的so又没了。

苦恼,纠结,可能部分朋友不知道我在说什么,但是实用第三方sdk拷贝so文件的同学很可能会遇到同样的问题。

最终,笔者想起了一个脑残的办法。

既然cocos2dx要生成so,其他so不需要编译,那么能不能先生成cocos2dx的so,然后一起拷贝呢?

可以。

首先,Android.mk里不要写那些第三方so,直接编译cocos2dx的so

编译完成后,在项目设置中的builder中,去掉所有CDT、自定义builder,也就是不在进行混编。

几天几夜,终解移动MM计费SDK接入bug

然后把你刚刚生成的so和第三方so,直接复制到libs目录,这样Eclipse就不会再去管jni,再次编译,ok!大功告成!

哈哈,方法是脑残了一点,每次修改cocos2dx内容都要重复一遍,但是这样确实解决了困扰了笔者几天几夜的bug。

笔者愚钝,不知其中原理,只是弄出了这么个笨办法解决了问题,希望能给遇到相同问题的同学一些帮助。

哎,有时候独立开发,确实得用一些笨办法。

何乐而不为呢?