AndroidStudio3.5.2打包成AAR与Unity2017.4.37c2互相调用

基于Unity2017.4.37c2,AndroidStudio3.5.2,最小安卓版本23,目标版本26

首先创建一个安卓项目,项目名和包名随意取,如果只是把某个功能嵌入到Unity里,不需要用到这两个,项目类型选择Empty Activity

建立完项目之后,要等待AndroidStudio加载完依赖项,才可以创建Module,在全部加载完成之前,New-Module按钮为灰色

等待加载完成之后,我们点击建立一个Module

类型选择AndroidLibraly,此处名字要记住

建立完成之后,可以在左侧Project视窗中看见,如果找不到对应文件夹,可以把上方改成Project

之后我们点击上方菜单栏File-Project Structure按钮

在Dependencies菜单中将工程自带的app文件夹删掉

从Unity安装目录Unity\2017.4.37c2\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes下,把Classes.jar包拖入到lib文件夹下

再次进入File-Project Structure-Dependencies界面,点击加号,将lib下的Classes.jar添加进去

之后,我们在src-main-java-com.cuihuo.test2unity文件夹下右键-New-JavaClass创建一个类

键入以下代码,此处要特别注意,android.app.Fragment已经被弃用,如果自己手动输入extends Fragment的话,AndroidStudio会自动引用androidx.fragment.app.Fragment,此时add(Instance,"Test2Unity")语句会报错,将Instance改成new android.app.Fragment()即可解决报错,但是能不能与Unity进行交互我没有测试过,所以此处需要我们手动引用android.app.Fragement;

package com.cuihuo.test2unity;

import android.app.Fragment;

import com.unity3d.player.UnityPlayer;

public class test2Unity extends Fragment {
    public static test2Unity Instance;
    public static void Start()
    {
        Instance=new test2Unity();
        UnityPlayer.currentActivity.getFragmentManager().beginTransaction().add(Instance,"Test2Unity").commit();
    }
    public void CallBack(String _obj, String _fun, String _val){
        UnityPlayer.UnitySendMessage(_obj, _fun, "Android Callback " + _val);
    }
}

之后点开test2unity文件夹下的build.gradle文件

在最后面加上以下代码

task makeJar(type: Copy) {
    delete 'build/libs/test2unity.jar'
    from('build/intermediates/packaged-classes/release/')
    into('buildbs/')
    include('classes.jar')
    rename ('classes.jar', 'test2unity.jar')
}
allprojects {
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
        }
    }
}

exportJar.dependsOn(deleteOldJar, build)

此处是参考这篇博客,经过实际测试之后,打包出来并没有release文件夹,但是第二个方法代码不可删除,删除会无法导出jar包,第三个方法是解决使用过时api导致的导出报错问题,参考这篇博客

输入完成之后,我们在右侧Gradle界面,选中对应文件,右键-Refresh Gradle project

(因为遇到了个BUG,更换了打包Jar包的方法,此图内的代码不可做为参考,打包Jar包的时候不可将Classes一起打包,在高版本的Unity里会遇到重复依赖的错误)

运行完成之后,原文件下方会出现一个单独的对应文件,选中新创建出来的test2unity-test2unity-Tasks-other-MakeJar

打包完成之后不会出现Releas文件夹,而是在对应的项目目录下的buildbs文件夹下,其中即是我们要使用的安卓包

将其放入我们的Unity项目中,新建一个Text

新建一个Test.cs,键入以下代码,随便挂在游戏内哪个物体上,将Text拖入对应的变量里

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

public class Test : MonoBehaviour {
	public Text txt;
	// Use this for initialization
	void Start () {
		AndroidJavaClass ajc= new AndroidJavaClass("com.cuihuo.test2unity.test2Unity");
		ajc.CallStatic("Start");
		AndroidJavaObject ajo = ajc.GetStatic<AndroidJavaObject>("Instance");
		ajo.Call("CallBack",this.gameObject.name,"SetText","测试");
	}
	
	// Update is called once per frame
	void Update () {
		
	}
	public void SetText(string str) 
	{
		txt.text = str;
	}
}

这其中有几个需要注意的地方,AndroidJavaClass中的String路径,是由包名及类名组成的,要特别注意大小写,其中包名在一开始我们写的那段代码中可以看到Package com.cuihuo.test2unity,类名就是我们新建脚本时所命名的,AndroidJavaObject即是类中的变量,最后放个成功运行的效果

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值