首先讲导出Jar包,在以前都是用这种方法,但是现在官方不推荐使用此方法,官方推荐导出Aar包

(1)首先创建一个Android空工程

注意:这里选择API 16,因为Unity支持的最低是API 16

(2)创建一个新的模块

依次选择,File > New > New Module,然后选择Android Library

保证最小API等级为16

(3)创建一个Activity

创建好后,默认生成了一个xml布局,删除掉,我们的布局是unity控制的

(4)切换到Project下,导入Unity支持包

Unity支持包在Unity安装目录下:G:\unity2017.1.1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes\classes.jar

复制以上目录下的classes.jar,粘贴到libs文件夹下

粘贴进去后,把这个包添加到当前模块中去

(4)切回到Android下,打开AndroidManifest.xml,这相当于一个Android清单,告诉Android我们的程序都有哪些东西,每个页面都是干嘛的,还能配置一些权限。要扩展Unity的MainActivity,先改这个

修改方法:将app文件夹下的AndroidManifest.xml的这部分复制过来,然后删掉红色报错部分

修改label,以后安装到手机就是这个名字

标识Activity的类型是Unity用的,加上下面的代码:

<meta-data android:name="unityplayer.UnityActivity" android:value="true" />

修改MainActivity.java

(5) 提供一个方法给Unity,这里提供了一个简单的加法运算

在java中写好这个方法后,要提供给Unity使用,先做出这个模块

切换到Project,依次打开testlibrary > build > intermediates > bundles(老版本是这个,新版本是packaged-classes) > debug > libs下的jar包

删除这个包,将debug目录下与libs文件夹同层的包拷贝进来

把这个libs文件夹复制到桌面备用,然后把与libs文件夹同层的res文件夹也复制到桌面备用。但是新的版本的res文件夹是没有的,找了下,也是在文件夹packaged-classes下面

然后把这个xml复制到桌面备用

打开这个xml,修改这个名字为自己需要的名字,注意全部小写

(6) 在Unity中使用这个方法

创建好工程,设置为Android打包,设置包名,包名为上面xml中我们修改的那个

创建文件夹Plugins及其子文件夹Android(注意:这两个文件夹名字是固定的),将复制到桌面上的3个东西拷贝进去

创建一个脚本挂在相机上,在这里我们使用Unity来调用Android那边提供的add方法,然后把结果显示在Text组件上。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; public class Test : MonoBehaviour { public Text text; void Start () {
// 获得位于com.unity3d.player包下的UnityPlayer类
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
// 获得jc所代表的类下的currentActivity对象
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); // 调用Android提供的Android方法
// 使用Call调用,<>表示有返回值,没有返回值则不需要这个
text.text = jo.Call<int>("add", 2, 3).ToString();
}
}

数据线连接手机,打包,可以看到结果

(7)上面是在Android中定义了一个方法,在Unity中调用。现在我们在Unity中定义一个方法,在Android中调用。

定义一个简单的方法,改变字体的颜色。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; public class Test : MonoBehaviour { public Text text; void Start () {
// 获得位于com.unity3d.player包下的UnityPlayer类
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
// 获得jc所代表的类下的currentActivity对象
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); // 调用Android提供的Android方法
// 使用Call调用,<>表示有返回值,没有返回值则不需要这个
text.text = jo.Call<int>("add", 2, 3).ToString();
} public void ChangeColor()
{
text.color = Color.red;
}
}

在Android中调用,使用方法:

UnityPlayer.UnitySendMessage("Main Camera","ChangeColor","");

第一个参数表示脚本所挂载的位置,第二个参数表示函数名,第三个参数表示参数

重新Build,导出libs和res文件夹,替换Unity下对应文件夹,然后重新打包运行,结果:

