我在我的应用程序中使用 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)
好的。没有人回答,但我自己解决了问题。当您使用 Proguard 时,您的方法名称会更改。因此,在从 javascript 调用它们时,由于方法名称已更改,调用方法不起作用。
所以这里发生了什么,当我在开发过程中运行时,由于开发中没有 Proguard,它运行良好。但是当生成签名的 apk 时,Proguard 混淆了方法名称并停止了 javascript 接口的功能。
您有两个选择: 1. 禁用 Proguard 2. 向 Proguard 添加例外