当前位置:编程学习 > C#/ASP.NET >>

【月入41万】Mono For Android中使用百度地图SDK

   借助于Mono For Android技术,.Net开发者也可以使用自己熟悉的C#语言以及.Net来开发Android应用。由于Mono For Android把Android SDK中绝大部分类库都已经实现,基本直接参考Java开发Android的书就可以掌握Mono for android技术。

    对于有项目技术决策权的团队,如果项目组成员对Java不熟悉,那么可以使用自己熟悉的.Net来开发Android应用,比如我的一个学生使用Mono For Android开发了一款应用(应学生要求,应用的名字保密),3月份一个月就入账41万元。当然是否赚钱和工具关系不大,这里贴出这个案例只是为了告诉大家:Mono For Android是可以完成你的需求的。下图是这位同学的支付宝收款账单:

  

    对于想学习Java开发Android的开发者,也可以把Mono For Android当作学习过渡工具,因为Mono For Android和Java进行Android开发几乎只是大小写等命名规则的不同而已,其他几乎都是一模一样的。因此我在黑马程序员训练营和传智播客的.Net培训班中加入了Mono For Android开发课程。

    有一个非常重要的问题,做Android开发的时候还会使用一些第三方的jar包。jar是java的技术,那么在Mono for android中需要怎样使用这些jar呢? 需要一个把jar绑定到dll的过程。

    下面以一个典型的Mono For android调用百度地图sdk来讲解一下这个过程:

第一步:创建jar的绑定程序集

         Mono for android提供了Java Binding Library用来自动化的创建绑定(或者说包装)jar的.Net程序集,这样就可以通过调用程序集中的包装类来调用jar中的类了。

         首先从百度地图网站上下载百度地图的SDK;

         接着在Visual Studio的点击主菜单【文件】→【新建】→【项目】,在对话框中选择Mono for Android下的“Java Binding Library”,给项目取一个名字,比如“BaiduMapSDK”;

         接下来把baidumapapi_v2_1_1.jar放到Jars文件夹下,选中jar文件,在属性视图中将“生成操作”属性设置为“EmbeddedJar”,生成解决方案。我们就会发现在bin/Debug文件夹下就生成了BaiduMapSDK.dll这个包装程序集,细心的朋友应该发现了在obj\Debug\generated\src下生成的cs代码就是对jar的封装调用。

第二步:引用绑定程序集

         点击主菜单【文件】→【新建】→【项目】,在对话框中选择Mono for Android下的“Android Application”创建一个Android项目,比如取名为“MapTest”。

         在项目上点右键选择【添加引用】→【项目】,在项目列表中选择第一步创建的“BaiduMapSDK”。

         如果是普通的全部都是用java代码写的jar,那么这样就可以用了,但是百度地图SDK中是包含使用C/C++写的Native代码(如果SDK包中除了jar文件之外还有.so文件,那么就说明有一部分代码是非Java的Native代码)的,因此还需要把libapp_BaiduMapApplib_v2_1_1.so、libvi_voslib.so这两个库文件放到MapTest项目中,并且把so文件的“生成操作”设置为“AndroidNativeLibrary”,否则运行的时候会提示加载不到Library。

         在MapTest项目中创建一个libs文件夹,并且在libs文件夹下创建一个armeabi文件夹,然后把libapp_BaiduMapApplib_v2_1_1.so、libvi_voslib.so放到这个文件夹下。如果运行到armeabi-v7a CPU下,还需要同样创建一份armeabi-v7a文件夹;同样如果运行在x86CPU下则同样需要创建x86文件夹(但是百度地图SDK的so暂时不支持X86CPU)。

第三步:调用百度地图SDK

         在axml中添加地图视图控件:MapView

<com.baidu.mapapi.map.MapView android:id="@+id/bmapsView"

                 android:layout_width="fill_parent"

                 android:layout_height="fill_parent"

                 android:clickable="true" />

 

         反编译BaiduMapSDK.dll我们会发现,这个程序集中把命名空间、类名、方法名等都改成了.Net的命名规则,比如MapView类在java中的包名是com.baidu.mapapi.map,但是在dll程序集中命名空间变成了Com.Baidu.Mapapi.Map(首字母大写)。

  

