前段时间集成高德地图需求,网上有位大神根据uikitview和PlatformView原理开发了高德插件,ios安卓都可以使用,插件地址:https://github.com/fluttify-project/amap_map_fluttify
。研究了很久,最大的问题是按照高德的官方文档集成后安卓始终无法定位,ios可以。现在来详细说说安卓的集成。
如何集成:
在pubspec.yaml里添加amap_map_fluttify: ^x.x.x(这里要选择适配当前dart sdk和其他第三方库的版本,否则会有冲突)这个库并且packages get.然后根据高德官方文档上讲解的将它的debug和release里的Keystore的sha1添加到新增的key里,将它的包名写到配置里。如下图按照文档里说的填写就可。
但是我这边操作的时候遇到问题,由于对安卓不是特别熟悉,不知道如何获取这个sha1,网上找的操作只是将.android里的keystore的sha1获取到,.anroid是安卓配置地址,生成命令:
keytool -v -list -keystore .android/debug.keystore
这是获取调试证书的sha1,使用android studio调试的时候默认是使用这个证书
。经过一番查询和咨询安卓开发人士了解到需要自己创建jks的keystore,直接可以通过android studio的generate apk这个操作生成,
image.png
生成的都是jks文件,保存在本地
生成后使用keytool命令获取这个jks的sha1,依旧是使用keytool命令
keytool -v -list -keystore xx.jks
也可以手动生成调试证书,在gradle配置文件里不同模式设置响应的证书即可。
signingConfigs {
release {
storeFile file('./xxx.jks')
storePassword 'android'
keyAlias = 'key0'
keyPassword 'androidkey'
}
debug {
storeFile file('./xxx.jks')
storePassword 'android'
keyAlias = 'key0'
keyPassword 'androidkey'
}
}
release和debug都可以设置同样的证书。
默认使用release证书:
defaultConfig {
signingConfig signingConfigs.release
}
其实困扰我很久的问题就是这个密钥库的sha1获取,脑袋始终没有转过弯,因为开始看网上的教程发现如果这样是生成keystore的话那么这个keystore不是跟包名就没关系了么,开始我的理解一直是这个生成的keystore应该是跟包名相关的,这样才可以根据校验到这个keystore和包名相关,所以很久没有理解到这个。
此时我发现集成到自己的项目里还是不能定位,但是在插件的example里就可以,在自己的项目里就java各种报错,比如说系统api或者高德地图api过时等问题,后面对比了两边项目以后发现可能是我引用的amap_map_fluttify的插件版本比较高,使用的是0.6.x的插件,应该是这个版本使用的安卓sdk版本较高,原生地图的java代码使用的是较低版本的sdk导致报错(具体原因也不清楚,希望有了解的朋友可以留言)。我切换回amap_map_fluttify: ^0.5.2+d62f0ad就可以了,本地的sdk版本是安卓10.0。
若有不正确的,欢迎各位指正,谢谢。
网友评论