Unity调用Android的两个方式:其一、调用jar包
unity在Android端开发的时候,免不了要调用Java;Unity可以通过两种方式来调用Android:一是调用jar、二是调用aar。
这篇文章主要讲解怎么从无到有的生成一个jar包,然后unity怎么调用jar。
一、通过Android studio生成jar包。
首先,在Android studio上面新建一个工程。

选择你要发布的Android 版本,注意:要和unity保持一致。

选择empty activity

默认的activity name不用动,直接点finish

找到unity的安装路径D:\****\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes

复制class.jar到Android studio\Project\app\libs

在Android studio的file 找到Project Structure... 点击

接下来找到app,找到dependdencies,点击右边的+号,选择第二个 2 file dependency

找到 libs下刚导进去的class.jar, 点击OK

接下来就是在MainActivity里编写接口了

将MainActivity继承UnityPlayerActivity,然后删掉setContentView(R.layout.activity_main); 如果不继承UnityPlayerActivity也是可以的,
类似这样

或者这样

选择其中的一种编写来接口
package com.hello.world; import android.os.Bundle;
import android.util.Log; import com.unity3d.player.UnityPlayerActivity; public class MainActivity extends UnityPlayerActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
//接口
public String test()
{
Log.v("测试","成功");
return "测试成功";
} }
在AndroidManifest.XML中添加 <meta-data android:name="unityplayer.UnityActivity" android:value="true" /> 
OK,目前为止准备工作已经完成了,接下来该打jar包了
打开app的build.gradle

将apply plugin: 'com.android.application' 改为apply plugin: 'com.android.library' 删掉 defaultConfig 下的 applicationId "com.hello.world"

在下面添加如下代码
task makeJar(type: Copy) {
delete 'build/libs/unitylib.jar'
from('build/intermediates/bundles/release/')
into('build/libs/')
include('classes.jar')
rename('classes.jar', 'unitylib.jar')
}
makeJar.dependsOn(build)

打开Terminal 输入gradlew makeJar 然后敲回车

我之前更新Android SDK的时候更改过路径,就会报错: Could not find tools.jar. Please check that D:\AndroidStudio\MyJDK\MyJava cont

解决的方法是在gradle.properties中配置一下路径就OK了:org.gradle.java.home=D:\\AndroidStudio\\MyJDK\\JDk

显示这样就说明jar打包成功了

打好的jar包就在app/build/libs下

二、unity调用jar包
新建一个工程,将unity切换到Android平台,点击player Setting

将unity的包名和Android的版本设置的和jar包的一样

扩展:unity和调Android有两种方法:
一种是通过AndroidJavaClass类,建立在AndroidJNIHelper的基础上
一种是通过AndroidJavaObject类,建立在AndroidJNI的基础上,是AndroidJavaClass的父类
在这里我们通过AndroidJavaObject来调用,简单。还有一个原因,通过AndroidJavaClass调用时,打包的时候光报错,搞了两天也没解决bug, 心中万匹草泥马奔腾而过,所以果断放弃了这个方法,有兴趣的同学可以研究一下,回头教教我。
我们继续
在assets先创建Plugins/Android,主要名字别写错了,在Android studio中找到jar包,把它放在Android文件夹下,
添加脚本test,保存场景为test

在test脚本里添加如下代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class Test : MonoBehaviour { void OnGUI()
{
//方法一
try {
var javaClass = new AndroidJavaObject("com.hello.world.MainActivity");
string value1=javaClass.Call<string>("test");
GUI.Label (new Rect(,,,),value1);
} catch (System.Exception ex) {
GUI.Label (new Rect(,,,),ex.ToString());
}
//方法二
try {
AndroidJavaClass jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject> ("currentActivity");
string value2=jo.Call<string> ("test");
GUI.Label(new Rect(,,,),value2);
} catch (System.Exception ex) {
GUI.Label (new Rect(,,,),ex.ToString());
} }
}
打包场景,搞定。
Android模拟器运行结果:

如果你按我上面的步骤进行的,或者看其他人写的教程,Unity在Build时都一样报错,那么恭喜你,你将终结这个噩梦。
1、找到Android studio工程里的values/styles.xml

2、打开后是这样子的

3、同志们,重点来了,简单粗暴一点,将styles.xml里的东西统统删掉,只留下如下内容

