最近想实现一个打卡的功能,想到可以利用百度地图的SDK。网上有很多关于百度地图SDK定位、地图功能应用的demo,这部分倒不是很困难。但网上很多博客写的内容一般都着重于代码部分,很多下载配置和编译器设置的过程没有涉及,官方的文档也基本没有这类的介绍。这篇博文就主要记录一下遇到的非代码部分的坑,虽然大多数问题都被博学的网友解决了,但统一整理一下,可以让之后想简单使用百度SDK的朋友少花点时间。
下载SDK至libs
在百度地图SDK的网站上选择自己需要的功能下载。
然后照常放进libs中,并且添加依赖。
添加依赖
但这样编译运行后会跳出found libBaiduMapSDK_base_vx_x_x.so error的错误,我看了看.so文件都在libs里呀,那是为什么呢?
查阅后发现需要在app:build.gradle里添加这样几行。
sourceSets{
main{
jniLibs.srcDir 'libs'
//说明so的路径为该libs路径,关联所有地图SDK的so文件
}
}
申请密钥
百度地图SDK为了防止被恶意攻击,需要开发者申请密钥使用。但好在申请过程很简单并且免费,同时可以申请多个。
申请密钥
申请密钥时需要提供SHA1和包名,SHA1是安全哈希算法,应用于数字签名。包名就是APP的包名,如果多个APP要使用,就需要申请多个密钥,但在同一台计算机上编译运行,SHA1似乎都是一样的。AndroidStudio可以通过如图的操作查看SHA1,很方便。
查看SHA1 查看SHA1随后将获得的密钥填入AndroidManifest中。
填写配置
申请权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
其中,
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>