Android开发 互相调用模式之导出Jar包、扩展MainActivity、Java主导的更多相关文章

  1. Android开发 互相调用模式之导出Aar包、扩展MainActivity、Java主导

    现在官方推荐使用这种方式 在讲导出Aar之前,先讲一下怎么设置图标,先把原xml中图标设置这句话复制过来 刚刚复制过来的时候这句话是红色报错的,这个时候我们把原res下的mipmap复制过来,也可以自 ...

  2. Android开发 互相调用模式之提供扩展类

    此种方法适用于:比如你要让Android做一些事情,这些事用不到任何资源,在Android下用纯代码就能实现它,这样就可以在Android下写好,将它封装成一个方法,打成包按照下面的方式丢给Unity ...

  3. Android开发 互相调用模式之C#主导

    首先明确一个概念,当我们不使用Android Studio提供的那些包,仅仅是Unity打包apk,打包出来的apk里面也包含了SDK (1)首先删除Unity下我们创建的Plugins文件夹,因为这 ...

  4. android studio 使用gradle 导出jar包,并打包assets目录

    警告:本文年久失修. 随着android studio的升级 ,gradle的升级,严格按照本文的代码去做可能不会成功,希望依然可以作为解决问题的思路. 最近项目在做一个sdk,供别的开发者使用,所以 ...

  5. [转]--android studio 使用gradle 导出jar包,并打包assets目录

    转自: http://www.cnblogs.com/wuya/p/android-studio-gradle-export-jar-assets.html   最近项目在做一个sdk,供别的开发者使 ...

  6. 关于Android开发中导出jar包后的资源使用问题解决

    我们经常遇到一个需求,就是给别人使用我们工程的时候,为了能够屏蔽代码,把代码封装成jar包提供给第三方使用,但是这样我们的资源文件怎么给对方用呢? 其实并不用这么的复杂,下面就介绍一下具体的方法 一, ...

  7. Unity 3D与Android Studio安卓交互之-导出jar包

    u3d与安卓 jar 包交互 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享 ...

  8. Android Studio 导出jar包

    不像在Eclipse,可以直接导出jar包.AndroidStudio只可以生成aar包. 在网上看到许多朋友问怎么可以像Eclipse一样导出jar包,其实我们只要知道它的原理就可以了. 用jar命 ...

  9. [Android Pro] AndroidStudio导出jar包

    reference :  http://blog.csdn.net/beijingshi1/article/details/38681281 不像在Eclipse,可以直接导出jar包.Android ...

随机推荐

  1. pssh一个微量级自动化工具

    一.pssh简介 pssh是一个python编写可以在多台服务器上执行命令的工具,也可实现文件复制.pssh需要通过ssh的key验证来管理主机,其不能很好的支持密码验证.用过epel源的pssh包来 ...

  2. ELementD对象

    在 HTML DOM (文档对象模型)中,每个部分都是节点: 文档本身是文档节点 所有 HTML 元素是元素节点 所有 HTML 属性是属性节点 HTML 元素内的文本是文本节点 注释是注释节点 El ...

  3. 交换机配置——单交换机划分VLAN配置

    一.实验目的:实现单交换机划分VLAN,使PC1主机和PC2主机不能通讯 二.拓扑图 三.实验步骤 最开始两台主机都输入的端口f0/1和f0/2都属于vlan 1 可以相互通讯(如下图) 现在需要让P ...

  4. Node.js 安装与开发

    Node.js 简介 Node.js是一个Javascript运行环境(runtime),发布于2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进行了封装.Node.js对一些 ...

  5. js基础( js嵌入方式、输出语句)

    s现在的作用 1.验证表单(以前的网速慢)  2.页面特效 (PC端的网页效果)  3.移动端 (移动 web 和app)  4.异步和服务器交互(ajax)  5.服务器端开发 (nodejs)   ...

  6. Oracle-sql*plus

    连接命令 (1)conn[ect] 用法: conn 用户名/密码@网络服务名 [as sysdba/sysoper] 当用特权用户身份连接时,必须带上 as sysdba 或是 as sysoper ...

  7. Xargs用法详解(自创)

    简介之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了xargs命令,例如: 这个命令是错误的find /sbin -perm +700 |ls -l ...

  8. 线程系列4--Java线程范围内的共享数据(一)

    这张图片是我看传智播客的视频时的截屏,这个图片很直观的展示了线程范围内的数据共享.当同一个线程在执行三个不同业务模块时,这三个业务模块访问的数据是共享的.更直白的说,当一个执行线索在穿个每个业务模块时 ...

  9. LeetCode 6. Z字形变换(ZigZag Conversion)

    题目描述 将字符串 "PAYPALISHIRING" 以Z字形排列成给定的行数: P A H N A P L S I I G Y I R 之后从左往右,逐行读取字符:"P ...

  10. TensorFlow 学习(1)——第一个程序:线性回归

    目前这个程序还有很多地方没有搞懂,先跑一跑例程看看效果如何.从结果来看,最终的训练成果能够接近于预设的数据