这两天遇到个大坑,花了很大精力才解决。项目中一直用的百度地图定位突然间拿不到地址信息了,经纬度可以拿到,就是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值获取方法:双击

  

ios 获取当前城市_ios 获取当前城市

ios 获取当前城市_百度地图_02

 切换后可以在直接看到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了