1)新建空的AndroidStudio工程,但是新建过程时最小SDK版本要与unity一致,如下图所示,本次操作均为api16

2)创建Library,如下图所示,新建module,然后选择Android Library。

新建模块为UnityPlugin,如下图所示,注意此时的PackageName后续用得到

4)引入unity的classes.jar

按下图所示,找到Unity安装目录下的classes.jar文件,并放入上述工程中\unityplugin\libs下(即新建Module下的libs下)

选择File-ProjectStructure,调出Project Structure界面,依次选择unityplugin(上述建立的module)-Dependencies,然后点击右侧加号-Jar dependences,并选择libs下引入的classes.jar,如下图所示,确定引入。

5)添加插件代码

在com.idea.unityplugin下新建类UnityPlugin

在类UnityPlugin(继承UnityPlayerActivity )中添加如下代码

package com.idea.unityplugin;import android.os.Bundle;
import android.widget.Toast;import com.unity3d.player.UnityPlayerActivity;public class UnityPlugin extends UnityPlayerActivity {@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);}// 传入数据,并通过toast显示public void ShowToast(final String message){runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();}});}// 返回一个字符串(静态方法)public static String GetInformation(){return "Android Static Msg";}// 返回一个字符串(非静态方法)public String GetInfo(){return "Android Msg";}
}

6)生成jar或者aar包

点击build.gradle(此插件的gradle),添加如下代码,操作如下图所示。

task makeJar(type: Copy) {delete 'build/libs/unityplugin.jar'from('build/intermediates/bundles/release/')into('build/libs/')include('classes.jar')rename('classes.jar', 'unityplugin.jar')
}makeJar.dependsOn(build)

点击Terminal,输入gradlew makeJar回车,等待执行结束即可,即可在\unityplugin\build\outputs\aar下目录下找到.aar文件。

7)将6)中aar文件放入unity中Assets文件下Plugins\Android目录下,同时新建AndroidManifest.xml文件,并添加如下内容

<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.xxxx.androidplugin"android:versionCode="1"android:versionName="1.0"><applicationandroid:allowBackup="true"android:label="@string/app_name"android:supportsRtl="true"><activity android:name="com.XXXX.unityplugin.UnityPlugin"android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

注意事项如下图所示

8)调用代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class CallAndroidMethod : MonoBehaviour
{public Button[] buttons;public Text text;private void ShowAndroidToast(){//text.text = "Toast ";using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer")){using (AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity")){text.text = "Toast:";jo.Call("ShowToast", "Android Toast");}}//using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))//{//    text.text += " Toast1 ";//    using (AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("crrentActivity"))//    {//        text.text += " Toast2 ";//        //jo.Call("ShowToast", "Android Toast");//        jo.CallStatic<string>("GetInformation");//        text.text += " Toast3 ";//    }//}
    }private void GetInfomation(){string info = "";using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer")){using (AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity")){text.text = "Static:";info = jo.CallStatic<string>("GetInformation");}}text.text += info;}private void GetInfo(){string info = "";using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer")){using (AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity")){text.text = "Nonstatic:";info = jo.Call<string>("GetInfo");}}text.text += info;}// Use this for initializationvoid Start (){buttons[0].onClick.AddListener(ShowAndroidToast);buttons[1].onClick.AddListener(GetInfomation);buttons[2].onClick.AddListener(GetInfo);}
}

然后发布apk即可用了

出现问题:

1)CommandInvokationFailure: Gradle build failed.

解决:修改Build System为Internal

2)IOException: Failed to Move File / Directory from 'Temp/StagingArea\android-libraries\app-debug\classes.jar' to 'Temp/StagingArea\android-libraries\app-debug\libs\classes.jar'.

解决:将插件aar文件用解压软件打开(直接双击),并不解压,然后删除libs下的classed.jar即可。

参考文献:

https://blog.csdn.net/qq_16763249/article/details/81876038(非MainActivity调用方法,纯java类调用)

https://blog.csdn.net/qq_28775437/article/details/78605691?locationNum=3&fps=1(打包报错问题汇总)

https://blog.csdn.net/qiu_zhongya/article/details/51419456(主要参考文献_原文)

转载于:https://www.cnblogs.com/llstart-new0201/p/9995022.html

