Unity 编写自己的aar库,并通过AndroidJavaProxy调用访问和返回

news2024/11/27 9:36:49

安卓部分

我们首先创建一个空项目,我们不需要Activity,所以可以选择NoActivity。
在这里插入图片描述
输入一个包名,我们用不到这个主app包名。
在这里插入图片描述
项目创建好后,再创建新Module
在这里插入图片描述
左边我们选择AndroidLibrary,然后输入包名,这个包名在Unity中需要输入。

在这里插入图片描述

然后我们编写两个脚本,一个是Interface,一个是类。
这里要注意,在Unity中我们通过AndroidJavaProxy调用的只能是interface。
在这里插入图片描述
两个脚本如下:

package com.lg.mylibrary;

import android.util.Log;

public interface JTestInterface {
    void ShowBack(String backmsg);

}
package com.lg.mylibrary;

import android.util.Log;

public class JTest  {
    public JTestInterface mInterface;

    public JTest(JTestInterface callback)
    {
        mInterface = callback;
    }

    public void ShowLog() {

        mInterface.ShowBack("back , 哈哈");
    }
}

然后我们直接Build
在这里插入图片描述
生成的arr会在
E:\AndroidProjects\AndroidJFrameWork\mylibrary\build\outputs\aar\mylibrary-debug.aar
这个路径下,我们复制到Unity的Plugins\Android目录下,没有目录自己手动创建。
在这里插入图片描述

Unity部分

我们在Unity创建一个AndroidJavaProxy类,用来访问。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class JTest : AndroidJavaProxy
{
    AndroidJavaObject javaObject;
    public JTest() : base("com.lg.mylibrary.JTestInterface")
    {
        // We create an instance of the JavaClass in the constructor
        // and pass the reference of this class to the JavaClass
        javaObject = new AndroidJavaObject("com.lg.mylibrary.JTest", this);
    }

  
    // Call the method in the plugin to invoke the callback
    public void CallJavaMethod()
    {
        javaObject.Call("ShowLog");
    }

    // This method will be invoked from the plugin
    public void ShowBack(string xx)
    {
        Debug.Log("Unity ShowBack 显示LOG :"+xx);
        // Pass the result to the C# event that we register to in the UI class

    }

}

再来一个脚本实例化这个对象。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TestShow : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        JTest t = new JTest();
        t.CallJavaMethod();
        
    }
}

我们创建对象放入这个TestShow脚本。然后打包apk,安装。运行结果如下:
在这里插入图片描述

Unity通过访问javaObject.Call(“ShowLog”);访问到了安卓的Lib函数,并进行了返回。

到这里就结束了。
顶部有Android和Unity测试工程下载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2044956.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如果使用finalshell登录linux服务器之后,上传文件失败,可能是没有使用sudo权限

先随便使用sudo命令拷贝一个文件到另外一个地方,然后输入密码,再次上传就可以了 例如: sudo cp index.html eventWeb/ 会提示你输入密码,输入之后,再次使用finalshell上传文件就可以了:

MQ的介绍

