Android开发 互相调用模式之导出Jar包、扩展MainActivity、Java主导
首先讲导出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主导的更多相关文章
- Android开发 互相调用模式之导出Aar包、扩展MainActivity、Java主导
现在官方推荐使用这种方式 在讲导出Aar之前,先讲一下怎么设置图标,先把原xml中图标设置这句话复制过来 刚刚复制过来的时候这句话是红色报错的,这个时候我们把原res下的mipmap复制过来,也可以自 ...
- Android开发 互相调用模式之提供扩展类
此种方法适用于:比如你要让Android做一些事情,这些事用不到任何资源,在Android下用纯代码就能实现它,这样就可以在Android下写好,将它封装成一个方法,打成包按照下面的方式丢给Unity ...
- Android开发 互相调用模式之C#主导
首先明确一个概念,当我们不使用Android Studio提供的那些包,仅仅是Unity打包apk,打包出来的apk里面也包含了SDK (1)首先删除Unity下我们创建的Plugins文件夹,因为这 ...
- android studio 使用gradle 导出jar包,并打包assets目录
警告:本文年久失修. 随着android studio的升级 ,gradle的升级,严格按照本文的代码去做可能不会成功,希望依然可以作为解决问题的思路. 最近项目在做一个sdk,供别的开发者使用,所以 ...
- [转]--android studio 使用gradle 导出jar包,并打包assets目录
转自: http://www.cnblogs.com/wuya/p/android-studio-gradle-export-jar-assets.html 最近项目在做一个sdk,供别的开发者使 ...
- 关于Android开发中导出jar包后的资源使用问题解决
我们经常遇到一个需求,就是给别人使用我们工程的时候,为了能够屏蔽代码,把代码封装成jar包提供给第三方使用,但是这样我们的资源文件怎么给对方用呢? 其实并不用这么的复杂,下面就介绍一下具体的方法 一, ...
- Unity 3D与Android Studio安卓交互之-导出jar包
u3d与安卓 jar 包交互 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享 ...
- Android Studio 导出jar包
不像在Eclipse,可以直接导出jar包.AndroidStudio只可以生成aar包. 在网上看到许多朋友问怎么可以像Eclipse一样导出jar包,其实我们只要知道它的原理就可以了. 用jar命 ...
- [Android Pro] AndroidStudio导出jar包
reference : http://blog.csdn.net/beijingshi1/article/details/38681281 不像在Eclipse,可以直接导出jar包.Android ...
随机推荐
- CF888G Xor-MST[最小生成树+01trie]
前注:关于这题,本人的解法暂时没有成功通过此题,原因是被卡常了.可能需要等待某种机缘来请人调试. 类似uoj的一道题(新年的繁荣),不过是一个有些简单的版本. 因为是完全图,有没有办法明显优化建边,所 ...
- pro git 读书笔记 1
Git 1 - Getting Started Git 的特点 Git 存储每个版本的快照:其他 VCS(版本控制系统) 存储两个版本的变化之处 好处参考 Git 分支章节 Git 几乎所有操作都是本 ...
- hdu 6088 Rikka with Rock-paper-scissors (2017 多校第五场 1004) 【组合数学 + 数论 + 模意义下的FFT】
题目链接 首先利用组合数学知识,枚举两人的总胜场数容易得到 这还不是卷积的形式,直接搞的话复杂度大概是O(n^2)的,肯定会TLE.但似乎和卷积有点像?想半天没想出来..多谢Q巨提醒,才知道可以用下面 ...
- Educational Codeforces Round 26 [ D. Round Subset ] [ E. Vasya's Function ] [ F. Prefix Sums ]
PROBLEM D - Round Subset 题 OvO http://codeforces.com/contest/837/problem/D 837D 解 DP, dp[i][j]代表已经选择 ...
- Jmeter的代理和cookie/session/Token令牌认证
Jmeter的代理服务器 1.启动Jmeter: 2.“测试计划”中添加“线程组”: 3.“工作台”中添加“HTTP代理服务器”: 4.配置代理服务器:Global Settings下面的端口配置:9 ...
- C Vus the Cossack and Strings ( 异或 思维)
题意 : 给你两个只包含 0 和 1 的字符串 a, b,定义函数 f ( A, B ) 为 字符串A和字符串B 比较 存在多少个位置 i 使得 A[ i ] != B[ i ] ,例如 f(0011 ...
- noi.ac #529 神树的矩阵
题目链接:戳我 当 \(max(n, m) \ge 3\) 时,可以如下构造: 考虑下面这样三个矩阵,红 + 蓝 − 绿得到的矩阵是一个第一行和最后一行全是 1,其他地方全是 0 的矩阵. 那么如果需 ...
- CUDA-F-2-0-CUDA编程模型概述1
Abstract: 本文介绍CUDA编程模型的简要结构,包括写一个简单的可执行的CUDA程序,一个正确的CUDA核函数,以及相应的调整设置内存,线程来正确的运行程序. Keywords: CUDA编程 ...
- 灰度图像--频域滤波 傅里叶变换之离散傅里叶变换(DFT)
学习DIP第23天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan,欢迎大家转载,发现博客被某些论坛转载后,图像无法正常显示,无法正常表达本人观点,对此表示很不 ...
- Codeforces 1167 E Range Deleting 双指针+思维
题意 给一个数列\(a\),定义\(f(l,r)\)为删除\(a\)中所有满足\(l<=a_i<=r\)的数后的数列,问有多少对\((l,r)\),使\(f(l,r)\)是一个 ...