unity调用aar包 适配AndroidX冲突
开发环境:
- 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-rnandroid.useAndroidX=true# Automatically convert third-party libraries to use AndroidXandroid.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=-Xmx4096Mandroid.useAndroidX=trueandroid.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文件测试一下吧
更多相关文章
- Android(安卓)资源文件错误排查 Process 'command ' 等错误排查
- Android实现文件目录的选择并保存到SharedPreferences中(适配6.0
- Android中悬浮窗口
- Develop--Training(五)Getting Started--Saving Data
- apk 反编译 教程 (不支持混淆,Android)
- Android2.3 x86 安装实战
- android按键映射
- Android获得文本框 单选框 多选框的值
- Android游戏开发菜鸟之路(三)