gpt4 book ai didi

android - 如何为javascript接口(interface)配置proguard?

转载 作者:IT老高 更新时间:2023-10-28 22:25:18 27 4
gpt4 key购买 nike

我已经实现了一个使用 JavascriptInterface 的 Webview。它在不混淆时工作正常,但一旦 Proguard 处于 Activity 状态,它就不起作用。我在这里查看了其他答案,但仍然无法正常工作。

一些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 接口(interface)时:

-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 需要完全限定的名称:

    NonObfuscateable -> com.project.NonObfuscateable

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

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

在控制台日志中,ProGuard 会打印出有关此类可疑拼写错误的注释。

保留带注释的 Javascript 接口(interface)方法的更通用的解决方案:

-keepclassmembers class * {
@android.webkit.JavascriptInterface <methods>;
}

关于android - 如何为javascript接口(interface)配置proguard?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17629507/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com