06
5
内容纲要

如何在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包,下一篇我会介绍。


声明: 本文采用 BY-NC-SA 协议进行授权. 未标注“转”的文章均为原创,转载请注明转自: Mono for android中添加友盟sdk的第一种方法

公告栏

欢迎大家来到我的博客,我是dodoro,希望我的博客能给你带来帮助。