开发环境

  1. windows10
  2. unity 2018.4.2f1
  3. android studio 3.5

项目介绍
unity 调用android library中的方法,实现在unity中点击button启动activity的功能。其中library中引用第三方aar,用到的类库如:androidx,okhttp,retrofit2,glide etc.

操作步骤

  1. 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
  1. 创建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
  1. 编译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文件测试一下吧

更多相关文章

  1. Android(安卓)资源文件错误排查 Process 'command ' 等错误排查
  2. Android实现文件目录的选择并保存到SharedPreferences中(适配6.0
  3. Android中悬浮窗口
  4. Develop--Training(五)Getting Started--Saving Data
  5. apk 反编译 教程 (不支持混淆,Android)
  6. Android2.3 x86 安装实战
  7. android按键映射
  8. Android获得文本框 单选框 多选框的值
  9. Android游戏开发菜鸟之路(三)

随机推荐

  1. 批量重命名文件——python实现
  2. 用15行perl打造win32下的简易后门 python
  3. python使用多进程爬取图片
  4. Python 3.4 AssertEqual()在Django单元测
  5. pandas - 将嵌套字典值映射到dataframe
  6. 【python coding 1:网络检测】ping本地文
  7. 在Python中搜索一个并行数组
  8. python的requests类库(一)requests库和urll
  9. uwsgi遇到ImportError: No module named
  10. Gunicorn + Django + Heroku。Python的路