Android 应用程序中的 Geckoview 崩溃并出现错误“java.lang.Exception:加载 sqlite 库时出错”

buz*_*zer 5 java android geckoview

我已经在这里和其他地方阅读了很多关于 geckoview 的文章和指南,但我没有找到解决我的问题的任何帮助。我将 geckoview 集成到我的 android 应用程序中(作为 webview 的替代品)。我按照 howtos 中的说明做了所有操作,但此时,活动想要显示,应用程序崩溃,并出现错误“java.lang.Exception:加载 sqlite 库时出错”。有人可以帮助我吗?

构建.gradle(模块)

ext {
    geckoviewChannel = "nightly"
    geckoviewVersion = "86.0.20210124091450"
}

repositories {
    maven {
        url "https://maven.mozilla.org/maven2/"
    }
}
Run Code Online (Sandbox Code Playgroud)

活动XML

<org.mozilla.geckoview.GeckoView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/geckoview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />
Run Code Online (Sandbox Code Playgroud)

活动顶部

import org.mozilla.geckoview.GeckoRuntime;
import org.mozilla.geckoview.GeckoSession;
import org.mozilla.geckoview.GeckoView;
Run Code Online (Sandbox Code Playgroud)

创建活动

        boolean doGecko=true;
        myGeckoView = findViewById(R.id.geckoview);
        if (doGecko) {
            Log.d(logTag, "starting GeckoView: "+myGeckoView);
            try {
                if (myGeckoSession==null) {
                    Log.d(logTag, "myGeckoSession = new GeckoSession()");
                    myGeckoSession = new GeckoSession();
                }
                Log.d(logTag, "GeckoSession: "+myGeckoSession);

                if (myGeckoRuntime==null ) {
                    myGeckoRuntime = GeckoRuntime.create(this);
                    Log.d(logTag, "created GeckoRuntime: "+myGeckoRuntime );
                } else {
                    myGeckoRuntime = GeckoRuntime.getDefault(this);
                    Log.d(logTag, "getting default GeckoRuntime: "+myGeckoRuntime );
                }

                Log.d(logTag, "myGeckoSession.open(myGeckoRuntime)");
                myGeckoSession.open(myGeckoRuntime);

                Log.d(logTag, "myGeckoview.setSession(myGeckoSession)");
                myGeckoView.setSession(myGeckoSession);
                Log.d(logTag, "loading url");
                myGeckoSession.loadUri("http://www.google.de");
            } catch (Exception e) {
                Log.d(logTag, "error "+e.toString() );
            }
        } else {
            myGeckoView.setVisibility(View.INVISIBLE);
        }
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪

2021-01-25 11:14:18.011 4815-4883/com.test.de.browseme E/GeckoLibLoad: Load sqlite start
2021-01-25 11:14:18.011 4815-4883/com.test.de.browseme E/GeckoLibLoad: Couldn't get a handle to libnss3!
2021-01-25 11:14:18.011 4815-4883/com.test.de.browseme E/GeckoLibLoad: Throw
2021-01-25 11:14:18.011 4815-4883/com.test.de.browseme E/GeckoLibLoad: Load sqlite done
2021-01-25 11:14:18.013 4815-4883/com.test.de.browseme E/AndroidRuntime: FATAL EXCEPTION: Gecko
    Process: com.test.de.browseme, PID: 4815
    java.lang.Exception: Error loading sqlite libraries
        at org.mozilla.gecko.mozglue.GeckoLoader.loadSQLiteLibsNative(Native Method)
        at org.mozilla.gecko.mozglue.GeckoLoader.loadSQLiteLibs(GeckoLoader.java:204)
        at org.mozilla.gecko.GeckoThread.loadGeckoLibs(GeckoThread.java:247)
        at org.mozilla.gecko.GeckoThread.initGeckoEnvironment(GeckoThread.java:267)
        at org.mozilla.gecko.GeckoThread.run(GeckoThread.java:430)
Run Code Online (Sandbox Code Playgroud)

DAG*_*DAG 5

这看起来像问题 116 https://github.com/mozilla/geckoview/issues/116

转到您的清单并将其添加到应用程序区域下:

android:extractNativeLibs="true"
Run Code Online (Sandbox Code Playgroud)