unity 调用android函数
我们知道,安卓project都有一个AndroidManifest.xml,里面指定了启动Activity等信息。u3d里我们并没有给出这个文件,可见,一定是它在编译的时候,自己主动为我们加入了这些文件。
怎样知道unity还为我们加入了什么文件,每一个文件里有什么内容呢?.apk文件事实上就是一个压缩包,在win上用win rar就能打开这个包。下图是apk包的内容。若要知道每一个文件的详细内容,就必须解析出apk,能够借助AndroidMutiltool(点击下载)工具。这里提供了一个unity 导出的apk和用andoridMuting工具解析出的文件(点击此处下载文件)。
从上图能够看到,u3d为我们加入了一个AndroidManfiest.xml。那么怎样使用我们自己定义的AndroidManifest.xml呢?非常easy,仅仅须要将自己定义的Androidmanifest.xml放到指定的位置就能够了,至于详细什么位置,待会再说。
以下開始切入正题。
unity怎样调用androidproject中的函数?思路是这种:
第一、自己定义启动Activity。(从上面的AndroidManifest.xml可知unity默认的启动Activity是UnityPlayerNativeActivity)。若要此project从自己定义activity启动,就须要自己定义的AndroidManifest.xml。但unity不能直接编译运行java文件,所以要把MainActivity编译,打包成jar库,引入unity。
第二、调用Activity中函数。unity全程仅仅有一个Activity,所以我们能够通过获取当前Activity来获取activity对象,通过jni调用activity的函数。
[csharp] view plaincopy
- AndroidJavaClass jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");
- AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject> ("currentActivity");
有了思路,以下開始动手实现。
1、打开eclipse,新建androidprojecttest001。记住包名(package name)后面会用。
2、将unity下的android库classes.jar拷贝到projecttest001的libs文件夹下。classes.jar路径:安装盘\Program Files (x86)\Unity\Editor\Data\PlaybackEngines\androidplayer\bin下。
3、将classes.jar加入到java build path。
方法有两种。①右键classes.jar -> build path -> add to build path。②project->属性->java build path -> libraries -> addJars
4、改动MainActivity.java。
注意:setContentView(...)这句假设不凝视掉,你看到的将会是androidproject的hello world界面。
5、编译project。
6、打包.class文件。
进入project目录/bin/classes。里面有一个com文件下,该目录里存了多个.class文件。如今要将com目录打包。在classes下运行jar -cvf myclasses.jar com。
7、用unity新建项目test001,在Assets文件夹中新建下列文件夹
将myclasses.jar拷贝到bin下。将AndroidManifest.xml拷贝到Android文件夹下。将res文件夹拷贝到Android文件夹下。
8、在Assets文件夹下新建一个c#脚本,关联到主相机。脚本内容例如以下
[csharp] view plaincopy
- using UnityEngine;
- using System.Collections;
- public class test : MonoBehaviour {
- private AndroidJavaObject m_jo;
- // Use this for initialization
- void Start () {
- Debug.Log ("start***");
- AndroidJavaClass jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");
- m_jo = jc.GetStatic<AndroidJavaObject> ("currentActivity");
- if (m_jo != null)
- Debug.Log (m_jo);
- else
- Debug.Log ("get static object fail ***");
- }
- // Update is called once per frame
- void Update () {
- }
- void OnGUI () {
- if (GUI.Button (new Rect (100, 100, 100, 50), "test_2")) {
- Debug.Log ("tset_2");
- Debug.Log( "the result is : " + m_jo.Call<int>("times_2", 5) );
- }
- if (GUI.Button (new Rect (100, 200, 100, 50), "test_3")) {
- Debug.Log ("tset_3");
- Debug.Log( "the result is : " + m_jo.Call<int>("times_3", 5) );
- }
- }
- }
9、编译执行。
编译时,点BuildSetting -> Player Setting -> other Setting -> Bundle Identifier,将此项值设置为上面第①条提到的包名
10、查看输出log。
log信息要通过logcat查看。进入android sdk下的platform-tools文件夹,里边有个adb.exe。运行命令./adb.exe logcat就能够看到log信息了。
我上传了这个project须要用到的文件(如xml,myclasses.jar,res/)。还包括了MainActivity.java文件便于理解。http://download.csdn.net/detail/u012085988/6741421
unity 调用android函数的更多相关文章
- Andriod Unity 调用android函数
//首先这是一个前沿 //我看了多的资料,还看了近半个小时的 android activity 的讲解 终于打出了apk //接下来开始 //一步一步的跟着我走 1.创建一个android项目或者一个 ...
- unity调用Android的jar包
简介 有一些手机功能,Unity没有提供相应的接口,例如震动,例如不锁屏,例如GPS,例如... 有太多的特殊功能Unity都没有提供接口,这时候,我们就需要通过使用Android原生的ADT编辑器去 ...
- Unity调用Android相册
最近有一个项目有这个需求,让用户上传自己的交易凭证的截图,之前因为对调Android原生的东西不太熟悉,就先放了一边 因为项目已经上线,只不过是该功能未开放而已,那么现在为什么要写这篇博客呢,是因为. ...
- Unity调用Android类方法
Unity调用Android类方法 1. 添加Unity的classes.jar文件 创建一个Android工程AndroidUnityDemo. 由于Unity的版本不同,直接在Unity安装包文 ...
- Unity调用Android
1.Unity调用Android 根据unity用户手册,unity可以采用native code(c/c++),但是也提供了C#调用方法,本文对此进行简单讲解. 2.Unity获取android类 ...
- Unity 调用android插件
1. Unity的Bundle Identifier必须和你的android报名一致 Activity和View的区别: Activity应该是一个展示页面,View是页面上一些按钮视图等等. 如何调 ...
- Unity调用Android的两个方式:其一、调用jar包
unity在Android端开发的时候,免不了要调用Java:Unity可以通过两种方式来调用Android:一是调用jar.二是调用aar. 这篇文章主要讲解怎么从无到有的生成一个jar包,然后un ...
- unity调用Android百度地图
由于个人是Android小白,在这个配置上面被折磨了很久,因此写下这篇文章 工具:eclipse + unity5.6.1 首先去百度地图开发者平台下载你需要的资源,我只需要显示地图和定位,这个时候你 ...
- unity调用Android的两种方式:其二,调用aar包
上一篇我们讲了unity如何调用jar包 http://www.cnblogs.com/Jason-c/p/6743224.html, 现在我们介绍一下怎么生成aar包和unity怎么调用aar 一. ...
随机推荐
- 转:CI引入外部js与css
其实不管是在用CI还是ZF都有同样一个问题,就是路径的问题.前期,我在用ZF做CMS时,我在.htaccess文件中设置了如遇到js,css,img等资源文件都不重定向.但今天在用CI时,却忘记了,搞 ...
- 凡客副总裁崔晓琦离职 曾负责旗下V+商城项目_科技_腾讯网
凡客副总裁崔晓琦离职 曾负责旗下V+商城项目_科技_腾讯网 凡客副总裁崔晓琦离职 曾负责旗下V+商城项目 腾讯科技[微博]乐天2013年09月18日12:44 分享 微博 空间 微信 新浪微博 邮箱 ...
- UVA - 10057 A mid-summer night's dream.
偶数时,中位数之间的数都是能够的(包含中位数) 奇数时,一定是中位数 推导请找初中老师 #include<iostream> #include<cstdio> #include ...
- C# ignoring letter case for if statement(Stackoverflow)
Question: I have this if statement: if (input == 'day') Console.Write({0}, dayData); When the user t ...
- C++自增和自减运算符(--和++)
在C和C++中,常在表达式中使用自增(++)和自减(--)运算符,他们的作用是使变量的值增1或减1,如:++i(在使用i之前,先使i的值加1,如果i的原值为3,则执行j=++i后,j的值为4)--i ...
- Storyboard中使用UIscrollView添加约束的开发总结
第一次在项目中用storyboard做界面,一般的界面直接添加约束非常爽快 然后有个界面有scrollview,添加了约束还总是出错 刚开始使用了 wCompact,hRegular,滑动出现问题,有 ...
- 读TIJ -2 一切都是对象
<第2 章一切都是对象> 1.一切都是对象.不是Bruce Eckel说的,而是Alan Kay 总结的Smalltalk 五大基本特征的第一条. 从程序设计者或源码的角度,我觉得:&qu ...
- UVA 10317 - Equating Equations (背包)
Problem F Equating Equations Input: standard input Output: standard output Time Limit: 6 seconds Mem ...
- ARM过程调用标准---APCS简单介绍
介绍 APCS,ARM 过程调用标准(ARM Procedure Call Standard),提供了紧凑的编写例程的一种机制,定义的例程能够与其它例程交织在一起.最显著的一点是对这些例程来自哪里没有 ...
- mysql双机热备的配置步骤
设置双机热备: 首先要在两台机器上建立同步用户: grant replication slave on *.* to 'repdcs'@'192.168.21.39' identified by '1 ...