Android使用Proguard禁用日志后GeoCoder相关setText功能异常
问题原因
你当前使用的-assumenosideeffects class android.util.Log {public *;}规则过于宽泛,触发了Proguard的优化误判:
-assumenosideeffects的作用是告诉Proguard被标记的方法无副作用,若方法返回值未被使用,Proguard会直接移除整个方法调用。你直接匹配了android.util.Log的所有公共方法,导致优化逻辑溢出,将和Log参数关联的业务代码也判定为无副作用的死代码删除。- 从你提供的现象来看,Proguard错误移除了
GeoCoderApi.getAdressfromLatLng相关的执行链路,所以才会出现定位正常、地图中心点设置正常,但地址赋值逻辑完全不执行的问题。
修复方案
只需要将原有的宽泛规则替换为仅针对Log打印方法的精准规则即可,既可以保留Release包移除日志的效果,又不会误删业务代码:
-assumenosideeffects class android.util.Log { public static *** v(...); public static *** d(...); public static *** i(...); public static *** w(...); public static *** e(...); public static *** wtf(...); }
修改规则后重新打Release包即可验证功能恢复正常。
内容的提问来源于stack exchange,提问作者Ouaaqil Youssef
相关产品推荐
相关产品推荐

