这两天遇到个大坑,花了很大精力才解决。项目中一直用的百度地图定位突然间拿不到地址信息了,经纬度可以拿到,就是getCity()返回null,各种查找原因,查了百度地图ak,sh1值都没有问题,最关键的是线上包没有问题,debug包也没有问题,就是在打正式签名包就有问题,非常郁闷,后来联系了百度客服把日志什么的发过去给人家分析后才解决,下面讲下可能造成地址获取不到的原因。
一、百度地图的ak填写有问题,去百度开发者平台将ak拷贝出来对照项目里的AndroidManifest.xml中的
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="自己申请的百度地图ak" />
二、打开百度地图控制台,找到自己应用里的设置查看发布版和开发版的sh1值是否填写有误 生产sh1值获取方法
第一步、打开 Android Studio 的 Terminal 工具。
第二步、输入命令:keytool -v -list -keystore keystore文件路径。
第三步、输入 Keystore 密码
debug 下的sh1值获取方法:双击
切换后可以在直接看到sh1就是debug下的sh1值
三、代码设置问题 要获取地址必须加上option.setIsNeedAddress(true);这个设置,百度地图定位默认是不获取地址信息的,所以如果不设置就无法获取
cityName、address等
四、终极方案 ,本人获取不到地址信息就是这个原因 混淆配置 出了官方给出的混淆配置为还需要加上
-keep class org.json.** {*;}
-keep
class vi.com.gdi.bgl.android.** {
*;
}
加第二句的原因可能大家在网上都搜到过,这里就不多说了,重点说第一句
通过adb logcat > log.log 命令把logcat日志导出到电脑,通过分析日志发现这个错误System.err: org.b.b: JSONObject["addr"] not a string.
org.b.b 这个类方法失败了,对照自己的mapping文件发现是org.json这个包,就是因为这个包被混淆了,第三方jar包(百度的jar包)中无法找到混淆过的对应的
方法,所以解析报错,不混淆org.json这个包就ok了