如何在Mono for android中添加友盟sdk,这个功能非常重要,他直接牵扯一个非常重要的问题:如何在mono for android的项目中引入jar包?考虑到android目前大量的应用都是基于java开发的,很多开源的类库和组件也是基于java开发的,所以如何在mono项目引入jar包非常关键,这是做mono for android应用开发的核心之一。我们在项目中已经成功地引入了jar包,几乎所有的包都可以引入和使用,这当然归功于xamarin公司的优秀产品。
在这里,我先介绍第一种方法:直接在app项目引入jar包,通过桥接语言调用。其实在实际项目中这种方式用得很少,但我强烈建议每一个C#程序员都尝试一次,因为他会让你对编程语言有更深一层次的理解。我以umeng_sdk.jar为例,这个包主要是用于统计app运行、安装等情况的。
step1:在项目添加现有文件,选择umeng_sdk.jar;
step2:将umeng_sdk.jar的属性Build Action,设置为AndroidJavaLibrary;
step3:创建一个类,如下所示
/// <summary>
/// Java libary helper.
/// java类库
/// </summary>
public static class JavaLibaryHelper
{
#region umeng class
private static IntPtr _umengHelperClass = JNIEnv.FindClass("com/umeng/analytics/MobclickAgent");
public static void UmengOnResume(Context context)
{
IntPtr methodId = JNIEnv.GetStaticMethodID(_umengHelperClass, "onResume", "(Landroid/content/Context;)V");
JNIEnv.CallStaticVoidMethod(_umengHelperClass, methodId,new JValue(context));
}
public static void UmengOnPause(Context context)
{
IntPtr methodId = JNIEnv.GetStaticMethodID(_umengHelperClass, "onPause", "(Landroid/content/Context;)V");
JNIEnv.CallStaticVoidMethod(_umengHelperClass, methodId,new JValue(context));
}
#endregion
}
这里做一下说明:
1、JNIEnv.FindClass("com/umeng/analytics/MobclickAgent")是通过中间语言调用java里面的对象,原型请参考umeng_sdk.jar的说明,能拥有这样的方式,完全得益于mono创始人的天才,他建立了c#和java之间的桥梁,并且不损失多大的效率!
2、JNIEnv.GetStaticMethodID(_umengHelperClass, "onResume", "(Landroid/content/Context;)V")是通过上面创建的对象,获取对象的方法,包括方法名和方法的签名,具体的语法,你可以通过查看mono for android类库的方法原型(右键转到定义);
3、CallStaticVoidMethod(_umengHelperClass, methodId,new JValue(context)),调用方法,并获得返回值,这里调用的是Void静态方法。
通过这次的实践,我觉得自己对编程语言,特别是C#、java这两种语言的了解更加深刻了,其实还有更好的方法去绑定jar包,下一篇我会介绍。