为什么测试的时候正常,可是打包完就失效了?
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就是混淆