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就是混淆