unity与AndroidStudio交互爬坑(AndroidStudio导出Aar包供给unity使用)

unity与AndroidStudio交互爬坑
我看了好多 就是你抄我的 我抄你 我做的时候有点坑要爬

1.先看AndroidStudio这边
新建项目
unity与AndroidStudio交互爬坑(AndroidStudio导出Aar包供给unity使用)_第1张图片
unity与AndroidStudio交互爬坑(AndroidStudio导出Aar包供给unity使用)_第2张图片
新建module(在Android面板)
unity与AndroidStudio交互爬坑(AndroidStudio导出Aar包供给unity使用)_第3张图片
unity与AndroidStudio交互爬坑(AndroidStudio导出Aar包供给unity使用)_第4张图片

unity与AndroidStudio交互爬坑(AndroidStudio导出Aar包供给unity使用)_第5张图片
unity与AndroidStudio交互爬坑(AndroidStudio导出Aar包供给unity使用)_第6张图片
把unity下的jar包复制到刚新建的module下的libs里
unity与AndroidStudio交互爬坑(AndroidStudio导出Aar包供给unity使用)_第7张图片
把刚刚拷贝过俩的class.jar包 Add As Library
unity与AndroidStudio交互爬坑(AndroidStudio导出Aar包供给unity使用)_第8张图片unity与AndroidStudio交互爬坑(AndroidStudio导出Aar包供给unity使用)_第9张图片
完了jar包就成这样子了unity与AndroidStudio交互爬坑(AndroidStudio导出Aar包供给unity使用)_第10张图片
回到刚刚创建的test20200730 类里 开始复制粘贴代码
都是我复制的

package com.hwx.hwxtest;
import android.app.Activity;
import android.content.Context;
import android.widget.Toast;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class test20200730 {
    private Activity unityActivity;
    private Context context;
    /**
     * 利用反射机制获取unity项目的上下文
     * @return
     */
    Activity getActivity()
    {
        if(null == unityActivity) {
            try {
                Class<?> classtype = Class.forName("com.unity3d.player.UnityPlayer");
                Activity activity = (Activity) classtype.getDeclaredField("currentActivity").get(classtype);
                unityActivity = activity;
                context = activity;
            } catch (ClassNotFoundException e) {
                System.out.println(e.getMessage());
            } catch (IllegalAccessException e) {
                System.out.println(e.getMessage());
            } catch (NoSuchFieldException e) {
                System.out.println(e.getMessage());
            }
        }
        return unityActivity;
    }
    /**
     * Android调用Unity的方法
     * @param gameObjectName    调用的GameObject的名称
     * @param functionName      方法名
     * @param args              参数
     * @return                  调用是否成功
     */
    boolean CallUnity(String gameObjectName, String functionName, String args){
        try {
            Class<?> classtype = Class.forName("com.unity3d.player.UnityPlayer");
            Method method =classtype.getMethod("UnitySendMessage", String.class,String.class,String.class);
            method.invoke(classtype,gameObjectName,functionName,args);
            return true;
        } catch (ClassNotFoundException e) {
            System.out.println(e.getMessage());
        } catch (NoSuchMethodException e) {
            System.out.println(e.getMessage());
        } catch (IllegalAccessException e) {
            System.out.println(e.getMessage());
        } catch (InvocationTargetException e) {

        }
        return false;
    }
    /**
     Unity调用安卓的方法
     * Toast显示unity发送过来的内容
     * @param content           消息的内容
     * @return                  调用是否成功
     */
    public boolean ShowToast(String content){
        Toast.makeText(getActivity(),content,Toast.LENGTH_SHORT).show();
        //这里是主动调用Unity中的方法,该方法之后unity部分会讲到
        CallUnity("Main Camera","FromAndroid", "hello unity i'm android");
        return true;
    }
    public int addfun(int i ,int j)
    {
        return i+j;
    }

}

然后make moudle hwxtest
unity与AndroidStudio交互爬坑(AndroidStudio导出Aar包供给unity使用)_第11张图片
make完以后 就会会有arr包了
unity与AndroidStudio交互爬坑(AndroidStudio导出Aar包供给unity使用)_第12张图片这一步要记得
unity与AndroidStudio交互爬坑(AndroidStudio导出Aar包供给unity使用)_第13张图片

AS这边就完了
2.unity这边
新建文件夹Plugins/Andriod 文件夹不能建错 把刚刚处理过的arr包拽到Andriod 文件夹下
unity与AndroidStudio交互爬坑(AndroidStudio导出Aar包供给unity使用)_第14张图片
复制代码

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

public class testandroid : MonoBehaviour {

	/// 
	/// 场景上的文本框用来显示android发送过来的内容
	/// 
	public Text text;
	public Text text1;

	/// 
	/// android原生代码对象
	/// 
	AndroidJavaObject _ajc;

	void Start () 
	{
		try{
		//通过该API来实例化导入的arr中对应的类
			_ajc = new AndroidJavaObject("com.hwx.hwxtest.test20200730");
			text.text =_ajc.ToString()+"!!!!!!";
		}
		catch(Exception e)
		{
			text.text = e.Message;
		}
	}

	/// 
	/// 场景上按点击时触发该方法
	/// 
	public void OnBtnClick()
	{
		try {
			//通过API来调用原生代码的方法
			bool success = _ajc.Call<bool>("ShowToast","this is unity");
			if(true == success)
			{
				text1.text = "success";
			}
			//text.text ="1+2="+_ajc.Call("addfun",1,2).ToString();
		} catch (Exception ex) {
			text.text = ex.Message + "3###3";
			
		}

	}

	/// 
	/// 原生层通过该方法传回信息
	/// 
	/// 
	public void FromAndroid(string content)
	{
		text.text = content;
	}
}

unity与AndroidStudio交互爬坑(AndroidStudio导出Aar包供给unity使用)_第15张图片
打包测试 打包时候的包名可以和as里的不一致
unity与AndroidStudio交互爬坑(AndroidStudio导出Aar包供给unity使用)_第16张图片

没有了
工程:https://download.csdn.net/download/hewenxiuhwx/12673888

你可能感兴趣的:(Unity,Andriod)