Android 为什么addJavascriptInterface在发布后不工作?

Android 为什么addJavascriptInterface在发布后不工作?,android,Android,我在应用程序中使用addJavascriptInterface从Javascript弹出一个共享窗口 问题是:当我在开发环境中使用手机时,我可以看到弹出窗口。但在发布到谷歌并下载后不工作也是如此。我正在使用Android 4.2 Jellybean mobile进行测试 我试过几种方法,但都不管用 -----一次创建----- wvMainMenu=WebView findViewByIdR.id.wvMainMenu wvMainMenu.getSettings().setJavaSc

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

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

我试过几种方法,但都不管用

-----一次创建-----

wvMainMenu=WebView findViewByIdR.id.wvMainMenu

    wvMainMenu.getSettings().setJavaScriptEnabled(true);
    wvMainMenu.getSettings().setLightTouchEnabled(true);
    wvMainMenu.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
    wvMainMenu.addJavascriptInterface(new WebappInterface(this), "Android");
----内部Javascript-------

函数共享\u itid{

Android.share_this(msg[id]);
}

---WebappInterface.java----

@JavascriptInterface 公共无效共享\u thistring str {


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

所以这里发生的事情是,当我在开发过程中运行时,由于开发中没有Proguard,它工作正常。但是,当生成签名的apk时,Proguard混淆了方法名称,并停止了javascript接口的运行

您有两个选择: 1.禁用Proguard
2.将异常添加到Proguard

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

所以这里发生的事情是,当我在开发过程中运行时,由于开发中没有Proguard,它工作正常。但是,当生成签名的apk时,Proguard混淆了方法名称,并停止了javascript接口的运行

您有两个选择: 1.禁用Proguard
2.为Proguard添加异常

这对我来说是一个很好的线索…以下是您必须添加到Proguard-rules.pro的行:-keepclassmembers类*{@android.webkit.JavascriptInterface;}-keepattributes JavascriptInterface这是另一个源代码…只需添加@Keep annotation。这对我来说是一个很好的线索…以下是您必须添加到proguard-rules.pro中的行:-keepclassmembers类*{@android.webkit.JavascriptInterface;}-keepattributes JavascriptInterface这是另一个源代码…只需添加@Keep注释。
    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);



}