(五)Unity插件生成相关推荐

  1. Unity插件:Unity使用spine动画

    一.spine动画介绍 动画能给游戏带来生机和灵气.我们相信创作一段美妙的动画,不仅需要强大的软件工具,更需要一套牛 B 的工作流程.Spine 专注于此,为您创建惊艳的骨骼动画,并将其整合到游戏当中 ...

  2. unityar自动识别人脸_三款Unity插件带您玩转人脸识别与模拟

    原标题:三款Unity插件带您玩转人脸识别与模拟 若想让游戏或电影中的虚拟角色表现得更加真实,面部表情是至关重要的.人脸识别技术则借助真人表演来为虚拟角色赋予丰富的表情与面部动作,小至皱眉带动眼部肌肉 ...

  3. Asset Store上常用的40个Unity插件汇总——进阶开发者必备Unity插件

    上篇文章着重介绍了Unity Asset Store(Unity资源商店)上一些超棒的资源与素材. unity老司机的资源推荐与常用插件汇总合集 - 简书 Unity插件资源购买小技巧 - 简书 本篇 ...

  4. Unity之生成扫描二维码

    Unity之生成扫描二维码 Unity之生成扫描二维码 前言 开篇 Unity版本及使用插件 正题 前期准备 首先生成二维码 然后需要扫描二维码 该使用了 挂载脚本绑定按钮和输入框 运行内容 生成二维 ...

  5. 网页获取微信信息——js使用插件生成二维码(1)

    js使用插件生成二维码: 一.安装依赖: npm i qrcodejs2 -S 二.放置二维码的容器,需要给一个ref <div class="QRcodeCon">& ...

  6. SteamVR 2.0 Unity插件使用指南

    随着VR生态的日益增长,以及Valve Knuckles控制器的逐渐完善,SteamVR未来能够提供给用户更多的交互方式,比如手指跟踪和力反馈.近期,Valve在Unity资源商店中将SteamVR插 ...

  7. 【Unity插件】最多的插件合集

    一.前言 ? 最近整理了一下文章,发现我分享了很多的插件,但是如果要查找某一款插件,还需要去搜索才能找到,很不方面,就想要将写过的所有的插件分享也好,教程也好,做一个汇总,然后这篇文章还会不断的更新, ...

  8. Unity插件 EasyTouch

    原文链接 https://blog.csdn.net/q764424567/article/details/78426905 参考资料: Unity3D教程之EasyTouch插件 http://ww ...

  9. 谷歌移动广告Unity插件

    谷歌移动广告Unity插件帮助谷歌移动广告提供了一种方法在Unity项目部署为原生的Android和iOS应用程序.插件功能包括: • 一个包和交叉平台(Android / iOS)支持 • 模拟广告 ...

最新文章

  1. Flutter开发之MVC设计模式:新建文件与导入文件(八)
  2. 推荐一个单元测试模拟框架:Nsubstitute
  3. Yum在线升级之网络(本地)服务器的搭建!
  4. Java基础-特殊数据类型:枚举
  5. 信息系统项目管理知识--云计算
  6. .NET中使用Memcached的相关资源整理 转载之DUDU 程序员打杂的站长
  7. 访问 asp网页 白屏_(02)ASP如何设定主目录和默认文档
  8. 快速学会php视频,PHP视频从入门到精通---适合PHP初学者
  9. JavaWeb初学者session的使用
  10. mariadb用户群体mysql_mysql(mariadb)新建用户及用户授权管理
  11. 微信小程序点播音频服务器,微信小程序无法播放本地音频
  12. 毕业论文参考文献格式及引用设置
  13. java guardedby_Java多线程基础(五)——Guarded Suspension模式
  14. Elastic基本概念
  15. JVM学习笔记(12) 垃圾回收-垃圾回收相关算法
  16. terminus 和 windows terminal_Windows命令行终端神器Cmder配置及美化指南
  17. (12)WLAN体系结构及各层的主要功能
  18. rabbitmq创建账号
  19. Logstash 原理分析/配置文件详解 时间 日期 时区 ip 反斜杠 grok在线地址 类型转换
  20. ROSNOTE : ros::spin() / ros::spinOnce() /rospy.spin()

热门文章

  1. 面向数智营销的 AI FAAS 解决方案
  2. 一口气放出三篇SIGIR论文!详解阿里妈妈搜索广告CTR模型演进
  3. TCP文件上传Java_java 基于TCP协议的文件上传
  4. PAT_B_1042_Java(20分)
  5. 数学--数论-多重集排列组合与母函数
  6. Linux中的动态链接库与静态链接库
  7. Bash Shell学习笔记一
  8. HTML中的国家名称代码表
  9. 脱了马甲我也认识你: 聊聊 Android 中类的真实形态
  10. 31312312312iiiii