为什么 addJavascriptInterface 在发布后不起作用?

GMa*_*er9 1 android

我在我的应用程序中使用 addJavascriptInterface 从 Javascript 弹出一个共享窗口。

问题是:当我在开发环境中使用我的手机时,我可以看到弹出窗口。但同样在发布到谷歌并下载后不起作用。我正在使用 Android 4.2 Jellybean mobile 进行测试。

我尝试了几种方法,但没有任何效果。

---------onCreate----------

wvMainMenu = (WebView) findViewById(R.id.wvMainMenu);

    wvMainMenu.getSettings().setJavaScriptEnabled(true);
    wvMainMenu.getSettings().setLightTouchEnabled(true);
    wvMainMenu.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
    wvMainMenu.addJavascriptInterface(new WebappInterface(this), "Android");
Run Code Online (Sandbox Code Playgroud)

-------Javascript 内部--------------

函数 share_it(id) {

Android.share_this(msg[id]);
Run Code Online (Sandbox Code Playgroud)

}

-----WebappInterface.java--------

@JavascriptInterface public void share_this(String str) {

    Intent sendIntent = new Intent();
    sendIntent.setAction(Intent.ACTION_SEND);

    String sharedText = "Text to share " + str;

    sendIntent.putExtra(Intent.EXTRA_TEXT, sharedText);
    sendIntent.setType("text/plain");
    mContext.startActivity(sendIntent);



}
Run Code Online (Sandbox Code Playgroud)

GMa*_*er9 6

好的。没有人回答,但我自己解决了问题。当您使用 Proguard 时,您的方法名称会更改。因此,在从 javascript 调用它们时,由于方法名称已更改,调用方法不起作用。

所以这里发生了什么,当我在开发过程中运行时,由于开发中没有 Proguard,它运行良好。但是当生成签名的 apk 时,Proguard 混淆了方法名称并停止了 javascript 接口的功能。

您有两个选择: 1. 禁用 Proguard 2. 向 Proguard 添加例外