摘要
在使用 CocosCreator 打包的原生应用中,我们可以通过引擎封装好的反射机制调用 Java 的静态方法,从而实现提示、相册、支付跳转等功能。本次内容为环境介绍与简单的交互。
正文
先看效果
版本说明
- CocosCreator 为 2.2.1 版本。
- AndroidStudio 为 3.5.2 版本。
- JDK 为 13 版本。(具体:13.0.1)
- NDK 为 20 版本。(具体:20.1.5948944)
- SDK 安装了 API 23 的。
- 模拟器为 AVD。(可以在 AndroidStudio 内安装)
CocosCreator 设置截图:
jsb的反射方法
写一个获取字符串的方法:
const className = "org/cocos2dx/javascript/AppActivity"
let text = jsb.reflection.callStaticMethod(className, "getTestText", "()Ljava/lang/String;")
在 callStaticMethod 方法中,我们通过传入 Java 的类名,方法名,传入参数类型与返回类型,就可以直接调用 Java 的静态方法。其中方法名后面的参数代表类型。比如 “()V” 代表无参数无返回值,”()I” 代表无参数整型返回值(int)。具体的对应见下表。
布局
在 CocosCreator 中布局好两个按钮一个文本,在脚本中写两个方法并绑定至按钮,如图。
脚本
cc.Class({
extends: cc.Component,
properties: {
testLabel: cc.Label,
},
showLabel () {
const className = "org/cocos2dx/javascript/AppActivity"
let text = jsb.reflection.callStaticMethod(className, "getTestText", "()Ljava/lang/String;")
this.testLabel.string = text + ""
},
show () {
this.showToast("弹窗啦!")
},
showToast (string) {
const className = "org/cocos2dx/javascript/AppActivity"
jsb.reflection.callStaticMethod(className, "showToast", "(Ljava/lang/String;)V", string)
}
});
一切就绪,点击构建面板的“构建”,完成后在 “/build/jsb-default/frameworks/runtime-src/” 下你会发现 “proj.android-studio” 文件夹,这就是 AndroidStudio 工程,打开并 Build。
Java写法
找到 Java 文件 “/app/src/org/cocos2dx/javascript/AppActivity.java”,然后我们添加对应的静态方法:
public static String getTestText () {
return "我是 Java 返回的字符串!";
}
这样就完成了第一个显示。然后接下来调用 Toast 提示要注意,cocos 引擎的渲染和 JS 的逻辑是在 GL 线程中进行的,而 Android 本身的 UI 更新是在 App 的 UI 线程进行的,所以 Toast 需要在 UI 线程进行,写法也很简单。
// 先定义一个静态变量 app 用于接收 this。
private static AppActivity app = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (!isTaskRoot()) {
return;
}
SDKWrapper.getInstance().init(this);
// 添加这一句
app = this;
}
public static void showToast (final String string) {
app.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(app, string, Toast.LENGTH_LONG).show();
}
});
}
这样就实现了 Toast 提示的弹出!给个全部截图:
结语
有意思吧,我们下一次介绍如何调起相机并选择图片!
O(∩_∩)O~~
微信公众号