webview 中js交互 代码混淆后失效
*一般情况下js交互,代码混淆的时候需要配置规则,以下是通用的混淆规则
#保留annotation, 例如 @JavascriptInterface 等 annotation
-keepattributes *Annotation*
#保留跟 javascript相关的属性
-keepattributes JavascriptInterface
#保留JavascriptInterface中的方法
-keepclassmembers class * {
@android.webkit.JavascriptInterface <methods>;
}
#这个根据自己的project来设置,这个类用来与js交互,所以这个类中的 字段 ,方法, 等尽量保持
-keepclassmembers public class com.packgename.custom.WVJBWebViewClient{
<fields>;
<methods>;
public *;
private *;
}
通过设置这些通用的规则之后,发现一些js调用还是出现了问题。最终根据 log 日志,以及mapping文件的查看,找出了原因。
先部署一个没有被 obfuscate 过的apk,然后查看 log 日志。
这个是正常的日志
E/batman: messageJson = {"callbackId":"objc_cb_1","data":"A string sent from android to JS"}
I/WVJB: SEND: {"callbackId":"objc_cb_1","data":"A string sent from android to JS"}
I/WVJB: RCVD: {"data":{"imgUrl":"*********************************","title":"*********************************","desc":"*********************************","link":"***************************