Unity3d调用android studio生成的aar包

一天了,从早上九点到晚上凌晨2两点一直在鼓捣这个玩意。死活就是弄不好,现在终于成功了,但还不能睡觉,抓紧把这次成功的过程记录下来。

首先,android studio 和 Unity的版本

这个真的可能会有很大的影响。起码我一开始死活弄不对,两个全部重新安装了版本之后才鼓捣了半天成功的。

以及android studio 版本是 3.0.1

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

以一个简单的函数为例,在android studio中使用java实现一个返回 a+b 的函数 (siki学院bathur老师所讲的例子)

首先在Android studio中新建一个project

我的配置如下

Unity3d调用android studio生成的aar包_第1张图片

Unity3d调用android studio生成的aar包_第2张图片

创建一个Empty Activity,进入工程后等待一会。

我们要用的是生成的library而不是activity,故进入后,按照如下方法创建一个module

Unity3d调用android studio生成的aar包_第3张图片

Unity3d调用android studio生成的aar包_第4张图片

名字设置为 “AndroidAdd”

自动配置完成后,首先添加一个activity作为MainActivity。

Unity3d调用android studio生成的aar包_第5张图片

Unity3d调用android studio生成的aar包_第6张图片

再一次,我们用的是library而不需要界面,先把界面的配置layout下的文件删掉

Unity3d调用android studio生成的aar包_第7张图片

然后修改MainActivity中继承的类,但首先要将Unity3d中的classes拷贝过来。(拷贝的时候切换到project视图)

Unity3d调用android studio生成的aar包_第8张图片

然后将其添加为库

Unity3d调用android studio生成的aar包_第9张图片

然后就可以对MainActivity文件进行如下编写了

package com.zju.ichigo.androidadd;

import android.os.Bundle;

import com.unity3d.player.UnityPlayerActivity;

public class MainActivity extends UnityPlayerActivity {

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

    }
    public int minus(int a,int b){
        return a-b;
    }
}

为了使其能够在unity3d中使用,还需要配置Menifest文件,即AndroidManifest.xml(切换回android视图,找到它),进行如下编写




    
        
            
                

                
            
            
        
    

这就差不多了,可以创建了,点击build module,成功后就可以在project视图下找到输出的aar文件。

Unity3d调用android studio生成的aar包_第10张图片

以及我们还需要manifest文件,在这里找到他

Unity3d调用android studio生成的aar包_第11张图片

把这两个分别拷贝到一个文件夹中,还要进行一定的处理才可以交给unity3d使用。

要对其进行的处理,首先修改这个manifest文件

Unity3d调用android studio生成的aar包_第12张图片

把这里的报名修改成你想要的app的名字,必须修改,否则和aar包里的library报名冲突在生成apk的时候会报错。

然后使用解压软件打开aar包裹,将位于外面的classes替换调libs中的classes文件。

Unity3d调用android studio生成的aar包_第13张图片

然后再把这个aar包里面的AndroidManifest.xml文件拷贝出来进行修改。

只需要删除label那一句就可以了

Unity3d调用android studio生成的aar包_第14张图片

到此为止就可以打开unity3d了,新建一个项目,将平台切换为android,Build system选项设置为gradle

Unity3d调用android studio生成的aar包_第15张图片

然后点击player settings 进行签名,包名的设置。

注意。此处设置的报名必须和aar包外面的Manifest文件中的包名一样。

Unity3d调用android studio生成的aar包_第16张图片

然后在Assets文件夹下创建Plugins文件夹,再在其下创建Android文件夹,将两个文件拷贝过来。效果如下所示

Unity3d调用android studio生成的aar包_第17张图片

然后创建一个c#脚本,进行如下的简单编写,致于具体函数怎么调用可从网上搜到,很简单而且方法固定

(我其实在安卓那边编写的代码是minus即减法,不过包名还是add。。。忘记改了,)

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


public class Test : MonoBehaviour {
    public Text text;
	// Use this for initialization
	void Start () {
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject jo = jc.GetStatic("currentActivity");
        text.text = jo.Call("minus", 55, 2).ToString();
    }
	
	
}

这样在Unity3d中创建一些UI组件,讲一个文本组件赋给这个公共的Text,然后将这个脚本挂载到一个游戏物体上。就可以输出函数调用的结果了。

最后进行build,导出apk到手机上,运行效果如下所示。

Unity3d调用android studio生成的aar包_第18张图片

在折腾了整整一天后,真的感觉,这就是最美的画面了。

 

你可能感兴趣的:(Unity学习笔记)