點擊上方億元程序員+關注和★星標
引言
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() <