首页 > 代码库 > Android 与 C++ 之间纠缠

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++的游戏引擎库来跑游戏了。