混合Android应用在构建后无法正常运行

时间:2018-07-10 16:48:54

标签: javascript android android-studio interface hybrid-mobile-app

我在Android Studio上创建了一个使用JavaScript接口(addJavascriptInterface)的应用程序。 在Android Studio内置模拟器上按“绿色PLAY按钮”(Shift + F10)运行时,一切工作正常,但是当我尝试将此应用程序构建为APK文件时(无论是否已签名) ),则没有任何效果(似乎卡住了)。

我发现问题出在通过JavaScript接口调用Java函数

    var saved_lang = window.ob.readfile3('lang.txt');

以某种方式 .readfile3()“不再是函数”

我正在浏览不同的论坛和网站,观看了很多youtube视频,但是我一下子找不到如何解决旧代码的问题,从而继续正常工作。


以下是一些详细信息

来自app / build.gradle:

compileSdkVersion 27
minSdkVersion 15
targetSdkVersion 27

onCreate类的开始:

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    MyObject myObject = new MyObject();
    setContentView(R.layout.activity_main);
    myWebView = (WebView)findViewById(R.id.webView);

    WebSettings webSettings = myWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);

    myWebView.addJavascriptInterface(myObject,"ob");

    myWebView.loadUrl("file:///android_asset/www/index.html");
    myWebView.setWebViewClient(new WebViewClient());
    ...
}

这是MyObject类(它的一部分)

 class MyObject{

    private MainActivity ma;

    @android.webkit.JavascriptInterface
    private String writeConfigString(String myStr){
        writeFile(myStr);
        return "file is written";
    }

    @android.webkit.JavascriptInterface
    private String readfile3(String fileName){
        String out = readFile2(fileName);
        return out;
    }
    ...
}

1 个答案:

答案 0 :(得分:0)

经过几天的搜索和测试,我发现here在最新版本的Android API中发生了一些变化,并且我尝试对MyObject类的所有JavascriptInterface方法进行 PUBLIC 。像这样:

 class MyObject{

    public MainActivity ma;

    @android.webkit.JavascriptInterface
    public String writeConfigString(String myStr){
        writeFile(myStr);
        return "file is written";
    }

    @android.webkit.JavascriptInterface
    public String readfile3(String fileName){
        //return MainActivity.email;
        String out = readFile2(fileName);
        return out;
    }
    ...
}

现在一切正常=)

P.S。我希望此解决方案可以帮助其他人。