開發環境:
- 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文件測試一下吧