OK了,重新生成jar包,然后放心的扔到Unity了Build去吧,绝对不会再有问题了。
求关注啊,同志们
Unity调用Android的两个方式:其一、调用jar包的更多相关文章
- Unity调用Android的两种方式:其一、调用jar包
unity在Android端开发的时候,免不了要调用Java:Unity可以通过两种方式来调用Android:一是调用jar.二是调用aar. 这篇文章主要讲解怎么从无到有的生成一个jar包,然后un ...
- unity调用Android的两种方式:其二,调用aar包
上一篇我们讲了unity如何调用jar包 http://www.cnblogs.com/Jason-c/p/6743224.html, 现在我们介绍一下怎么生成aar包和unity怎么调用aar 一. ...
- 调用init方法 两种方式 一个是浏览器方法 一个是 xml中手工配置(load-on-startup)
调用init方法 两种方式 一个是浏览器方法 一个是 xml中手工配置(load-on-startup)
- C++调用DLL有两种方法——静态调用和动态调用
C++调用DLL有两种方法——静态调用和动态调用 标签: dllc++winapinullc 2011-09-09 09:49 11609人阅读 评论(0) 收藏 举报 分类: cpp(30) [ ...
- 自学Linux Shell9.2-基于Red Hat系统工具包存在两种方式之一:RPM包
点击返回 自学Linux命令行与Shell脚本之路 9.2-基于Red Hat系统工具包存在两种方式之一:RPM包 本节主要介绍基于Red Had的系统(测试系统centos) 1. 工具包存在两种方 ...
- Springboot中IDE支持两种打包方式,即jar包和war包
Springboot中IDE支持两种打包方式,即jar包和war包 打包之前修改pom.xml中的packaging节点,改为jar或者war 在项目的根目录执行maven 命令clean pa ...
- Android tips(八)-->Android Studio打包apk,aar,jar包
文本我们将讲解android studio打包apk,aar,jar包的相关知识.apk包就是android系统的安装包,这里没什么好说的,aar包是android中独有的类库包,而jar包是java ...
- Android Studio打包apk,aar,jar包
转载请标明出处:一片枫叶的专栏 文本我们将讲解android studio打包apk,aar,jar包的相关知识.apk包就是android系统的安装包,这里没什么好说的,aar包是android中独 ...
- Android源码中编译出指定jar包
今天想把android源码/vendor/letv/frameworks/base/java下的源码编译成 framework-letv.jar供乐乐语音客户端使用,编译完后,发现jar包文件虽然生成 ...
随机推荐
- html5部分相关
滚动速度属性 scrollamount 例子<marquee scrollamount="3">这个速度是3</marquee> <marquee s ...
- HTML5周记(一)
各位开发者朋友和技术大神大家好!博主刚开始学习html5 ,自本周开始会每周更新技术博客,与大家分享每周所学.鉴于博主水品有限,如发现有问题的地方欢迎大家指正,有更好的意见和建议可在评论下方发表,我会 ...
- 【Unity编程】欧拉角与万向节死锁(图文版)
版权声明:本文为博主原创文章,欢迎转载.请保留博主链接:http://blog.csdn.net/andrewfan 万向节死锁(Gimbal Lock)问题 上文中曾经说过,欧拉旋转的顺规和轴向定义 ...
- 关于nodeJS多线程的支持,目前看来无法实现,讲解v8的一些东西
关于这个,我这几天一直在研究,国内关于v8的资料很少,stackoverflow上也不多. 说起来我得说声抱歉,虽然并没有承诺什么.这个功能大概是无法实现.下面我来解释一下为什么. 首先我们要了解一下 ...
- springMVC中文乱码问题解决
1:表单提交controller获得中文参数后乱码解决方案 注意: jsp页面编码设置为UTF-8 form表单提交方式为必须为post,get方式下面spring编码过滤器不起效果 <%@ ...
- Android -- 仿小红书欢迎界面
1,觉得小红书的欢迎界面感觉很漂亮,就像来学习学习一下来实现类似于这种效果 原效果图如下: 2,根据效果我们来一点点分析 第一步:首先看一下我们的主界面布局文件视图效果如下: main_activi ...
- js数据类型:引用和5种基本数据类型
javascript有2种基本数据类型:引用和基本数据类型 基本数据类型又有5个分类:布尔型.字符串.数值.undefined.NULL.
- Spring报错——Scope 'session' is not active for the current thread
在对程序进行了一些修改后,运行发现spring报了这个错误,这是由于我设置了一个@Scope("session")导致的,现记录下解决方法. 解决方法: 将Scope设置为scop ...
- Linux块设备驱动(二) _MTD驱动及其用户空间编程
MTD(Memory Technology Device)即常说的Flash等使用存储芯片的存储设备,MTD子系统对应的是块设备驱动框架中的设备驱动层,可以说,MTD就是针对Flash设备设计的标准化 ...
- PHP之流程的控制
在一个公司中,员工肯定会有高层.中层和普通员工的,这样如果在某个公司员工遇到某种问题,需要请假.或者提一些请求的时候,就会需要去申请,申请的时候有的是可以直接和上级申请的,有时比较重要的事情,是 ...