Unity3D调用AndroidStudio(附3.5测试工程)

17 篇文章 1 订阅
使用版本:
Unity:2018.2.10f
AS:3.5

最近由于需要接公司原生的java SDK,所以打算用U3D调用sdk、然后监听sdk回调的方法,麻烦的地方在于sdk部分需要在AS中去做。查找了不少帖子,终于找到了以这篇博客

1,

根据博客中的方法,首先新建一个安卓工程:

2,工程新建之后右键创建一个模块,取名叫unityactivity,注意这里的包名和新建工程的包名要一致(尽量避免不必要的错误,当然具体原因我还不太清楚)

3,然后打开U3D安装目录,找到Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes下的classes.jar,找到后复制放入unityactivity模块的libs文件夹下,然后右键->Add as Library

这里选默认的就行了,也就是导入到unityactivity文件夹下,导入之后截图如下(classes.jar前面有效小三角,代表导入成功):

4,在AS中编写交互脚本,一个是U3D调用AS,然后AS给U3D回调。如果是接SDK的话,即U3D调用SDK的消息,然后等SDK收到回调方法后,再把消息通知给U3D。代码如下:

package com.yadong.unityactivity;

import androidx.appcompat.app.AppCompatActivity;

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

import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;

public class UnityMainAcivity extends UnityPlayerActivity {

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

    //unity调用Android
    public void UnityCallAndroid () {
        AndroidCallUnity();
    }

    //android调用unity
    public void AndroidCallUnity () {
        //第1个参数为Unity场景中用于接收android消息的对象名称
        //第2个参数为对象上的脚本的一个成员方法名称(脚本名称不限制)
        //第3个参数为unity方法的参数
        UnityPlayer.UnitySendMessage("Text", "fromeAndroid", "安卓给你发消息了.");
        Toast.makeText(this,"android给U3D返回消息", Toast.LENGTH_LONG).show();
    }
}

5,修改AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.yadong.unityactivity">

    <!-- 这个android:label设置后,unity中ProductName就不生效了,记得改这个-->
    <application >

        <!-- 这个android:name的值必须为包名+类名-->
        <activity android:name="com.yadong.unityactivity.UnityMainAcivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

            <!-- 这一行不能少,否则会闪退-->
            <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
        </activity>
    </application>

</manifest>

6先Build-Clean Project一下,然后Build-Make Module ‘模块名字’,生成jar包,结果如下:


7,在unity新建文件夹 Plugins/Android/bin,将上一步找到的classes.jar放进去,同时将第六步修改的AndroidManifest.xml复制到Plugins/Android和bin同一层级,放完后:

8,接下来我们处理U3D的部分,新建一个测试的脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class NewBehaviourScript : MonoBehaviour
{
    public Text text;

    public Button btn;
    AndroidJavaObject jo;
    private void Start()
    {
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
        btn.onClick.AddListener(CallAndroid);

    }

    public void CallAndroid()
    {

        jo.Call("UnityCallAndroid");
        Debug.Log("点击按钮");
        System.Console.WriteLine("点击按钮");
    }

    void methodName111(string str)
    {
        text.text = str;
        Debug.Log(str);
        System.Console.WriteLine(str);
    }

    void fromeAndroid(string str)
    {
        text.text = str;
        Debug.Log("安卓传来信息 : " + str);
        System.Console.WriteLine("安卓传来信息 : " + str);
    }
}

9,然后建个Text,将脚本拖上去;再建个button,监听点击回调

10,打包成apk,这里要注意apk的包名不能与安卓的包名一致

最终测试结果:

测试工程我已经上传到下载资源中,地址为:U3D调用AS3.5.rar-Unity3D文档类资源-CSDN下载   

~~~~~~~~~~~~~~~~2022.11.30更新~~~~~~~~~~~~~

unity2020以后的classes.jar所在位置:

Unity Hub\Hub\Editor\2020.3.33f1c2\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes

另外unity 2019.3后的版本classes.jar不包含UnityPlayerActivity类了,我们需要复制UnityPlayerActivity.java到模块src路径下。

UnityPlayerActivity.java位置:

Unity Hub\Hub\Editor\2020.3.33f1c2\Editor\Data\PlaybackEngines\AndroidPlayer\Source\com\unity3d\player

其实对于AS工程来说来说,正常开发即可。如果想继承UnityPlayerActivity,打包的时候需要在build.gradle中添加如下字段:

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

并在打包后解压缩aar,删除 classes.jar和UnityPlayerActivity.java,否则unity中打包时候会报类重复的错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值