点击上方亿元程序员+关注和★星标
引言
Cocos如何跟Android通信
大家好,相信小伙伴们通过阅读笔者前几期的文章**《Cocos打安卓包打不出来?看看这个》,对Cocos**如何打安卓包有了一定的了解。
但是,除了把安卓包打出来,另外还有一个重要的就是要能够调用安卓提供的Java方法以及监听Java发送的事件。
本文重点介绍一下Cocos如何跟Android通信,如果对您或者其他人有帮助,建议转发、收藏、点赞和在看!
1.为什么要跟Android通信?
通常我们将游戏打成安卓包之后,我们还需要接入登陆、支付或者广告等功能,通常这些平台会提供接口给到Android原生。
因此我们想要接入这些接口,必须要使用原生Java去接入,接入完成后,由于游戏开发和原生的语言不同,我们还需要实现Cocos与Android的通信。
那Cocos如何实现与Android的通信呢?
2.Cocos与Android的通信
Cocos想要与Android进行通信,通常有以下两种方法:
1.基于反射机制实现 JavaScript 与 Android 系统原生通信
通过这个方法我们不仅需要严格声明包名和函数签名,还需要严格校对参数数量以确保正常运行,步骤较为复杂。
Cocos调用Android方法的形式如下:
import { native } from 'cc';
var o = native.reflection.callStaticMethod(className, methodName, methodSignature, parameters...)
具体需要以下几个参数:
- className:类名,我们需要调用的静态方法的完整包名+类名,例如:
com/cocos/game/Test
为包名com.cocos.game
中的Test
类。 - methodName:方法名,我们需要调用的静态方法的方法名,注意大小写。
- methodSignature:方法签名,这个主要是要告诉Java,传递的参数类型和方法返回值类型。由于篇幅较长,我们在下面讲解。
- parameters:参数列表,这个需要与上面方法签名声明的保持一致,支持 number、bool 和 string三种类型。
方法签名:
方法签名的格式为**(参数类型)返回值类型**。即括号内是参数的类型,括号外为返回值的类型。示例如下:
()V
表示没有参数,没有返回值(I)V
表示参数为一个 int,没有返回值的方法(I)I
表示参数为一个 int,返回值为 int 的方法(IF)Z
表示参数为一个 int 和一个 float,返回值为 boolean 的方法(ILjava/lang/String;F)Ljava/lang/String;
表示参数类型为一个 int,一个 String 和一个 float,返回值类型为 String 的方法
完整示例:
//调用包名com.cocos.game里Test类的sum静态方法,需要2个int参数,返回值为int类型
var result = native.reflection.callStaticMethod("com/cocos/game/Test", "sum", "(II)I", 3, 7);
log(result); // 10
Android调用Cocos方法如下:
// 一定要在 GL 线程中执行,调用cc.log方法
CocosHelper.runOnGameThread(new Runnable() {@Overridepublic void run() <