Android开发 互相调用模式之导出Jar包、扩展MainActivity、Java主导

首先讲导出Jar包,在之前都是用这种方法,可是如今官方不推荐使用此方法,官方推荐导出Aar包html

(1)首先建立一个Android空工程java

注意:这里选择API 16,由于Unity支持的最低是API 16android

 

(2)建立一个新的模块app

依次选择,File > New > New Module,而后选择Android Library函数

保证最小API等级为16布局

 

(3)建立一个Activity字体

建立好后,默认生成了一个xml布局,删除掉,咱们的布局是unity控制的ui

 

(4)切换到Project下,导入Unity支持包debug

Unity支持包在Unity安装目录下:G:\unity2017.1.1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes\classes.jar3d

复制以上目录下的classes.jar,粘贴到libs文件夹下

粘贴进去后,把这个包添加到当前模块中去

 

(4)切回到Android下,打开AndroidManifest.xml,这至关于一个Android清单,告诉Android咱们的程序都有哪些东西,每一个页面都是干吗的,还能配置一些权限。要扩展Unity的MainActivity,先改这个

修改方法:将app文件夹下的AndroidManifest.xml的这部分复制过来,而后删掉红色报错部分

修改label,之后安装到手机就是这个名字

标识Activity的类型是Unity用的,加上下面的代码:

<meta-data android:name="unityplayer.UnityActivity" android:value="true" />

修改MainActivity.java

 

(5) 提供一个方法给Unity,这里提供了一个简单的加法运算

在java中写好这个方法后,要提供给Unity使用,先作出这个模块

切换到Project,依次打开testlibrary > build > intermediates > bundles(老版本是这个,新版本是packaged-classes) > debug > libs下的jar包

删除这个包,将debug目录下与libs文件夹同层的包拷贝进来

把这个libs文件夹复制到桌面备用,而后把与libs文件夹同层的res文件夹也复制到桌面备用。可是新的版本的res文件夹是没有的,找了下,也是在文件夹packaged-classes下面

而后把这个xml复制到桌面备用

打开这个xml,修改这个名字为本身须要的名字,注意所有小写

 

(6) 在Unity中使用这个方法

建立好工程,设置为Android打包,设置包名,包名为上面xml中咱们修改的那个

建立文件夹Plugins及其子文件夹Android(注意:这两个文件夹名字是固定的),将复制到桌面上的3个东西拷贝进去

建立一个脚本挂在相机上,在这里咱们使用Unity来调用Android那边提供的add方法,而后把结果显示在Text组件上。

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

public class Test : MonoBehaviour {

    public Text text;

	void Start () {
        // 得到位于com.unity3d.player包下的UnityPlayer类
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        // 得到jc所表明的类下的currentActivity对象
        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");

        // 调用Android提供的Android方法
        // 使用Call调用,<>表示有返回值,没有返回值则不须要这个
        text.text = jo.Call<int>("add", 2, 3).ToString();
	}
}

数据线链接手机,打包,能够看到结果

 

(7)上面是在Android中定义了一个方法,在Unity中调用。如今咱们在Unity中定义一个方法,在Android中调用。

定义一个简单的方法,改变字体的颜色。

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

public class Test : MonoBehaviour {

    public Text text;

	void Start () {
        // 得到位于com.unity3d.player包下的UnityPlayer类
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        // 得到jc所表明的类下的currentActivity对象
        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");

        // 调用Android提供的Android方法
        // 使用Call调用,<>表示有返回值,没有返回值则不须要这个
        text.text = jo.Call<int>("add", 2, 3).ToString();
	}

    public void ChangeColor()
    {
        text.color = Color.red;
    }
}

在Android中调用,使用方法:

UnityPlayer.UnitySendMessage("Main Camera","ChangeColor","");

第一个参数表示脚本所挂载的位置,第二个参数表示函数名,第三个参数表示参数

从新Build,导出libs和res文件夹,替换Unity下对应文件夹,而后从新打包运行,结果:

相关文章
相关标签/搜索