Cocos Creator 3.x 之Android Studio打包(二)
  RlWeLU85QNwT 2023年11月19日 26 0

一,重构Android项目

1, 新建Activity(这里是:AlexActivity)继承自AppActivity

Cocos Creator 3.x 之Android Studio打包(二)_Android

2, 编辑AndroidManifest.xml,使AlexActivity为启动Activity

Cocos Creator 3.x 之Android Studio打包(二)_Cocos_02


二,JavaScript调用Java

1, 方法签名

方法签名稍微有一点复杂,最简单的方法签名是 ()V,它表示一个没有参数没有返回值的方法。其他一些例子:

  • (I)V 表示参数为一个 int,没有返回值的方法
  • (I)I 表示参数为一个 int,返回值为int的方法
  • (IF)Z 表示参数为一个 int 和一个 float,返回值为 boolean 的方法

括号内的符号表示参数类型,括号后面的符号表示返回值类型。因为 Java 是允许函数重载的,可以有多个方法名相同但是参数返回值不同的方法,方法签名正是用来帮助区分这些相同名字的方法的。

目前 Cocos Creator 中支持的 Java 类型签名有以下 4 种:

Cocos Creator 3.x 之Android Studio打包(二)_Cocos_03

2, javaScript代码

export default class AndroidHelp {
    /**
     * 一个string参数,没有返回
     * @param msgStr 提示的内容
     */
    public static showToast(msgStr: string): void {
        jsb.reflection.callStaticMethod(
            "com/cocos/game/AlexActivity",
            "showToast",
            "(Ljava/lang/String;)V",//签名
            <any>msgStr
        );
    }

    /**
     * 没有参数,返回string
     * 获得Android端的返回
     */
    public static talk2Android(): string {
        const msg: string = jsb.reflection.callStaticMethod(
            "com/cocos/game/AlexActivity",
            "talk2Android",
            "()Ljava/lang/String;"//签名
        );
        return msg;
    }

    /**
     * 2个string参数,返回string
     * @param name
     * @param msgStr
     */
    public static hello(name: string, msgStr: string): string {
        const msg: string = jsb.reflection.callStaticMethod(
            "com/cocos/game/AlexActivity",
            "hello",
            "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;",//签名
            <any>name,
            <any>msgStr
        );
        return msg;
    }

    /**
     * 2个int参数,返回int
     * @param a
     * @param b
     */
    public static sum(a: number, b: number): number {
        const total: number = jsb.reflection.callStaticMethod(
            "com/cocos/game/AlexActivity",
            "sum",
            "(II)I",//签名
            <any>a,
            <any>b
        );
        return total;
    }
}

 3, java对应签名的方法

    /**
     * 显示吐司提示
     */
    public static void showToast(final String string) {
        app.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(app, string, Toast.LENGTH_LONG).show();
            }
        });
    }

    /**
     * 向Cocos返回字符串
     */
    public static String talk2Android() {
        return "来自Android的爱❤!";
    }

    public static String hello(String name, String msg) {
        return "android  -> " + name + ": " + msg;
    }

    public static int sum(int a, int b) {
        return a + b;
    }

    public static int sum(int a) {
        return a + 2;
    }

三,Java调用JavaScript

1,JavaScript方法

        window["showInfoJSFun"] = (msgStr: string) => {
            if (!isValid(this.node)) return;
            this.labJavaPush.string = msgStr;
        }

2, Java代码

    //Java调用JavaScript
    private void showInfo() {
        //一定要在GL中运行
        CocosHelper.runOnGameThread(new Runnable() {
            @Override
            public void run() {
                //这里我想执行 Cocos js代码中的window.showInfo
                //js代码应该是:showInfo("成功"); 转为字符串为 "showInfo("成功");"
                CocosJavascriptJavaBridge.evalString("showInfoJSFun(\"Android调用JavaScript成功\");");
            }
        });
    }

四, AlexActivity代码

package com.cocos.game;

import android.os.Bundle;
import android.widget.Toast;

import com.cocos.lib.CocosHelper;
import com.cocos.lib.CocosJavascriptJavaBridge;

import java.util.Timer;
import java.util.TimerTask;

public class AlexActivity extends AppActivity {
    private static AppActivity app = null;

    private Timer timer = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        app = this;

        this.testJava2JavaScript();
    }

    /**
     * 测试Java调用JavaScript
     */
    private void testJava2JavaScript() {
        timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                showInfo();
            }
        }, 10000); //10s后执行
    }
    //#region 与Cocos的通讯部分

    /**
     * 显示吐司提示
     */
    public static void showToast(final String string) {
        app.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(app, string, Toast.LENGTH_LONG).show();
            }
        });
    }

    /**
     * 向Cocos返回字符串
     */
    public static String talk2Android() {
        return "来自Android的爱❤!";
    }

    public static String hello(String name, String msg) {
        return "android  -> " + name + ": " + msg;
    }

    public static int sum(int a, int b) {
        return a + b;
    }

    public static int sum(int a) {
        return a + 2;
    }

    //Java调用JavaScript
    private void showInfo() {
        //一定要在GL中运行
        CocosHelper.runOnGameThread(new Runnable() {
            @Override
            public void run() {
                //这里我想执行 Cocos js代码中的window.showInfo
                //js代码应该是:showInfo("成功"); 转为字符串为 "showInfo("成功");"
                CocosJavascriptJavaBridge.evalString("showInfoJSFun(\"Android调用JavaScript成功\");");
            }
        });
    }
    //#endregion
}

五,更新游戏

1,使用Cocos Creator构建Android

2,将build/android/data 拷贝到CocosAndroid/android/data

Cocos Creator 3.x 之Android Studio打包(二)_Apk_04

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月19日 0

暂无评论

推荐阅读
RlWeLU85QNwT