• unity 调用android函数


    unity 调用android函数

    分类: unity 475人阅读 评论(0) 收藏 举报
    我们知道,安卓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的函数。
    	
    1. AndroidJavaClass jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");  
    2. AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject> ("currentActivity");  
    	有了思路,以下開始动手实现。
    	1、打开eclipse,新建androidprojecttest001。记住包名(package name)后面会用。
    	2、将unity下的android库classes.jar拷贝到projecttest001的libs文件夹下。classes.jar路径:安装盘Program Files (x86)UnityEditorDataPlaybackEnginesandroidplayerin下。
    		
    	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#脚本,关联到主相机。脚本内容例如以下
    		
    1. using UnityEngine;  
    2. using System.Collections;  
    3.   
    4. public class test : MonoBehaviour {  
    5.   
    6.     private AndroidJavaObject m_jo;  
    7.     // Use this for initialization  
    8.     void Start () {  
    9.         Debug.Log ("start***");  
    10.         AndroidJavaClass jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");  
    11.         m_jo = jc.GetStatic<AndroidJavaObject> ("currentActivity");  
    12.         if (m_jo != null)  
    13.                         Debug.Log (m_jo);  
    14.                 else  
    15.                         Debug.Log ("get static object fail ***");  
    16.     }  
    17.       
    18.     // Update is called once per frame  
    19.     void Update () {  
    20.       
    21.     }  
    22.   
    23.     void OnGUI () {  
    24.         if (GUI.Button (new Rect (100, 100, 100, 50), "test_2")) {  
    25.             Debug.Log ("tset_2");  
    26.             Debug.Log( "the result is : " + m_jo.Call<int>("times_2", 5) );  
    27.         }  
    28.   
    29.         if (GUI.Button (new Rect (100, 200, 100, 50), "test_3")) {  
    30.             Debug.Log ("tset_3");  
    31.             Debug.Log( "the result is : " + m_jo.Call<int>("times_3", 5) );  
    32.         }  
    33.     }  
    34. }  
    	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
  • 相关阅读:
    linux sleep用法
    linux下set命令的参数及用法
    给vim编辑器自动添加行号
    linux一些基本常识(三)
    shell脚本面试题
    linux下字符串的比较方式
    浅谈Windows API编程
    WIN32 API ------ 最简单的Windows窗口封装类
    Microsoft函数调用约定
    Android UI 设计规范
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4298292.html
Copyright © 2020-2023  润新知