android.util.xml jar,[Xamarin.Android]使用Java Bindings Libary项目 Binding Java组件(.jar) 与Metadata.xml、类型...
8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?[Xamarin.Android]使用Java Bindings Libary项目 Binding Java组件(.jar)使用Xamarin开发Android APP时,如果已经有原本就用Java写好的套件(.jar),就可以利用Xamarin提供的Java Bindings Libary将他变成C#可使用的组件。这里.
8种机械键盘轴体对比
本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?
[Xamarin.Android]使用Java Bindings Libary项目 Binding Java组件(.jar)
使用Xamarin开发Android APP时,
如果已经有原本就用Java写好的套件(.jar),
就可以利用Xamarin提供的Java Bindings Libary将他变成C#可使用的组件。
这里用Eclipse和VS2010来作范例。
首先用Eclipse开启一个新Java项目,套件名称就取名叫xamarin.testbinding。
并建立两个类分别为Test、TestBinding。
将Test做成一个抽象类,并给定一个未实践的方法testProtected(),存取修饰给protected。
稍后会提为什么要这样做~public abstract class Test {
protected abstract String testProtected();
}
接着开始写TestBinding这个Class,记得要让他继承刚刚写好的Test抽象类。
这里刻意将实践出的testProtected这个方法的存取修饰改成public。在Java中这样是可以编译过的~import java.util.HashMap;
public final class TestBinding extends Test {
public String Test(){
return "Binding Test";
}
public int TestHashMap(HashMapmap){
return map.get("V1")+map.get("V2");
}
@Override
public String testProtected() {
// TODO 自动产生的方法 Stub
return "Test Visibility";
}
}
利用Eclipse的导出功能可以很快的做出jar档。
到这里jar已经成功的做出来了。
接着就是要如何用java binding让C#也能调用这个组件。
开启VS2010,选择Java Bindings Libary项目范本。
开启后的目录结构
将我们做出的jar档加入至Jars数据夹内。
选择jar档
加入完成
然后将jar档的属性中的建置动作改成EmbeddedJar
到这就可以建置项目了,通常没有问题的情况下是可以直接建置成功的,
但是刚刚做的Java程序中,有一个东西是不符合 C#规则的
没错,就是刚刚的存取修饰,在C#中是不能变更继承方法的存取修饰的,否则就会出现这样的错误。
点开错误找到错误的地方。
就可以发现他自动产生出抽象类中的TestProtected存取修饰是protected
该class档是自动产生出来的,所以直接去改他也没有意义,
利用修改Transforms数据夹中的Metadata.xml来指定在自动产生文件时,
可把该方法的存取修饰改成protected。
先点选刚刚点击错误跳出来的地方,上面就有写着把该方法加进Metadata的资讯,只要Path开始后那段。
开启Metadata.xml,在metadata tag内增加一个attr tag 并把刚刚复制的那段当作tag的属性加进去,
再给一个属性为name,值为visibility。tag内的值就给protected,并重新建置。
这样在建置时他就会自动把该方法改为protected。
(如还会失败的话可以试着把自动产出的class窗口关闭,并用清除重建的方式建置)
重建成功后,可以看项目目录下的objDebuggeneratedsrcXamarin.Testbinding.TestBinding.cs
这就是自动产生出来的cs档。看到刚刚错误的地方已经被改成protected了。
接着就是测试拉~
加入一个Android View项目来测试程序。
在View中参考刚刚完成的binding项目。
点一下刚刚参考的项目,已经可以看到Java中做出来的类了。
可以发现看不到testProtected这个方法,因为修饰词为protected必须要继承后才可存取。
开启View中默认的Layout,原本的就不理了~新增两个按钮。
Test按钮就调用Java中的Test方法。并执行看结果。很成功的取得Java Test方法中回传的字符串。FindViewById(Resource.Id.btnTest).Click += (sender, e) => { Toast.MakeText(this, test.Test(), ToastLength.Short).Show(); };
至于另外一个方法…嗯 这是要我传啥鬼进去才行
对TestHashMap点击右键移至定义就可以看到自动产生出的程序。其中这一行就是我们要传入的类型,JavaDictionary
也确定他有实践IDictionary
照着原本要V1和V2的Key给值。
测试成功~{
JavaDictionarydic = new JavaDictionary();
dic.Add("V1", 100);
dic.Add("V2", 300);
Toast.MakeText(this, test.TestHashMap(dic).ToString(), ToastLength.Short).Show();
};
binding项目中还有其他许多可以设定的东西,像是当传入参数是枚举值时,
自动产生出来的Class参数会变成int类型,必须要明确的去指定他的类型才会转成Xamarin中对应的枚举值。
例如Android.Graphics.Color。
可以看看官网的教学也有满详细的范例喔。
http://docs.xamarin.com/guides/android/advanced_topics/java_integration_overview/binding_a_java_library_(.jar)
范例档下载(含Java原始程序)
以上~谢谢收看~~
更多推荐
所有评论(0)