IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Unity通过Android Studio生成的arr进行二者通信 -> 正文阅读

[移动开发]Unity通过Android Studio生成的arr进行二者通信

全网最细Unity3D调用Android接口教程,没有之一

前期准备

Unity版本:2020.3.34f1c2
在这里插入图片描述

Android Studio版本:4.1.1
在这里插入图片描述
classes.jar文件:在你Unity的安装目录下可以找到,路径如下,找不到安装目录的,可以百度搜一下。
C:\Program Files\Unity\Hub\Editor\2020.3.34f1c2\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes
UnityPlayerActivity.java文件:同上,找不到目录自行搜一下吧。
C:\Program Files\Unity\Hub\Editor\2020.3.34f1c2\Editor\Data\PlaybackEngines\AndroidPlayer\Source\com\unity3d\player

到此前期准备工作基本完成,接下来是使用Android Studio生成arr文件。

一、创建一个Android Studio空工程

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

为了后续方便制作其他arr,这里新建一个Module

在这里插入图片描述

以我的工程为例,右键文件夹UnityCallAndroid,选中new,在选中Module

在这里插入图片描述

选择类型为Android Library,点Next

在这里插入图片描述

设置Module name

在这里插入图片描述

创建好之后会多一个这个文件夹

在这里插入图片描述

二、导入classes.jar文件和UnityPlayerActivity.java文件

导入classes.jar文件

在这里插入图片描述
在这里插入图片描述
选择你创建的Module,再点击“OK”
在这里插入图片描述

导入UnityPlayerActivity.java文件

复制UnityPlayerActivity文件,在工程内选中下图所示文件夹,ctrl+v
在这里插入图片描述还是上述文件夹,右键,创建一个Empty Activity
在这里插入图片描述
这里选择默认就行,然后点Finish
在这里插入图片描述
打开新创建的MainActivity,修改下图两项操作
在这里插入图片描述

修改build.gradle

compileOnly fileTree(includes: ['*.jar'],dir: 'libs')
compileOnly files('libs/classes.jar')

删除dependencies内所有属性,并将上述两行代码粘贴上去,如下图
在这里插入图片描述

修改AndroidManifest.xml

在这里插入图片描述
另外我做了一个安卓机振动的接口测试,所以我在AndroidManifest中添加了一行,如下图:

在这里插入图片描述

三、开始编写Android端接口并进行aar打包

先编写一个普通方法

源码如下:

package com.clap.unitycallandroid;//包名,这里不用跟着我改,维持自身原有的即可,后面其他的可以直接覆盖

import android.app.Service;
import android.os.Bundle;
import android.os.Vibrator;
import android.widget.Toast;

import static android.widget.Toast.makeText;

public class MainActivity extends UnityPlayerActivity {

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

    }
    public String UnityCallAndroid(String inputStr){
        return "UnityCallAndroid:"+inputStr;
    }
}

再编写一个安卓权限相关的方法

源码如下

package com.clap.unitycallandroid;//包名,这里不用跟着我改,维持自身原有的即可,后面其他的可以直接覆盖

import android.app.Service;
import android.os.Bundle;
import android.os.Vibrator;
import android.widget.Toast;

import static android.widget.Toast.makeText;

public class MainActivity extends UnityPlayerActivity {

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

    }
    public String UnityCallAndroid(String inputStr){
        return "UnityCallAndroid:"+inputStr;
    }

    private Vibrator vibrator;
    public void CallShake(long[] _strength,int _repeat){
        //测试是否调用成功弹窗
        makeText(MainActivity.this,"Unity Call Android", Toast.LENGTH_SHORT).show();
        if (vibrator==null){
            vibrator=(Vibrator) this.getSystemService((Service.VIBRATOR_SERVICE));
        }
        if (vibrator.hasVibrator()){
            vibrator.vibrate(_strength,_repeat);
        }
    }
}

写好之后点击下图所示进行“Make Project”

在这里插入图片描述

如果出现这个错误,可以按下图流程进行操作,或者将错误信息百度,也能得到答案

在这里插入图片描述
点击File/Project Structure…
在这里插入图片描述
弹出此面板后,按下图修改数值,手动输入Build Tools Version版本,我这儿使用的是30.0.3
在这里插入图片描述
再重新“Make Project”
成功后这里会多一个build的文件夹
在这里插入图片描述
在这个文件夹下边,找到aar文件,并在文件中查看,如下图所示
在这里插入图片描述
使用压缩工具打开可以看到下图目录,其中classes.jar和AndroidManifest.xml是我们需要的,选中这两项,解压出来。我这里是将其解压到桌面了。
在这里插入图片描述
再使用压缩工具打开classes.jar文件,一层一层打开,删除其中的BuildConfig.class文件。
在这里插入图片描述
到这里,Android端的准备工作就做完了。接下来是Unity中的要做的工作了。

四、Unity中的操作

创建新工程,并在Assets目录下边按层级创建下图文件夹

在这里插入图片描述
将刚刚导出classes.jar与AndroidManifest.xml文件复制到上图中Android文件夹下。

修改AndroidManifest.xml

在Unity中使用VS打开AndroidManifest.xml文件,删除下图红框内部分。
在这里插入图片描述

在脚本中调用

源码如下:

using UnityEngine;
using UnityEngine.UI;

public class UnityCallAndroid : MonoBehaviour
{
    public Button shakeBtn;
    public Button callAndroidBtn;
    public Text txt;
    AndroidJavaClass androidClass;
    AndroidJavaObject androidObj;
    private void Start()
    {
        shakeBtn.onClick.AddListener(Shake);
        callAndroidBtn.onClick.AddListener(CallAndroid);
    }
    private void CallAndroid()
    {
        //固定写法
        androidClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        //实例化AndroidJavaObject
        androidObj = new AndroidJavaObject("com.clap.unitycallandroid.MainActivity");
        string str = androidObj.Call<string>("UnityCallAndroid", "Unity Input");
        txt.text += ("\n" + str);
    }
    private void Shake()
    {
        androidClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        //这里我尝试使用与前一个方法相同实例化操作,
        //但在安卓端测试时,无法正常调用,如果有懂得伙伴,记得评论告诉我一下
        androidObj = androidClass.GetStatic<AndroidJavaObject>("currentActivity");
        long[] strength = new long[] { 0, 15 };
        androidObj.Call("CallShake", strength, -1);
    }
}

Inspector面板赋值
在这里插入图片描述
注明:测试一定要出apk进行测试,测试一定要出apk进行测试,测试一定要出apk进行测试,重要的事情说三遍。否则是无法正常调用写好的Android接口的。

参考来源:
Unity2019.4.4与AndroidStudio3.5.2交互
记录AndroidStudio打包成aar供Unity调用 其中的坑和过程
Unity3d接入安卓aar详细过程
Unity与安卓交互 之 ? 在Android Studio中写代码导出aar包,在Unity中使用交互(小白完整篇)
UnityDocumentationAndroidJavaObject

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-07-17 16:34:46  更:2022-07-17 16:35:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 3:26:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码