标签:
首先新建一个binding Library项目,项目名随意,我这里起名Bmap
然后将jar文件放入jars目录下,生成属性改为EmbeddedJar
这时候如果生成dll文件会失败,提示有几类的子项不能喝类名相同
解决方案是在metadate下添加几个属性
<attr path="/api/package[@name='com.baidu.mapapi']/class[@name='VersionInfo']/field[@name='VERSION_INFO']" name="name">VersionInfos</attr> <attr path="/api/package[@name='com.baidu.location']/class[@name='Address']/field[@name='address']" name="name">address2</attr> <attr path="/api/package[@name='com.baidu.platform.comapi.map']/class[@name='A']/field[@name='a']" name="name">As</attr> <attr path="/api/package[@name='com.baidu.platform.comapi.map']/class[@name='B']/field[@name='b']" name="name">Bs</attr>
属性中的 As,Bs是随便输入都可以,但是name=属性不能改,path属性是报错提示信息处拷贝出来的,报错效果如下
解决完这种错误后,就可以生成dll,生成成功后,在android项目中引用项目或者dll,
这时候我们在android项目下添加百度地图的可以
代码如下
[assembly:MetaData("com.baidu.lbsapi.API_KEY", Value = "你的百度地图key")]如图效果
百度地图的key申请地址http://lbsyun.baidu.com/
申请百度地图的时候需要报名和keystore的sha1的值
sha1值获取方式是,在cmd命令中使用keytool命令(如果提示没有这个命令说明没有配置好环境变量,百度自行解决)
xmarin的秘钥口令是空的,直接回车即可,在cmd中复制秘钥的方法是右键,标记,选中sha1的值,回车 就复制好了
keytool -list -v -keystore 文件位置
解决完百度地图的编译和key后,还需要导入so库,so库是百度地图的核心带码,添加方法是在安卓项目中新建libs文件夹(这个应该不用讲吧)
在libs中添加arm64-v8a,armeabi,armeabi-v7a三个目录(这三个目录都添加是为了保证软件兼容性增强,百度之要求armeabi这一个目录添加)
将so库分别拷入其中,生成操作设置为AndroidNativeLibrary 注意,so库是直接放在安卓项目里的,不是bmap里
如下图
最后是编码了,新建一个类继承Activity ,新建布局文件layout1
布局代码如下
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <com.baidu.mapapi.map.MapView android:id="@+id/bmapView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" /> </LinearLayout>
namespace TestAndroid_BlankApp { [Activity(Label = "TestBaiduMap")] public class TestBaiduMap : Activity { private MapView map; protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SDKInitializer.Initialize(ApplicationContext); SetContentView(Resource.Layout.layout1); map = FindViewById<MapView>(Resource.Id.bmapView); // Create your application here } protected override void OnResume() { base.OnResume(); map.OnResume(); } protected override void OnPause() { base.OnPause(); map.OnPause(); } protected override void OnDestroy() { base.OnDestroy(); map.OnDestroy(); } } }
运行成功,这时候我尝试编译release版本,发现报错,“java.exe”已退出,代码为 1。
检查了半天,发现是因为编译release版本的时候vs2015会去混淆代码,百度地图的代码是不能混淆的,所以在配置里面我关闭了混淆配置,暂时没研究这上面怎么排除混淆
修改如下
我将编译后的版本放倒了百度云上,大家可以看效果,至此百度地图已集成到了xmarinapp中
http://pan.baidu.com/s/1dE2Cyx7
app分为两个页面,聊天室和百度地图测试页面,聊天服务器是我的电脑,白天有时候会开启
xmarin.android for vs2015使用百度地图api3.6.1
标签:
原文地址:http://blog.csdn.net/s13488941815/article/details/51219749