问题描述
- Android打包后,有些方法不能被调用
-
为什么测试的时候正常,可是打包完就失效了? shouye_wb.getSettings().setJavaScriptEnabled(true); shouye_wb.getSettings().setUseWideViewPort(true); shouye_wb.getSettings().setLoadWithOverviewMode(true); shouye_wb.setLayerType(View.LAYER_TYPE_SOFTWARE, null); shouye_wb.addJavascriptInterface(new Object() { @SuppressWarnings("unused") public void openBrowser(final String url) { Intent intent = new Intent(); intent.setAction("android.intent.action.VIEW"); intent.setClassName("com.android.browser", "com.android.browser.BrowserActivity"); Uri content_url = Uri.parse(ServiceConstants.SERVER_URL + url); intent.setData(content_url); startActivity(intent); } }, "openBrowser");
解决方案
是因为混淆的结果吧,导致某些当用到反射时,无法找到名称,你需要在proguard-project.txt中设置哪些不能混淆
解决方案二:
在proguard文件加入 -keepattributes Annotation
解决方案三:
请参考以下信息,亲测好用。
例如我在一个类中定义了一个内部类
public class MyJavaScriptInterface {
public void XXX(String xxx) {
}
}
然后在我的proguard文件中加入
-keep class com.xxx.xxx.xxx$MyJavaScriptInterface {
*;
}
这样在4.0以下平台编译应用一切正常。
但是在4.0以上平台就会出现问题 解决办法:
在声明MyJavaScriptInterface 中加入annotation
public class MyJavaScriptInterface {
@JavascriptInterface
public void XXX(String xxx) {
}
}
在proguard文件加入 -keepattributes Annotation
这样一切就OK了
解决方案四:
上面的文件是排除混淆的一些配置
project.properties 这个文件里加一句proguard.config=proguard.cfg就是混淆
时间: 2024-07-29 10:32:26