问题背景:
Android14 beta 版本发布之后,谷歌官方针对非 SDK 接口的限制做了更新,其中对定位功能的 Location 类的多个既有历史方法和新增方法做了反射限制,比如:
1.新增方法:getMslAltitudeAccuracyMeters()
2.历史方法:getLongitude()
诸如此类方法还非常多,详情可参考:https://developer.android.com/about/ver ... 4?hl=zh-cn
下载对应csv文件,可查询限制类名:Landroid/location/Location
但是这个类在Android13系统及之前是不受限制,详情可参考:
https://developer.android.com/guide/app ... s?hl=zh-cn
问题原因:
基于业务需要,涂鸦地图定位组件提供了获取当前定位信息的方法,存储该定位信息的Javabean封装了Location对象做序列化传输,而不管是Fastjson还是Gson序列化和反序列化都需要使用反射,从而在Android14系统上被禁用。
简而言之就是,Android 14 系统不允许反射调用Location类的方法,Android13及之前系统是允许的,而我们做序列化传输反射使用了该类的方法,从而在Android14系统手机上触发了crash,而在之前的Android系统版本不受影响,可正常使用
影响范围:
1.影响的客户:接入的 地图定位UI业务包
2.调用了地图定位 UI 业务包的定位功能
解决方案:
针对4.x 和 5.x SDK版本的,请将 地图定位 UI 业务包 分别升级到对应系列最新版本,确保您接入的版本保持在如下:
4系列版本,请至少升级到如下版本:
1. Google Map
Code: Select all
dependencies {
implementation 'com.tuya.smart:tuyasmart-bizbundle-map_google:4.2.0-33'
implementation 'com.tuya.smart:tuyasmart-bizbundle-location_google:4.2.0-33'
}
2. 高德地图
Code: Select all
dependencies {
implementation 'com.tuya.smart:tuyasmart-bizbundle-map_amap:4.2.0-33'
implementation 'com.tuya.smart:tuyasmart-bizbundle-location_amap:4.2.0-33'
}
5系列版本,请至少升级到如下版本:
1. Google Map
Code: Select all
dependencies {
implementation 'com.thingclips.smart:thingsmart-bizbundle-map_google:4.8.0-6'
implementation 'com.thingclips.smart:thingsmart-bizbundle-location_google:4.8.0-6'
}
2. 高德地图
dependencies {
implementation 'com.thingclips.smart:thingsmart-bizbundle-map_amap:4.8.0-6'
implementation 'com.thingclips.smart:thingsmart-bizbundle-location_amap:4.8.0-6'
}
兼容时间:
1. 5.x 兼容发布时间:2023年6月15
2. 4.x 兼容发布时间:2023年6月25
3. 3.x 未兼容,请您自行升级到 4.x 即可(4.x 兼容 3.x)