How to configure proguard for javascript interface?

前端 未结 3 905
深忆病人
深忆病人 2020-12-01 13:59

I have a implemented a Webview which takes use of JavascriptInterface. It\'s working fine when not obfuscating, but at once Proguard is active, it does not work. I\'ve looke

3条回答
  •  青春惊慌失措
    2020-12-01 14:47

    In my case work only code:

    proguard.cfg:

    -dontwarn
    
    -keepattributes Signature
    -keepattributes SetJavaScriptEnabled
    -keepattributes JavascriptInterface
    -keepattributes InlinedApi
    -keepattributes SourceFile,LineNumberTable
    -keepattributes *Annotation*
    
    -keepclassmembers class * {
        @android.webkit.JavascriptInterface ;
    }
    -keepclassmembers class * {
        @android.webkit.JavascriptInterface ;
    }
    -keepclassmembers class **.*$MyJavascriptInterface {
        *;
    }
    -keepclassmembers class **.*$JavaScriptInterface {
        *;
    }
    
    -keep public class **.*$MyJavascriptInteface
    -keep public class **.*$JavaScriptInterface
    

    Java code:

    @SuppressLint("SetJavaScriptEnabled")
    public class ActivityWebView extends Activity {
        ...
        webView.getSettings().setJavaScriptEnabled(true);
        webView.addJavascriptInterface(new MyJavascriptInterface(MyActivity.this), "MyJSI");
    
        ....
    
        public class MyJavaScriptInterface {
    
            Context context;
    
            MyJavascriptInterface(Context context) {
            this.context = context;
            }
    
            @JavascriptInterface
            @SuppressWarnings("unused")
            public void myjavascriptfunction() {
                ...
            }
    
        }
        ...
    }
    

提交回复
热议问题