一、MQ简介 MQ是在消息的传输过程中保存消息的容器。多用于分布式系统之间进行通信,主要功能是业务解耦 二、常见的MQ产品 RabbitMQ、RocketMQ、Kafka、ActiveMQ 三、为什么要用MQ?(MQ的优点:异步处理、应用解耦、流量削峰&a…

前端 获取时间范围内的所有周数组集合,第一项为首月的首个周一

具体可实现的效果例如: 数据格式: 具体代码实现: /*** 获取当前日期的第一个周一是哪天* params date - YYYY-MM*/function getMonthFirstWeekDay(date) {let year new Date(date).getFullYear();let month new Date(date).getMonth();for …

linux:有关目录、链接文件的函数 Makefil、gdb的使用

目录函数 1.getpwuid struct passwd *getpwuid(uid_t uid); 功能: 根据用户id到/etc/passwd文件下解析获得 结构体信息 参数:uid:用户id 返回值: 成功返回id对应用户的信息 失败返回NULL passwd 结构体的定义通常如下所示 struct passwd { char *pw_nam…

opencv-特征检测

1,Harris角点检测 如果粉色窗口向四周移动,窗口内的像素没有变化则认定为平坦区域,如果窗口向上移动无明显变化,而左右移动有变化则认定为边缘,如果窗口向任意方向移动均有明显变化则为角点,如下图 dst不是…

MSSQL暴力破解

一、基本信息 靶机:IP:192.168.100.70 二、攻击过程 方法一:msfconsole 启动 msfconsole msfconsole 选用攻击模块,并设置参数 use auxiliary/scanner/mssql/mssql_login set rhosts 192.168.100.70 set USER_FILE /userna…

探舟数字与周村古商城景区携手签署AI导游导览合作协议

导语: 近日,国内领先的科技公司广州探舟数字科技有限公司(以下简称探舟数字)与国家5A级景区创建单位、国家级夜间文化和旅游消费集聚区山东周村古商城正式签署合作协议,共同推进AI导游导览系统的全面应用。此次合作标…

【Java数据结构】---List(ArrayList)

乐观学习,乐观生活,才能不断前进啊!!! 我的主页:optimistic_chen 我的专栏:c语言 ,Java 欢迎大家访问~ 创作不易,大佬们点赞鼓励下吧~ 文章目录 前言线性表顺序表&#x…

虚幻5|给武器添加碰撞检测与伤害

本章内容衔接上两章,需要完成上两章才能用本章内容 虚幻5|角色武器装备的数据库学习(不只是用来装备武器,甚至是角色切换也很可能用到)-CSDN博客虚幻5|普通攻击,使用接口更方便-CSDN博客 如有疑问,可访问…

TinyGPT-V:微型视觉语言模型【VLM】

AI技术正在不断融入我们的日常生活。人工智能的一个应用包括多模态化,例如将语言与视觉模型相结合。这些视觉语言模型可以应用于视频字幕、语义搜索等任务。 本周,我将重点介绍一种名为 TinyGPT-V(Arxiv | GitHub)的最新视觉语言…

QT:Telnet客户端与服务器的创建

客户端 telnetClient类 #ifndef TELNETCLIENT_H #define TELNETCLIENT_H#include <QObject> #include <QTcpSocket>class TelnetClient : public QObject {Q_OBJECTpublic:explicit TelnetClient(QObject *parent nullptr);~TelnetClient();// 连接到指定的主机…

智慧节能节水设备远程监控解决方案

智慧节能节水设备远程监控解决方案&#xff0c;作为现代物联网技术与环保理念深度融合的产物&#xff0c;旨在通过高度集成的传感器网络、大数据分析及云计算平台&#xff0c;实现对各类节能节水设施的精细化管理和实时监控&#xff0c;从而大幅度提升资源利用效率&#xff0c;…

eNSP 华为三层交换机实现VLAN间通信

华为三层交换机实现VLAN间通信 三层交换机&#xff1a; <Huawei>sys [Huawei]sys SW-3 [SW-3]vlan batch 10 20 [SW-3]int vlan 10 [SW-3-Vlanif10]ip address 192.168.10.254 24 [SW-3-Vlanif10]int vlan 20 [SW-3-Vlanif20]ip add 192.168.20.254 24 [SW-3-Vlanif20]in…

Qt登录窗口设计

widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QIcon> //图标类 #include <QPushButton> #include <QLineEdit> //行编辑 #include <QLabel> #include <QTextEdit> #include <QMovie>class Widge…

专业名词理解(一):鲁棒性和泛化能力

目录 前言 一、鲁棒性&#xff08;Robustness&#xff09; 二、泛化能力&#xff08;Generalization&#xff09; 总结 前言 鲁棒性&#xff08;Robustness&#xff09;和泛化能力&#xff08;Generalization&#xff09;是机器学习和人工智能模型的重要特性&#xff0c;它…

CDD数据库文件制作(四)——服务配置(0x11)

目录 1.子功能创建2.会话切换配置2.1.根据诊断调查表进行信息提取(0x1101)2.2.会话转换配置(0x1101)2.3.根据诊断调查表进行信息提取(0x1102)2.4.会话转换配置(0x1102)2.5.根据诊断调查表进行信息提取(0x1103)2.6.会话转换配置(0x1103)2.7.会话切换配置完成后效果图…

R9 9900X R9 9950X评测:看完觉得7800X3D更香了

原文转载修改自&#xff08;更多互联网新闻/搞机小知识&#xff09;&#xff1a; R9 9900X R9 9950X评测&#xff1a;能效提升&#xff0c;温度下降 R9 9900X R9 9950X基础规格 注&#xff1a;评测信息来自外媒Wccftech 老规矩&#xff0c;先介绍一下这两款锐龙9000旗舰CPU的…

【笔记1-7】Qt bug记录:error C2371: QStringList重定义;不同的基类型,Qt6无法使用QStringList

在Qt5工程升级到Qt6的过程中&#xff0c;出现了QStringList重定义的问题 一开始尝试在其他文件中使用QStringList&#xff0c;结果是Qt5.9.4版本怎么使用都没有问题&#xff0c;而Qt6.7.2在其他文件中写同样的代码也会有问题 通过调查Qt源码&#xff0c;发现是Qt6对qcontainer…

栈与计算—— 150、227、224※

150. 逆波兰表达式求值&#xff08;中等&#xff09; 给你一个字符串数组 tokens &#xff0c;表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 注意&#xff1a; 有效的算符为 、-、* 和 / 。每个操作数&#xff08;运算对象&a…

web前端之实现一只可爱的小杰尼乌龟、伪元素、动画

MENU 前言效果图htmlstyle 前言 代码段使用HTML和CSS创建一个“杰尼龟”的动画。 效果图 html <div class"squirtle"><div class"tail"></div><div class"body"><div class"stomach"></div><d…