我已经实现了一个使用 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);
}
}
我在 Proguard 中尝试过的:
-keep public class * implements com.project.NonObfuscateable
-keepclassmembers class * implements NonObfuscateable {
public void processHTML(java.lang.String);
}
我也尝试过这个(当没有实现 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>;
}
有人知道可能出了什么问题吗?
提前致谢
如果没有包含拼写错误,您的两种配置都可以工作:
在控制台日志中,ProGuard 打印出有关此类可疑拼写错误的注释。
保留带注释的 Javascript 接口方法的更通用的解决方案:
-keepclassmembers class * {
@android.webkit.JavascriptInterface <methods>;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)