Android JavascriptInterface无法使用minifyEnabled

时间:2016-06-15 09:47:34

标签: javascript android interface proguard

提前致谢。

我花了太多时间阅读stackoverflow。 我有一个带有webview的混合应用程序和一个jquery web。我有我的javascript界面​​。

当我在调试模式下运行我的应用程序时,每个思考都可以正常运行,但是当我在发布模式下运行时,javascript界面​​根本无法运行。

我尝试了太多的解决方案,比如proguard规则:

public static class WebAppInterface {
    Context mContext;

WebAppInterface(Context c) {
    mContext = c;
}

@JavascriptInterface
    public void estoyenchat() { enchat=true;
}
....

}

我有@JavascriptInterface的符号,如你所见:

minSdkVersion 14
targetSdkVersion 22

在我的gradle文件中:

String txt = new String(Files.readAllBytes(Paths.get("in.txt")), StandardCharsets.UTF_8);
txt = txt.replaceAll(...);
txt = txt.replaceAll(...); // split behavior
Files.write(Paths.get("out.txt"), txt.getBytes(StandardCharsets.UTF_8));

我发现使用javascript界面​​在发布模式下运行应用程序的唯一解决方案是将minifyEnabled设置为false。

有人知道原因吗?

2 个答案:

答案 0 :(得分:0)

创建名为JsInterface的接口

public interface JsInterface {}

在js接口类中实现它。

public class WebAppInterface implements JsInterface {

Context mContext;

WebAppInterface(Context c) {
    mContext = c;
}

@JavascriptInterface 
public void estoyenchat() { enchat=true;
}

添加到proguard:

-keepclassmembers,allowobfuscation,allowoptimization interface * extends com.mysite.JsInterface{*;}

答案 1 :(得分:0)

保留任何具有@JavascriptInterface注释的方法的正确方法是:

-dontnote android.webkit.JavascriptInterface
-keepclassmembers class * {
    @android.webkit.JavascriptInterface <methods>;
}
相关问题