1:使用androidstudio打开对应的cocoscreator安卓工程,创建SDKManager.java文件
package org.cocos2dx.javascript;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
public class SDKManager {
static String LOG_TAG = "SDKManager";
static SDKManager _instance;
static SDKManager getInstance() {
if(SDKManager._instance == null) {
SDKManager._instance = new SDKManager();
}
return SDKManager._instance;
}
// public void init(Context context) {
public void init() {
}
// native主动调用
static public String callFromNative() {
Log.i(LOG_TAG, "callFromNative");
return SDKManager.getInstance().callNative();
}
// native方法
public native String callNative();
public void onDestroy() {
}
public void onPause() {
}
}
目录如下:
2:生成native头文件
运行cmd,cd到proj.android-studio\app\src 目录,输入javah -jni org.cocos2dx.javascript.SDKManager生成头文件
3:移动org_cocos2dx_javascript_SDKManager.h文件到instantapp下面的目录,并且新建
org_cocos2dx_javascript_SDKManager.cpp文件
org_cocos2dx_javascript_SDKManager.cpp内容如下:
//
// Created by Kyz on 2022/1/20.
//
#include "org_cocos2dx_javascript_SDKManager.h"
#include <android/log.h>
#include <string>
using namespace std;
#define LOG_TAG "SDK Native"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
/*
* Class: org_cocos2dx_javascript_SDKManager
* Method: callNative
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_org_cocos2dx_javascript_SDKManager_callNative
(JNIEnv *env, jobject) {
std::string s = "abc";
LOGD("native call abc");
return env->NewStringUTF(s.c_str());
}
4:同目录的main.cpp文件include头文件
5:CocosAndroid.mk文件加入头文件和源文件
6:js调用java方法,需要在场景调用callJava方法
export function callJava() {
if(cc.sys.os == cc.sys.OS_ANDROID) {
let value = jsb.reflection.callStaticMethod("org/cocos2dx/javascript/SDKManager", "callFromNative", "()Ljava/lang/String;")
console.log("back value is ", value)
return true
}
}
7:最后重新构建工程,在生成apk就可以了