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

原文地址:https://www.cnblogs.com/widgetbox/p/13407887.html