首页 > 其他分享 >Cocos Creator 3.x 之Android Studio打包(二)

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

时间:2023-11-07 22:32:06浏览次数:38  
标签:Cocos string int void Studio static Android public String

一,重构Android项目

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

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

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

Cocos Creator 3.x 之Android Studio打包(二)_Activity_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打包(二)_Android_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

标签:Cocos,string,int,void,Studio,static,Android,public,String
From: https://blog.51cto.com/aonaufly/8240281

相关文章

  • 【01】安装与配置 C++/Visual Studio 22 | PDCurses on Windows
    参考:https://www.cnblogs.com/yapingxin/p/15936414.html实践、概括、优化:编译生成下载源码,解压后进入其中的wincon目录;如果需要为多个Platform(x86和x64)以及多个分支(Debug和Release),多复制备份几个wincon文件夹,分别命名好;编辑其中的Makefile.vc文件,在11行下新建一行,写入:PL......
  • 史上最全的Android面试题集锦
    前言由于之前从上海离职,来到深圳找工作。然后准备面试的时候,发现网上很多Android面试题及答案整理都没有答案,在成功的拿到几家公司的offer后(虽然不是阿里、网易这种级别的公司,但对我一个毕业三年的Android开发来说,算是成功的从小公司跳到大公司)自己总结了一些最近面试过的Androi......
  • 直播带货源码,android editText设置颜文字过滤
    直播带货源码,androideditText设置颜文字过滤 //给editText设置过滤器  InputFilterinputFilter=newInputFilter(){    //限制输入表情    Patternemoji=Pattern.compile("[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27f......
  • ​​Android平台GB28181历史视音频文件回放规范解读及技术实现
     技术背景在实现GB28181历史视音频文件回放之前,我们已完成了历史视音频文件检索和下载,历史视音频回放,在GB28181平台非常重要,比如执法记录仪等前端设备,默认录像数据存储在前端设备侧,如果需要上传到平台统一保存,除了到工作站拷贝外,还可以通过GB28181的历史视音频文件下载到指挥中心......
  • visio studio .net 程序升级问题
    .net开发程序升级问题      1.没有安装数据访问组件,需要安装相应版本的数据访问组件;2.没有安装相应版本的Office客户端,需要安装相应版本的Office客户端;3.Microsoft.Jet.OLEDB.4.0在64位系统上不支持,需要修改架构,从x64改为x86,无论是WinForm还是ASP.NET;或者修......
  • Android接入数字键盘并通过获取键盘输入的值控制App
    一、概述需求:现有一个需求,要求给Android系统接入一个数字键盘,用于方便工人操作(ps:因为触摸屏在特定场景下比键盘低效)需要:1.Android系统手机/pad需要能够连接数字键盘2.Android侧能够获取到手机键盘的按键值3.获取到键盘的按......
  • Visual Studio 2008安装ASP.NET MVC 2 RTM
    1首先,要安装VisualStudio2008SP1,下载地址http://www.microsoft.com/en-us/download/details.aspx?id=109862下载ASP.NETMVC2RTM(英文版,2.5M,AspNetMVC2_VS2008.exe)下载地址http://www.microsoft.com/en-us/download/details.aspx?id=220793双击AspNetMVC2_VS2008.e......
  • Cocos Creator 3.x 如何动态修改3D物体的透明度
    CocosCreator3.x的2DUI有个组件UIOpacity组件可以动态修改UI的透明度,非常方便。很多同学想3D物体上也有一个这样的组件来动态的控制与修改3D物体的透明度。今天基于CocosCreator3.8来实现一个可以动态修改3D物体透明度的组件Opacity3D。 一个3D物体如何才能够半透明显......
  • 就今年这行情,成为Android程序员还有发展前景吗?
    前言做为一名IT行业从业者,我认为IT行业饱和这个说法是不准确的,应该叫低端IT业趋于饱和,而技术深入的IT领域人才远远未达到饱和,甚至这样的人才还很稀缺。近些年计算机相关专业成为了热门专业,大家都知道这个行业赚钱,于是蜂拥而至。认为学了计算机就能进中大厂,其实能进去的都是少部分人......
  • 水果连连看,Android 小游戏开发
    A.项目描述"水果连连看"是一款经典的休闲益智小游戏。游戏的目标是通过连接相同的水果图标来消除它们,最终清空整个游戏界面。它以其简单易懂的规则和有趣的玩法而受到许多玩家的喜爱。让我们来梳理一下这款小游戏的功能需求。游戏规则和目标:游戏采用经典的连连看玩法,玩家需要在限......