unity3d调用jar类中的方法和属性

转自:http://blog.csdn.net/wuyt2008/article/details/50749300

这里用的unity3d的版本是5.3.2

在eclipse里新建一个java工程,并导出成jar。

《unity3d调用jar类中的方法和属性》

[java]
view plain
copy

《unity3d调用jar类中的方法和属性》
《unity3d调用jar类中的方法和属性》

  1. package com.innyo.androidplugin;  
  2.   
  3. public class apTest {  
  4.   
  5.     public apTest(String inString) {  
  6.         tryProp = “propties is ok.<“ + inString + “>”;  
  7.     }  
  8.   
  9.     public String tryProp = “public propties is return.”;  
  10.   
  11.     public static String tryStaticProp = “static propties is return.”;  
  12.   
  13.     public String TryPublic() {  
  14.         return “public method run ok.”;  
  15.     }  
  16.   
  17.     public String TryPublic(String inString) {  
  18.         return “public method with prop run ok.<“ + inString + “>”;  
  19.     }  
  20.   
  21.     public static String TryStaticPublic() {  
  22.         return “static public method run ok.”;  
  23.     }  
  24.   
  25.     public static String TryStaticPublic(String inString) {  
  26.         return “static public method whith prop run ok.<“ + inString + “>”;  
  27.     }  
  28. }  

导出为jar

《unity3d调用jar类中的方法和属性》

《unity3d调用jar类中的方法和属性》

新建unity3d工程,导入jar文件。

《unity3d调用jar类中的方法和属性》

新建一个场景,把内容输出到text上显示,

[csharp]
view plain
copy

《unity3d调用jar类中的方法和属性》
《unity3d调用jar类中的方法和属性》

  1. using UnityEngine;  
  2. using System.Collections;  
  3. using System;  
  4. using UnityEngine.UI;  
  5.   
  6. public class TryPlugin : MonoBehaviour  
  7. {  
  8.   
  9.     public Text t;  
  10.   
  11.     public void ToTry ()  
  12.     {  
  13.         try {  
  14.             t.text = “start android plugins”;  
  15.   
  16.             t.text = t.text + “\r\n”;  
  17.             AndroidJavaClass jc = new AndroidJavaClass (“com.innyo.androidplugin.apTest”);  
  18.             t.text = t.text + “AndroidJavaClass jc:” + jc.ToString ();  
  19.   
  20.             t.text = t.text + “\r\n”;  
  21.             t.text = t.text + “tryProp:” + jc.Get<string> (“tryProp”);  
  22.   
  23.             t.text = t.text + “\r\n”;  
  24.             t.text = t.text + “tryStaticProp:” + jc.GetStatic<string> (“tryStaticProp”);  
  25.   
  26.             t.text = t.text + “\r\n”;  
  27.             t.text = t.text + “TryPublic:” + jc.Call<string> (“TryPublic”);  
  28.   
  29.             t.text = t.text + “\r\n”;  
  30.             t.text = t.text + “TryPublic:” + jc.Call<string> (“TryPublic”“unity3d input”);  
  31.   
  32.             t.text = t.text + “\r\n”;  
  33.             t.text = t.text + “TryStaticPublic:” + jc.CallStatic<string> (“TryStaticPublic”);  
  34.   
  35.             t.text = t.text + “\r\n”;  
  36.             t.text = t.text + “TryStaticPublic:” + jc.CallStatic<string> (“TryStaticPublic”“unity3d input”);  
  37.   
  38.             t.text = t.text + “\r\n”;  
  39.             t.text = t.text + “—————————————-“;  
  40.   
  41.             t.text = t.text + “\r\n”;  
  42.             AndroidJavaObject jo = new AndroidJavaObject(“com.innyo.androidplugin.apTest”,“unity3d jo build”);  
  43.             t.text = t.text + “AndroidJavaObject jo:” + jo.ToString ();  
  44.   
  45.             t.text = t.text + “\r\n”;  
  46.             t.text = t.text + “tryProp:” + jo.Get<string> (“tryProp”);  
  47.   
  48.             t.text = t.text + “\r\n”;  
  49.             t.text = t.text + “tryStaticProp:” + jo.GetStatic<string> (“tryStaticProp”);  
  50.   
  51.             t.text = t.text + “\r\n”;  
  52.             t.text = t.text + “TryPublic:” + jo.Call<string> (“TryPublic”);  
  53.   
  54.             t.text = t.text + “\r\n”;  
  55.             t.text = t.text + “TryPublic:” + jo.Call<string> (“TryPublic”“unity3d input”);  
  56.   
  57.             t.text = t.text + “\r\n”;  
  58.             t.text = t.text + “TryStaticPublic:” + jo.CallStatic<string> (“TryStaticPublic”);  
  59.   
  60.             t.text = t.text + “\r\n”;  
  61.             t.text = t.text + “TryStaticPublic:” + jo.CallStatic<string> (“TryStaticPublic”“unity3d input”);  
  62.   
  63.         } catch (Exception ex) {  
  64.             t.text = t.text + “\r\n”;  
  65.             t.text = t.text + ex.Message;  
  66.         }  
  67.     }  
  68. }  

编译成安卓,然后运行,点击按钮,可以看到以下结果

《unity3d调用jar类中的方法和属性》

AndroidJavaClass只能调用静态方法,获取静态属性

AndroidJavaObject能调用公开方法和公开属性

另外,jar文件,不一定非要放在plugins/android目录下。

例子代码:http://download.csdn.net/detail/wuyt2008/9444745

=====================================

如果是调用jar类中的枚举,而且枚举必须不是类下面的,方法如下

java

[java]
view plain
copy

《unity3d调用jar类中的方法和属性》
《unity3d调用jar类中的方法和属性》

  1. package com.innyo.androidplugin;  
  2.   
  3. public enum TryEnum {  
  4.     red,green,yellow,blcak  
  5.   
  6. }  

unity3d
[csharp]
view plain
copy

《unity3d调用jar类中的方法和属性》
《unity3d调用jar类中的方法和属性》

  1. AndroidJavaObject redValue =   
  2.     new AndroidJavaClass(“com.innyo.androidplugin.TryEnum”).GetStatic<AndroidJavaObject>(“red”);  

如果是调用jar类中的接口,实在是不会在java中写事件接口,只好拿别人的用。

unity3d

[csharp]
view plain
copy

《unity3d调用jar类中的方法和属性》
《unity3d调用jar类中的方法和属性》

  1. public class DateCallback : AndroidJavaProxy  
  2. {  
  3.     public DateCallback ()  
  4.         : base (“com.amap.api.location.AMapLocationListener”)  
  5.     {  
  6.     }  
  7.   
  8.     void onLocationChanged (AndroidJavaObject amapLocation)  
  9.     {  
  10.           
  11.     }  
  12. }  

等效于java中写
[java]
view plain
copy

《unity3d调用jar类中的方法和属性》
《unity3d调用jar类中的方法和属性》

  1. public class Hight_Accuracy_Activity implements AMapLocationListener {  
  2.   
  3.     @Override  
  4.     public void onLocationChanged(AMapLocation loc) {  
  5.   
  6.     }  

    原文作者:Dijkstra算法
    原文地址: https://blog.csdn.net/bsmmaoshenbo/article/details/50837352
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