借助于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是可以完成你的需求的

有一个非常重要的问题,做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!

【月入41万】Mono For Android中使用百度地图SDK的更多相关文章

  1. Android Studio 项目中集成百度地图SDK报Native method not found: com.baidu.platform.comjni.map.commonmemcache.JNICommonMemCache.Create:()I错误

    Android Studio 项目中集成百度地图SDK报以下错误: java.lang.UnsatisfiedLinkError: Native method not found: com.baidu ...

  2. Android中调用百度地图

    一.调用百度地图 --第一种方法 1.下载百度地图SDK SDK可以拆分下载,需要使用那一部分功能就下载相应包含的SDK,如下图 核心的的jar 和so包,放在工程中的libs目录下 2.申请key ...

  3. Android Studio集成百度地图SDK

    1.建议先阅读百度地图官方的继承指南,针对了Eclipse和Android Studio. 百度官方集成指南 2.下载百度地图SDK Android SDK v4.1.1 下载有两种: 1.一键下载( ...

  4. android中使用百度定位sdk实时的计算移动距离

    ;   //5秒刷新一次 private Handler refreshHandler = new Handler(){ //刷新界面的Handler public void handleMessag ...

  5. Android下 使用百度地图sdk

    百度地图 Android SDK是一套基于Android 2.1(v1.3.5及以前版本支持android 1.5以上系统)及以上版本设备的应用程序接口.可以使用该套 SDK开发适用于Android系 ...

  6. IOS学习:在工程中添加百度地图SDK

    1.将下载下来的sdk中的inc文件夹.mapapi.bundle.libbaidumapapi.a添加到工程中,其中libbaiduapi.a有两个,一个对应模拟器一个对应真机,导入方法如下: 第一 ...

  7. 安卓---项目中插入百度地图sdk

    百度地图 应用里面 自带地图 搜房网 下载百度地图的sdk 熟悉api 注冊百度开发人员的账号 2.12 仅仅要有一个ak就能够 高版本号须要提供应用程序的包名和签名返回开发人员的序列号 使用百度地图 ...

  8. [每日app二]月入60万多嘛?单词锁屏的潜力!

    抢了用户的时间,就是抢了用户的金钱! 单词锁屏,一个开发难度不太大,但仅仅360手机助手下载就是每周4万!拉风- 对于搞app的同学来说,搞个锁屏,还不是玩似的,但是要定位好,玩得好,那就有难度了.最 ...

  9. Mono For Android中完美使用百度地图SDK(v2.1.2&v2.1.3)(转)

    在Xamarin Mono For Android的开发中,如果要使用第三方的jar,就必须进行绑定.通过创建Java Bindings Library项目来自动生成C#到java的代码映射代码,最终 ...

随机推荐

  1. URL安全的Base64编码

    Base64编码可用于在HTTP环境下传递较长的标识信息.在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式.此时,采用Base64编码不仅比较简短,同时也具有不可 ...

  2. Logstash实践: 分布式系统的日志监控

    文/赵杰 2015.11.04 1. 前言 服务端日志你有多重视? 我们没有日志 有日志,但基本不去控制需要输出的内容 经常微调日志,只输出我们想看和有用的 经常监控日志,一方面帮助日志微调,一方面及 ...

  3. SQL Server 致程序员(容易忽略的错误)

    标签:SQL SERVER/MSSQL/DBA/T-SQL好习惯/数据库/需要注意的地方/程序员/容易犯的错误/遇到的问题 概述 因为每天需要审核程序员发布的SQL语句,所以收集了一些程序员的一些常见 ...

  4. IE10、IE11 User-Agent 导致的 ASP.Net 网站无法写入Cookie 问题

    你是否遇到过当使用一个涉及到Cookie操作的网站或者管理系统时,IE 6.7.8.9下都跑的好好的,唯独到了IE10.11这些高版本浏览器就不行了?好吧,这个问题码农连续2天内遇到了2次.那么,我们 ...

  5. 0-1背包问题蛮力法求解(c++版本)

    // 0.1背包求解.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream>   #define ...

  6. 0.Win8.1,Win10,Windows Server 2012 安装 Net Framework 3.5

    后期会在博客首发更新:http://dnt.dkill.net 网站部署之~Windows Server | 本地部署:http://www.cnblogs.com/dunitian/p/482280 ...

  7. 移动硬盘不能识别的常见7种解决方案 ~ By 逆天经验

    服务器汇总:http://www.cnblogs.com/dunitian/p/4822808.html#iis 服务器异常: http://www.cnblogs.com/dunitian/p/45 ...

  8. jQuery学习之路(6)- 简单的表格应用

    ▓▓▓▓▓▓ 大致介绍 在CSS技术之前,网页的布局基本都是依靠表格制作,当有了CSS之后,表格就被很多设计师所抛弃,但是表格也有他的用武之地,比如数据列表,下面以表格中常见的几个应用来加深对jQue ...

  9. [C#] C# 知识回顾 - 表达式树 Expression Trees

    C# 知识回顾 - 表达式树 Expression Trees 目录 简介 Lambda 表达式创建表达式树 API 创建表达式树 解析表达式树 表达式树的永久性 编译表达式树 执行表达式树 修改表达 ...

  10. Atitit.软件研发团队建设原理与概论 理论

    Atitit.软件研发团队建设原理与概论 理论 培训 团队文化建设(内刊,ppt,书籍,杂志等) 梯队建设 技术储备人才的问题 团队建设--小红花评比. 团队建设--文化墙.doc 户外拓展 1. 团 ...