因为layout文件是给android引擎使用的,而程序集中的类只是对java类的的包装,所以注意在layout文件中控件节点的命名空间要使用java中的命名规则com.baidu.mapapi.map.MapView,而不是Com.Baidu.Mapapi.Map.MapView。

 

在Activity的OnCreate中SetContentView之前添加下面的代码来初始化百度地图SDK,否则会报错“com.baidu.platform.comjni.map.basemap.JNIBaseMap.Create”:

BMapManager mBMapMan = new BMapManager(this.Application);

mBMapMan.Init("我的Key", null);

 

         注意把“我的Key”替换成从百度地图网站上申请的应用Key。

         当然还没有结束,因为还需要增加百度地图SDK需要的权限,至少添加如下的权限:

         <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

         <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

         <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

         <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

         <uses-permission android:name="android.permission.READ_PHONE_STATE" />

 

程序运行之后百度地图就显示出来了。

        

当然如果仔细查看生成的DLL,你可能会发现所有的方法的参数名字全部都是p0、p1、p2,而不是有意义的参数名。

    这是怎么回事呢?不像.Net的MSIL中把参数名也写入了IL代码,Java中方法名是没有写入.class 的,因此工具也无法通过jar文件分析出参数的名字,所以“Java Binding Library”生成的程序集的方法的参数名都是p0、p1、p2这样无意义的参数名,能否命名为有意义的参数名呢?关于这个问题可以参考官方文档《Binding a Java Library (.jar),Consuming Java Libraries from C#》  中“Fixing Up Parameter Names”这段内容,里面提到了可以编辑Metadata.xml文件来为参数取名字。

    但是这个为参数命名的过程很枯燥,按理来说,如果我们拿到了jar对应的java源文件,那么Mono For Android应该可以根据java源代码来知道参数的名字,但是貌似这个还没有实现。我有一个思路,使用Eclipse的JDT中的Java源码分析类ASTParser(用法参考:http://lym6520.iteye.com/blog/747840  和http://blog.csdn.net/flying881114/article/details/6187503 )来分析jar对应的java源文件,然后自动生成Metadata.xml文件。工作很忙,暂时没时间实现这个想法,希望有园子里的大牛能实现,造福广大Monoer!
--------------------编程问答--------------------   月收入那么高啊,看来项目不错啊 --------------------编程问答-------------------- 问下,mono for android授权如何解决??? --------------------编程问答-------------------- 顶下 --------------------编程问答-------------------- 不错 谢谢 挺好了 --------------------编程问答-------------------- 我怎么看了lz发的这个帖子,就只想说
我去年买了个表 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- --------------------编程问答-------------------- 收入很高,值得考虑 --------------------编程问答-------------------- 培训班的  --------------------编程问答-------------------- --------------------编程问答-------------------- 大叔他们用mono开发的一款app,一年盈利也才不到500百万  这东西确实不错 --------------------编程问答-------------------- --------------------编程问答-------------------- 除 --------------------编程问答--------------------
引用 9 楼 zhuankeshumo 的回复:
培训班的 


培训班广告。。。。。真TM垃圾。 --------------------编程问答-------------------- --------------------编程问答-------------------- 呃。。。。就是看月收入的 --------------------编程问答--------------------  这种广告直接删了  月收40W 谁都做了
 还用天天跑论坛发帖子 --------------------编程问答-------------------- 谢谢啦! 学习。很好的文档 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 博客园 发一篇,copy到CSDN一篇。 --------------------编程问答-------------------- learning --------------------编程问答--------------------
引用 14 楼 zanfeng 的回复:
Quote: 引用 9 楼 zhuankeshumo 的回复:

培训班的 


培训班广告。。。。。真TM垃圾。


++   --------------------编程问答-------------------- 除 --------------------编程问答--------------------
引用 5 楼 CCDDzclxy 的回复:
我怎么看了lz发的这个帖子,就只想说
我去年买了个表


赞同,是正解 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 我怎么看了lz发的这个帖子,就只想说 我去年买了个表 --------------------编程问答--------------------
引用 17 楼 dr592112441 的回复:
 这种广告直接删了  月收40W 谁都做了
 还用天天跑论坛发帖子

注意这是我我学生的案例。而且赚钱重要的是创意,人家的创意你是无法复制的,不要以为你是屌丝就全世界都是屌丝,有想法能赚钱的有的人,我还有一位学生做网络营销软件,年入也一百多万。
--------------------编程问答--------------------
引用 26 楼 chengshiding 的回复:
我怎么看了lz发的这个帖子,就只想说 我去年买了个表

能说一下买表的原因不?不能为了买表而买表,也不能因为别人赚钱了你没赚钱“羡慕嫉妒恨”而买表。 --------------------编程问答--------------------
引用 2 楼 My_ID_is_NULL 的回复:
问下,mono for android授权如何解决???

mono for android授权费用才几千块人民币,只要有想法随便一款软件的收入都能把这几千块的成本抵消的无影无踪。我这个学生买了mono for android的授权,公司提供的技术支持响应特别好,花钱买服务,节省出来的时间也是金钱。 --------------------编程问答-------------------- 的确创意最重要,楼主只是给我们提供了一个新的方向而已,非得骂人家做广告,真够无聊的 --------------------编程问答-------------------- 哦,原来是传智的讲师。。  --------------------编程问答-------------------- 营销软文  不解释。。。 --------------------编程问答--------------------
引用 27 楼 cownew 的回复:
Quote: 引用 17 楼 dr592112441 的回复:

 这种广告直接删了  月收40W 谁都做了
 还用天天跑论坛发帖子

注意这是我我学生的案例。而且赚钱重要的是创意,人家的创意你是无法复制的,不要以为你是屌丝就全世界都是屌丝,有想法能赚钱的有的人,我还有一位学生做网络营销软件,年入也一百多万。


帖子写这么认真 无法想弄点点击率 加推广 
哥们能不虚伪吧  是就是 不是就不是 你当每个人都能争100W、?
这是技术帖 又不是营销推广 你在让别人觉得你牛B?那你何必在这里宣传? --------------------编程问答--------------------  行了 不跟你较真 没意思
 回的越多 你的帖子越火   
  --------------------编程问答-------------------- 这尼玛,广告都打到这里来了,艹 --------------------编程问答-------------------- 借助于Mono For Android技术, --------------------编程问答-------------------- 我听过这老师的视频,很不错的,讲.net 的一个项目 --------------------编程问答-------------------- 提供一个思路 --------------------编程问答--------------------
引用 14 楼 zanfeng 的回复:
Quote: 引用 9 楼 zhuankeshumo 的回复:

培训班的 


培训班广告。。。。。真TM垃圾。


月收入多的话 还告诉你吗 直接删帖 还置顶了管理员 --------------------编程问答-------------------- 托儿也上来了,再说连你一块儿打 
什么工具呀APP之类的,还是要看软件之初的设计,用什么技术实现是次要,换句话讲,在中国,技术不像传说中的那么值钱 --------------------编程问答-------------------- 神经病! android开发环境 工具都是免费的!
会c#的 难道就不会去学java? --------------------编程问答-------------------- LZ有种就把APP名字爆出来,否则就是放P
LZ有种就把APP名字爆出来,否则就是放P --------------------编程问答-------------------- 虽然有打广告的目的,但是至少也讲了一个技术面,还有技术步骤,纯支持 --------------------编程问答-------------------- 楼主辛苦 --------------------编程问答-------------------- 关键这个需要money,自己拿来学习吗,成本有点小高 --------------------编程问答-------------------- 忽悠无知青年呢,什么年入XXX万的,这广告词IT培训的都用了十几年了,有点创意好不。 --------------------编程问答--------------------
引用 46 楼 dahuzizyd 的回复:
忽悠无知青年呢,什么年入XXX万的,这广告词IT培训的都用了十几年了,有点创意好不。

我说的是“有人拿这个技术开发了一个月入41万的东西”而已,我没许诺你也能。赚5K靠的是技术,赚5W、50W、500W靠的是创意 --------------------编程问答--------------------
引用 43 楼 youbl 的回复:
虽然有打广告的目的,但是至少也讲了一个技术面,还有技术步骤,纯支持

谢谢支持,好多人连正文都没看就开喷! --------------------编程问答--------------------
引用 42 楼 gemo 的回复:
LZ有种就把APP名字爆出来,否则就是放P
LZ有种就把APP名字爆出来,否则就是放P

学生让我替他保密我就信守承诺,打死我也不说。你爱信不信,没求你信! --------------------编程问答-------------------- 我只是想问一句:靠什么盈利?请指点迷津。 --------------------编程问答--------------------
引用 49 楼 cownew 的回复:
学生让我替他保密我就信守承诺,打死我也不说。你爱信不信,没求你信!


呵呵,你跟我说说看,有哪一款软件,是不想让别人知道名字的?他那玩意是卖给谁?你学生开发的是国家机密项目?
呵呵,你跟我说说看,有哪一款软件,是不想让别人知道名字的?他那玩意是卖给谁?你学生开发的是国家机密项目?
呵呵,你跟我说说看,有哪一款软件,是不想让别人知道名字的?他那玩意是卖给谁?你学生开发的是国家机密项目?

--------------------编程问答--------------------
引用 50 楼 leehong2005 的回复:
我只是想问一句:靠什么盈利?请指点迷津。


不管靠什么盈利,一个软件总要宣传才有可能有人买,这个没有异议吧。他却软件名字都不爆,这代表什么还用说吗。 --------------------编程问答--------------------
引用 52 楼 gemo 的回复:
Quote: 引用 50 楼 leehong2005 的回复:

我只是想问一句:靠什么盈利?请指点迷津。


不管靠什么盈利,一个软件总要宣传才有可能有人买,这个没有异议吧。他却软件名字都不爆,这代表什么还用说吗。


有百度的免费的,为什么还要买你们的产品?你们产品的优势在哪里? --------------------编程问答-------------------- 咱商量一下吧。你看,我把2个月的工资给你,也是80W呢,你帮我把学费免一下,住宿嘛,包个一室一厅就行,伙食一天三顿两荤两素一汤就行,怎么用老师? --------------------编程问答-------------------- Mono For Android  有没相关教程。 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- --------------------编程问答-------------------- 传智播客不是和CSDN有关系么
蒋涛不就是投资人么。。。所以大家就懂了,为什么置顶 --------------------编程问答-------------------- --------------------编程问答--------------------
引用 51 楼 gemo 的回复:
Quote: 引用 49 楼 cownew 的回复:

学生让我替他保密我就信守承诺,打死我也不说。你爱信不信,没求你信!


呵呵,你跟我说说看,有哪一款软件,是不想让别人知道名字的?他那玩意是卖给谁?你学生开发的是国家机密项目?

我只告诉你,不是给普通人用的,很擦边球的一个领域,不违法,但是不是给普通公众用的。 --------------------编程问答-------------------- 卖Mono的? --------------------编程问答-------------------- 肯定是广告,但又似乎不完全是广告 --------------------编程问答-------------------- 这工作适合我 --------------------编程问答-------------------- 对于这样的帖子 我只能说  "呵呵" --------------------编程问答-------------------- 好吧,呵呵 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 笑 呵呵 了。。。。。。。。。。。。。。。。。。。。。。。。。  --------------------编程问答-------------------- 这么赤裸裸的。 你既然不说应用名字, 那你干脆也别说是传智播客啊。直接说XXX培训班啊。 --------------------编程问答-------------------- --------------------编程问答-------------------- 如今床上等你越发展越低级 做广告直接说就行了 何必呢  --------------------编程问答-------------------- 谁买个安卓应用花40万,我只能说CNMBDSB --------------------编程问答-------------------- 弱弱的问一句 你发广告月收入多少 --------------------编程问答-------------------- 除 --------------------编程问答--------------------
引用 27 楼 cownew 的回复:
Quote: 引用 17 楼 dr592112441 的回复:

 这种广告直接删了  月收40W 谁都做了
 还用天天跑论坛发帖子

注意这是我我学生的案例。而且赚钱重要的是创意,人家的创意你是无法复制的,不要以为你是屌丝就全世界都是屌丝,有想法能赚钱的有的人,我还有一位学生做网络营销软件,年入也一百多万。

牛B的人是你学生,别拿出来炫耀你自己。就是不喜欢看广告。 --------------------编程问答-------------------- 羡慕,希望我的应用也能赚这么多 --------------------编程问答--------------------
引用 60 楼 cownew 的回复:
我只告诉你,不是给普通人用的,很擦边球的一个领域,不违法,但是不是给普通公众用的。

晕啊。

原本我想这个帖子也许只是有着跟培训班的宣传网站上一样的那种风气而已,可是看到这里,我觉得你这个帖子真的不应该发。

如果在Csdn发帖,还是要付点责任的。

你这个回复中的隐含的说辞,跟你宣传的“只要跟你学习就可以暴富”结合起来,就太让人寒心了。怪不得有那么多人要求你公布出app的名字、以及开发app的团队的名字来。既然敢卖,就算不是给普通人用的,也不会不敢公布名字吧。 --------------------编程问答-------------------- --------------------编程问答-------------------- 特殊领域的软件,怎么个收费法呢,有固定用户的收软件费?? --------------------编程问答-------------------- --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 其实楼主想说的.NET其实并不差。。

在分享.NET技术的同时打打广告又怎么了?你们的公司不需要做营销,你们都是等着别人来送钱?真他妈的天真。 --------------------编程问答-------------------- 除 --------------------编程问答--------------------
引用 76 楼 sp1234 的回复:
Quote: 引用 60 楼 cownew 的回复:

我只告诉你,不是给普通人用的,很擦边球的一个领域,不违法,但是不是给普通公众用的。

晕啊。

原本我想这个帖子也许只是有着跟培训班的宣传网站上一样的那种风气而已,可是看到这里,我觉得你这个帖子真的不应该发。

如果在Csdn发帖,还是要付点责任的。

你这个回复中的隐含的说辞,跟你宣传的“只要跟你学习就可以暴富”结合起来,就太让人寒心了。怪不得有那么多人要求你公布出app的名字、以及开发app的团队的名字来。既然敢卖,就算不是给普通人用的,也不会不敢公布名字吧。

看小黄图的那种? --------------------编程问答-------------------- 好厉害啊。。。 --------------------编程问答-------------------- --------------------编程问答--------------------
引用 78 楼 sanrang 的回复:
特殊领域的软件,怎么个收费法呢,有固定用户的收软件费??

所以说,这个帖子就是一种自相矛盾的、经不起网友建言的帖子啊,这样的帖子除了广告好看,除了给心理扭曲的小孩子提供借口,给普通人无法提供真正的证据啊! --------------------编程问答-------------------- 会C#的天然就会JAVA了,想不通为何不直接下载ADT来开发? --------------------编程问答-------------------- 这个什么情况 --------------------编程问答-------------------- --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 但我無這麼多錢呀 --------------------编程问答-------------------- wo  chen mo   --------------------编程问答--------------------
引用 86 楼 sp1234 的回复:
Quote: 引用 78 楼 sanrang 的回复:

特殊领域的软件,怎么个收费法呢,有固定用户的收软件费??

所以说,这个帖子就是一种自相矛盾的、经不起网友建言的帖子啊,这样的帖子除了广告好看,除了给心理扭曲的小孩子提供借口,给普通人无法提供真正的证据啊!


呵呵,正解啊。 --------------------编程问答--------------------
引用 14 楼 zanfeng 的回复:
Quote: 引用 9 楼 zhuankeshumo 的回复:

培训班的 


培训班广告。。。。。真TM垃圾。

呵呵。是的。 --------------------编程问答-------------------- 标题很吸引人,尽量瞅瞅 --------------------编程问答-------------------- sp1234已经说了,除了广告内容是真实的,其他的话都经不起推敲,大货散了吧 --------------------编程问答-------------------- 这个。。。Mono玩玩还是挺好的,但是我觉得会C#的java也没什么问题吧,我把我的wp程序移植android版本也很快上手了。
之前在网上看过杨老师的视频,但是这个广告也太掉价了吧+MAXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--------------------编程问答-------------------- 楼主你就直接说学费是多少钱吧? --------------------编程问答-------------------- 杨中科 是在夸自己的学生呢,还是在夸自己?还在在CSDN为传智博客做广告?我觉得都有嫌疑 --------------------编程问答-------------------- 除
补充:.NET技术 ,  .NET技术前瞻
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,