首先编写java接口
public class NativeCall {
public native void onSdkCallResult(int code); //这个方法要在java外部实现 所以使用native关键字修饰
}
终端命令
#include "../../../../../cocos2dx/platform/CCPlatformConfig.h"
#if (CC_TARGET_PLATFORM==CC_PLATFORM_ANDROID)
#include <jni.h>
#include "../../../../../cocos2dx/platform/android/jni/JniHelper.h"
#include <android/log.h>
#ifndef _Included_com_football_apk_anzhuo91_NativeCall
#define _Included_com_football_apk_anzhuo91_NativeCall
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT void JNICALL Java_com_football_apk_anzhuo91_NativeCall_onSdkCallResult(JNIEnv *, jobject, jint);
//注意JNIEXPORT JNICALL都是jni里的关键字 表示这个函数是java函数的外部实现 函数名是java的函数路径 -- 明白这个就完全可以手写.h .cpp 了
//前两个参数JNIEnv *和jobject 是必需的——前者是一个JNIEnv 结构体的指针是JNI的核心数据,这个结构体中定义了很多JNI的接口函数指针,使开发者可以使用JNI所定义的接口功能;
//后者指代的是调用这个JNI函数的Java对象,有点类似于C++中的this 指针。
#ifdef __cplusplus
}
#endif
#endif
#endif
4、生成cpp 可以自己手写 也可以终端命令生成#include "../../../../../cocos2dx/platform/CCPlatformConfig.h"
#if (CC_TARGET_PLATFORM==CC_PLATFORM_ANDROID)
#include "com_football_apk_anzhuo91_NativeCall.h"
#include "cocos2d.h"
#include "SDKCallFun.h"
extern "C" {
JNIEXPORT void JNICALL Java_com_football_apk_anzhuo91_NativeCall_onSdkCallResult
(JNIEnv *evn, jobject obj, jint code)
{
//code在java中传入 c++获取 针对不同code做不同操作
}
#endif
<span style="font-family: arial, 'courier new', courier, 宋体, monospace;"><span style="line-height: 24px;">//<span style="font-family: arial, 宋体, sans-serif; font-size: 14px; line-height: 24px; text-indent: 28px;">.o文件就是对象文件,里面包含的内容就是01这样的机器可执行的指令,当程序要执行时还需要进行链接(link).链接就是把多个.o文件链成一个可执行文件。</span></span></span><span style="font-size: 20px; font-family: 'Microsoft YaHei'; line-height: 30px;"> </span>
//.a文件就是多个.o文件的组合。
//GCC编译器(多种硬体平台上编译出可执行程序的超级编译器)
//.a文件就是多个.o文件的组合。
.so文件是共享库文件(动态链接)。动态链接所调用的函数代码并没有被拷贝到应用程序的可执行文件中去,而是仅仅在其中加入了所调用函数的描述信息(往往是一些重定位信息)。仅当应用程序被装入内存开始运行时,在操作系统的管理下,才在应用程序与相应的.so之间建立链接关系。