提前致谢。
我花了太多时间阅读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。
有人知道原因吗?
答案 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>;
}