荐 U3D调用AndroidStudio3.5(附测试工程)

2022-08-08,,,,

使用版本:
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的包名不能与安卓的包名一致

 

最终测试结果:

 

 

测试工程我已经上传到下载资源中,地址为:https://download.csdn.net/download/Tel17610887670/12584600

本文地址:https://blog.csdn.net/Tel17610887670/article/details/107176352

《荐 U3D调用AndroidStudio3.5(附测试工程).doc》

下载本文的Word格式文档,以方便收藏与打印。