这里用的unity3d的版本是5.3.2
在eclipse里新建一个java工程,并导出成jar。
package com.innyo.androidplugin;
public class apTest {
public apTest(String inString) {
tryProp = "propties is ok.<" + inString + ">";
}
public String tryProp = "public propties is return.";
public static String tryStaticProp = "static propties is return.";
public String TryPublic() {
return "public method run ok.";
}
public String TryPublic(String inString) {
return "public method with prop run ok.<" + inString + ">";
}
public static String TryStaticPublic() {
return "static public method run ok.";
}
public static String TryStaticPublic(String inString) {
return "static public method whith prop run ok.<" + inString + ">";
}
}
导出为jar
新建unity3d工程,导入jar文件。
新建一个场景,把内容输出到text上显示,
using UnityEngine;
using System.Collections;
using System;
using UnityEngine.UI;
public class TryPlugin : MonoBehaviour
{
public Text t;
public void ToTry ()
{
try {
t.text = "start android plugins";
t.text = t.text + "\r\n";
AndroidJavaClass jc = new AndroidJavaClass ("com.innyo.androidplugin.apTest");
t.text = t.text + "AndroidJavaClass jc:" + jc.ToString ();
t.text = t.text + "\r\n";
t.text = t.text + "tryProp:" + jc.Get<string> ("tryProp");
t.text = t.text + "\r\n";
t.text = t.text + "tryStaticProp:" + jc.GetStatic<string> ("tryStaticProp");
t.text = t.text + "\r\n";
t.text = t.text + "TryPublic:" + jc.Call<string> ("TryPublic");
t.text = t.text + "\r\n";
t.text = t.text + "TryPublic:" + jc.Call<string> ("TryPublic", "unity3d input");
t.text = t.text + "\r\n";
t.text = t.text + "TryStaticPublic:" + jc.CallStatic<string> ("TryStaticPublic");
t.text = t.text + "\r\n";
t.text = t.text + "TryStaticPublic:" + jc.CallStatic<string> ("TryStaticPublic", "unity3d input");
t.text = t.text + "\r\n";
t.text = t.text + "----------------------------------------";
t.text = t.text + "\r\n";
AndroidJavaObject jo = new AndroidJavaObject("com.innyo.androidplugin.apTest","unity3d jo build");
t.text = t.text + "AndroidJavaObject jo:" + jo.ToString ();
t.text = t.text + "\r\n";
t.text = t.text + "tryProp:" + jo.Get<string> ("tryProp");
t.text = t.text + "\r\n";
t.text = t.text + "tryStaticProp:" + jo.GetStatic<string> ("tryStaticProp");
t.text = t.text + "\r\n";
t.text = t.text + "TryPublic:" + jo.Call<string> ("TryPublic");
t.text = t.text + "\r\n";
t.text = t.text + "TryPublic:" + jo.Call<string> ("TryPublic", "unity3d input");
t.text = t.text + "\r\n";
t.text = t.text + "TryStaticPublic:" + jo.CallStatic<string> ("TryStaticPublic");
t.text = t.text + "\r\n";
t.text = t.text + "TryStaticPublic:" + jo.CallStatic<string> ("TryStaticPublic", "unity3d input");
} catch (Exception ex) {
t.text = t.text + "\r\n";
t.text = t.text + ex.Message;
}
}
}
编译成安卓,然后运行,点击按钮,可以看到以下结果
AndroidJavaClass只能调用静态方法,获取静态属性
AndroidJavaObject能调用公开方法和公开属性
另外,jar文件,不一定非要放在plugins/android目录下。
例子代码:http://download.csdn.net/detail/wuyt2008/9444745
=====================================
如果是调用jar类中的枚举,而且枚举必须不是类下面的,方法如下
java
package com.innyo.androidplugin;
public enum TryEnum {
red,green,yellow,blcak
}
AndroidJavaObject redValue =
new AndroidJavaClass("com.innyo.androidplugin.TryEnum").GetStatic<AndroidJavaObject>("red");
如果是调用jar类中的接口,实在是不会在java中写事件接口,只好拿别人的用。
unity3d
public class DateCallback : AndroidJavaProxy
{
public DateCallback ()
: base ("com.amap.api.location.AMapLocationListener")
{
}
void onLocationChanged (AndroidJavaObject amapLocation)
{
}
}
等效于java中写
public class Hight_Accuracy_Activity implements AMapLocationListener {
@Override
public void onLocationChanged(AMapLocation loc) {
}
}