如何为javascript界面​​配置proguard?

Ikk*_*kky 23 obfuscation android proguard

我实现了一个使用JavascriptInterface的Webview.它没有混淆时工作正常,但Proguard立即活跃,它不起作用.我在这里看了其他答案,但我还是无法让它发挥作用.

一些WebView类:

public class Activity_Webview {
private WebView webView;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        webView = (WebView) findViewById(R.id.webview);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.addJavascriptInterface(new JavaScriptInterface (), "HTMLOUT");
        webView.setWebViewClient(mWebViewClient);
    }

    public class JavaScriptInterface implements NonObfuscateable{
        @JavascriptInterface
        public void processHTML(String html) {
        handleFinishFromWebView(html);
    }
}
Run Code Online (Sandbox Code Playgroud)

我在Proguard尝试过的:

-keep public class * implements com.project.NonObfuscateable
-keepclassmembers class * implements NonObfuscateable {
    public void processHTML(java.lang.String);
}
Run Code Online (Sandbox Code Playgroud)

我也试过这个(当没有实现NonObfuscateable接口时:

-keep public class com.project.Activity_Webview.JavaScriptInterface
-keep public class * implements com.project.Activity_Webview.JavaScriptInterface
-keepclassmembers class * implements com.project.Activity_Webview.JavaScriptInterface {
    <fields>;
    <methods>;
}
Run Code Online (Sandbox Code Playgroud)

有人知道可能出现什么问题吗?提前致谢

Eri*_*une 39

如果它们没有包含拼写错误,那么您的配置都可以正常工作:

  • ProGuard需要完全合格的名称:

    NonObfuscateable - > com.project.NonObfuscateable

  • 编译类使用'$'作为内部类的分隔符:

    com.project.Activity_Webview.JavaScriptInterface - > com.project.Activity_Webview$JavaScriptInterface

在控制台日志中,ProGuard打印出有关此类可疑错别字的注释.

保持带注释的Javascript接口方法的更通用的解决方案:

-keepclassmembers class * {
    @android.webkit.JavascriptInterface <methods>;
}
Run Code Online (Sandbox Code Playgroud)