开发环境:
- windows10
- unity 2018.4.2f1
- android studio 3.5
项目介绍:
unity 调用android library中的方法,实现在unity中点击button启动activity的功能。其中library中引用第三方aar,用到的类库如:androidx,okhttp,retrofit2,glide etc.
操作步骤
- android创建library
(1)创建library,配置AndroidManifest.xml文件。
ps:gradle:3.2.1,minSdkVersion 19 compileSdkVersion 28
(2)引入unity的 classes.jar文件,放置到libs中
(3)编写MainActivity,注意继承UnityPlayerActivity
(4)点击Refactor->Migrate to AndroidX,之后gradle.properties会添加如下代码
# AndroidX package structure to make it clearer which packages are bundled with the
# Android operating system, and which are packaged with your app's APK
# https://developer.android.com/topic/libraries/support-library/androidx-rn
android.useAndroidX=true
# Automatically convert third-party libraries to use AndroidX
android.enableJetifier=true
- 创建unity项目
(1)创建3D项目
(2) 切换到2D视图,添加button,注意在Inspector视图中的Button别名
(3)为MainCamera添加脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ISBtnClick : MonoBehaviour
{
AndroidJavaClass jc;
AndroidJavaObject jo;
// Start is called before the first frame update
void Start()
{
Debug.Log("Start ");
//通过报名获取java class (固定写法,不要以为是自已的Android包名)
jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
//获取当前的activity (固定写法,不要以为是自己定义的Activity名称。。。)
jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
Button btn1 = GameObject.Find("Button").GetComponent<Button>(); //-----------(1)
btn1.onClick.AddListener(delegate () {
startMagicViewApp("getNowTime");
});
Button btnJava = GameObject.Find("btnJava").GetComponent<Button>(); //-----------(1)
btnJava.onClick.AddListener(delegate () {
startJava();
});
}
// Update is called once per frame
void Update()
{
}
public void startMagicViewApp(string methodName)
{
//调用activity里面的方法,传入方法名和参数
jo.Call(methodName,"Hello Android");
}
public void startJava()
{
AndroidJavaObject jn = new AndroidJavaObject("com.example.unityaar.Battery");
//调用java里面的方法,传入方法名和参数 jo可转化为context
jn.Call("javaShowToast", jo);
}
}
(4) 创建脚本,添加对AndroidX的支持
unity在编译android项目时,使用unity中默认gradle配置,我们需要对该文件重写
在项目的Asset/Plugins/Editor下新建一个C#文件,命名为SupportAndroidXGradlePropertiesBuildProcessor.cs(可随意命名)
using System.IO;
using UnityEditor.Android;
using UnityEngine;
public class NewBehaviourScript : IPostGenerateGradleAndroidProject
{
public int callbackOrder
{
// 同种插件的优先级
get { return 999; }
}
public void OnPostGenerateGradleAndroidProject(string path)
{
Debug.Log("Bulid path : " + path);
string gradlePropertiesFile = path + "/gradle.properties";
if (File.Exists(gradlePropertiesFile))
{
File.Delete(gradlePropertiesFile);
}
StreamWriter writer = File.CreateText(gradlePropertiesFile);
writer.WriteLine("org.gradle.jvmargs=-Xmx4096M");
writer.WriteLine("android.useAndroidX=true");
writer.WriteLine("android.enableJetifier=true");
writer.Flush();
writer.Close();
}
}
上述脚本对gradle.properties文件进行了修改
org.gradle.jvmargs=-Xmx4096M
android.useAndroidX=true
android.enableJetifier=true
-
编译unity项目
(1)将编译出的aar文件后缀名改为zip,用压缩软件打开,并将libs中的classes.jar文件删除,避免与unity中classes.jar冲突。删除后将文件后缀名改为aar(2)将aar文件、AndroidManifest.xml及引用到的第三方aar或jar文件放入unity项目中,目录结构如下
(3)点击File->Build Settings->Player Settings->android->Other Settings ,更改包名
(4)接上一步,在Publishing Settings中指定gradle template文件
在项目中找到mainTemplate.gradle,将android library build.gradle中的dependencies复制到mainTemplate.gradle 的dependencies中
(5)Build项目,安装apk文件测试一下吧