zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    加工零件(Dijkstra)
    尼克的任务(DP)
    挖地雷(记忆化搜索)
    滑雪(DP,记忆化搜索)
    子串和子序列(DP)
    八皇后(DFS)
    打印feign报错日志
    restTemplate 踩坑
    共享全局对象
    获取当月多少天
  • 原文地址:https://www.cnblogs.com/widgetbox/p/13407887.html
Copyright © 2011-2022 走看看