Webview的addJavascriptInterface在DEBUG之RUN时有效、在签名打包后无效的问题
项目中用到了webview,在签名打包后,js交互事件失效,百思不得其解。
在android自带的proguard.txt里有这句话
# If your project uses WebView with JS, uncomment the following # and specify the fully qualified class name to the JavaScript interface # class: #-keepclassmembers class fqcn.of.javascript.interface.for.webview { # public *; #}
在android自带的proguard.txt里有这句话
-keep public class <Package Name>.ActivityName$JSClassname { public *; }
解决办法:
① 混淆文件加上这段代码
-keep public class .MainActivity$JSNotify { public void notify(java.lang.String); }
② 配置后,发现有些4.2以上的系统照样无法调用js,解决办法
因为android 4.2以上版本调用js接口需要在方法使用声明@JavascriptInterface,然后混淆时可能会弄丢该声明导致,程序无法调用js 在配置文件上继续加上: -keep attributes Annotation -keep attributes JavascriptInterface
配置后,终于解决了这个问题。
by:yzl