Android 与 C++ 之间纠缠
1)游戏开发中,引擎层多用C++来实现,但是有时候为了集成SDK,调用Android原生的时候,难免要思考——C++层如何去调用Java层?
2)Android层调用C++库去完成一些功能也使常见的。开发中难免会思考怎么去用Java调用C++的问题。
最近的项目需求是Java调用C++的代码,来完成一些功能。
案例1.C++如何调用Java层。
在网上粗略的了解了一下。
JniMethodInfo、JniHelper的C++类来实现,通过导入相关头文件,引入到项目中。
调用的时候需要注意C++参数的传递,方法签名,以及Java返回的值的接收。
参考:http://www.himigame.com/android-game/725.html
略过~
案例2.Java层调用C++的代码。
Java调用C++的代码是通过调用.so包(C++文件编译后的文件)来实现的。.so包的生成是通过Android-ndk库的支持。
在创建的android项目中,首先需要创建jni文件夹。NDK编译需要jni/android.mk文件,jni/application.mk文件。
android.mk文件用来想ndk说明需要编译的c文件有哪些,application.mk文件用来说明需要编译的abi,也就是CPU的类型。
可以参考android/ndk下的samples/hello-jni项目。
调用自己的c++文件,首先创建自己的C++文件,然后添加到android.mk文件中,
向ndk表示,我这个自定义的C++文件也将参加到程序编译中去、并供Java来调用使用。
上张图片说说:
cocos2dx游戏也是通过这样的方法,在android手机端完成了运行。
例如:android程序启动,从一个Activity进入后,导入静态库,然后就开始调用跑C++的游戏引擎库来跑游戏了。