如何实现 GeckoView?

Posted

技术标签:

【中文标题】如何实现 GeckoView?【英文标题】:How to implement GeckoView? 【发布时间】:2019-09-24 23:18:16 【问题描述】:

我想在我的应用中实现 GeckoView,但我总是收到以下错误:

    当我按照此链接中的描述实现它时:https://wiki.mozilla.org/Mobile/GeckoView

安装应用时出现以下错误:

安装失败并显示 Failed to commit install session 2023122124 使用命令 cmd package install-commit 2023122124。错误: INSTALL_FAILED_NO_MATCHING_ABIS:无法提取本机库, 水库=-113。卸载可能会解决此问题 apk 的现有版本(如果存在),然后 重新安装。

警告:卸载将删除应用程序数据!

您要卸载现有的应用程序吗?

    当我点击“确定”时,调试选项卡出现以下错误:

05/07 10:56:14:启动应用程序 $ adb install-multiple -r -t C:\Users\USERNAME\Desktop\GeckoViewTest\app\build\intermediates\split-apk\x86_64\debug\slices\slice_6.apk C:\Users\USERNAME\Desktop\GeckoViewTest\app\build\intermediates\split-apk\x86_64\debug\slices\slice_0.apk C:\Users\USERNAME\Desktop\GeckoViewTest\app\build\intermediates\split-apk\x86_64\debug\slices\slice_1.apk C:\Users\USERNAME\Desktop\GeckoViewTest\app\build\intermediates\split-apk\x86_64\debug\slices\slice_2.apk C:\Users\USERNAME\Desktop\GeckoViewTest\app\build\intermediates\split-apk\x86_64\debug\slices\slice_7.apk C:\Users\USERNAME\Desktop\GeckoViewTest\app\build\intermediates\split-apk\x86_64\debug\slices\slice_4.apk C:\Users\USERNAME\Desktop\GeckoViewTest\app\build\intermediates\resources\instant-run\x86_64\debug\resources-x86_64-debug.apk C:\Users\USERNAME\Desktop\GeckoViewTest\app\build\intermediates\split-apk\x86_64\debug\slices\slice_5.apk C:\Users\USERNAME\Desktop\GeckoViewTest\app\build\intermediates\split-apk\x86_64\debug\slices\slice_9.apk C:\Users\USERNAME\Desktop\GeckoViewTest\app\build\intermediates\split-apk\x86_64\debug\slices\slice_3.apk C:\Users\USERNAME\Desktop\GeckoViewTest\app\build\intermediates\split-apk\x86_64\debug\slices\slice_8.apk C:\Users\USERNAME\Desktop\GeckoViewTest\app\build\intermediates\split-apk\x86_64\debug\dep\dependencies.apk C:\Users\USERNAME\Desktop\GeckoViewTest\app\build\intermediates\instant-run-apk\x86_64\debug\app-x86_64-debug.apk $ adb shell pm uninstall de.example.test.geckoviewtest 未知 失败:执行时发生异常: java.lang.IllegalArgumentException:未知包: de.example.test.geckoviewtest 在 com.android.server.pm.Settings.isOrphaned(Settings.java:4289) 在 com.android.server.pm.PackageManagerService.isOrphaned(PackageManagerService.java:21095) 在 com.android.server.pm.PackageManagerService.deletePackageVersioned(PackageManagerService.java:17916) 在 com.android.server.pm.PackageInstallerService.uninstall(PackageInstallerService.java:736) 在 com.android.server.pm.PackageManagerShellCommand.runUninstall(PackageManagerShellCommand.java:1486) 在 com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:193) 在 android.os.ShellCommand.exec(ShellCommand.java:103) 在 com.android.server.pm.PackageManagerService.onShellCommand(PackageManagerService.java:21328) 在 android.os.Binder.shellCommand(Binder.java:634) 在 android.os.Binder.onTransact(Binder.java:532) 在 android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:2821) 在 com.android.server.pm.PackageManagerService.onTransact(PackageManagerService.java:3856) 在 android.os.Binder.execTransact(Binder.java:731) 时出错 安装 APKs

我在 productFlavors... 下添加了这段代码并且可以安装应用程序:

splits 
    abi 
        enable true
        reset()
        include 'x86', 'x86_64', 'arm64-v8a', 'armeabi-v7a'
        universalApk true
    

但是现在我的应用崩溃了:

GeckoRuntime runtime = GeckoRuntime.create(this);

我在我的活动的 onCreate 中收到以下错误:

2019-05-07 10:58:31.347 9069-9090/de.example.test.geckoviewtest E/GeckoLoader:无法加载 mozglue。尝试本机库目录。 2019-05-07 10:58:31.368 9069-9090/de.example.test.geckoviewtest E/GeckoLoader:本应存在的库不存在。 2019-05-07 10:58:31.382 9069-9090/de.example.test.geckoviewtest E/GeckoLoader: 无法加载 /data/user/0/de.example.test.geckoviewtest/lib/libmozglue.so: java.lang.UnsatisfiedLinkError:dlopen 失败:库 “/data/user/0/de.example.test.geckoviewtest/lib/libmozglue.so”不是 发现 2019-05-07 10:58:31.392 9069-9090/de.example.test.geckoviewtest E/GeckoLoader:无法加载 /data/app-lib/de.example.test.geckoviewtest/libmozglue.so: java.lang.UnsatisfiedLinkError:dlopen 失败:库 “/data/app-lib/de.example.test.geckoviewtest/libmozglue.so”未找到 2019-05-07 10:58:31.409 9069-9090/de.example.test.geckoviewtest E/GeckoLoader:无法加载 /data/data/de.example.test.geckoviewtest/lib/libmozglue.so: java.lang.UnsatisfiedLinkError:dlopen 失败:库 “/data/data/de.example.test.geckoviewtest/lib/libmozglue.so”未找到 2019-05-07 10:58:31.420 9069-9090/de.example.test.geckoviewtest W/GeckoLoader:在 APK 中找不到 lib/x86/libmozglue.so /data/app/de.example.test.geckoviewtest-ED_fDOF4yrCjKrHnYMiPhQ==/base.apk 2019-05-07 10:58:31.423 9069-9090/de.example.test.geckoviewtest E/GeckoLoader:加载诊断:加载 mozglue:ABI:x86_64-gcc3,x86: 数据:/data/user/0/de.example.test.geckoviewtest,ax=false,ddx=false, -1x=false,-2x=false,nativeLib:/data/app/de.example.test.geckoviewtest-ED_fDOF4yrCjKrHnYMiPhQ==/lib/x86, dirx=false,libx=false --------- 崩溃开始 2019-05-07 10:58:31.438 9069-9090/de.example.test.geckoviewtest E/AndroidRuntime: 致命例外: Gecko 进程:de.example.test.geckoviewtest,PID:9069 java.lang.RuntimeException:加载 mozglue:ABI:x86_64-gcc3,x86:数据:/data/user/0/de.example.test.geckoviewtest,ax=false,ddx=false, -1x=false,-2x=false,nativeLib:/data/app/de.example.test.geckoviewtest-ED_fDOF4yrCjKrHnYMiPhQ==/lib/x86, dirx=false,libx=false 在 org.mozilla.gecko.mozglue.GeckoLoader.doLoadLibrary(GeckoLoader.java:426) 在 org.mozilla.gecko.mozglue.GeckoLoader.loadMozGlue(GeckoLoader.java:434) 在 org.mozilla.gecko.GeckoThread.initGeckoEnvironment(GeckoThread.java:287) 在 org.mozilla.gecko.GeckoThread.run(GeckoThread.java:448) 引起:java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/de.example.test.geckoviewtest-ED_fDOF4yrCjKrHnYMiPhQ==/base.apk", 压缩文件 "/data/app/de.example.test.geckoviewtest-ED_fDOF4yrCjKrHnYMiPhQ==/split_lib_dependencies_apk.apk", 压缩文件 "/data/app/de.example.test.geckoviewtest-ED_fDOF4yrCjKrHnYMiPhQ==/split_lib_resources_apk.apk", 压缩文件 "/data/app/de.example.test.geckoviewtest-ED_fDOF4yrCjKrHnYMiPhQ==/split_lib_slice_0_apk.apk", 压缩文件 "/data/app/de.example.test.geckoviewtest-ED_fDOF4yrCjKrHnYMiPhQ==/split_lib_slice_1_apk.apk", 压缩文件 "/data/app/de.example.test.geckoviewtest-ED_fDOF4yrCjKrHnYMiPhQ==/split_lib_slice_2_apk.apk", 压缩文件 "/data/app/de.example.test.geckoviewtest-ED_fDOF4yrCjKrHnYMiPhQ==/split_lib_slice_3_apk.apk", 压缩文件 "/data/app/de.example.test.geckoviewtest-ED_fDOF4yrCjKrHnYMiPhQ==/split_lib_slice_4_apk.apk", 压缩文件 "/data/app/de.example.test.geckoviewtest-ED_fDOF4yrCjKrHnYMiPhQ==/split_lib_slice_5_apk.apk", 压缩文件 "/data/app/de.example.test.geckoviewtest-ED_fDOF4yrCjKrHnYMiPhQ==/split_lib_slice_6_apk.apk", 压缩文件 "/data/app/de.example.test.geckoviewtest-ED_fDOF4yrCjKrHnYMiPhQ==/split_lib_slice_7_apk.apk", 压缩文件 "/data/app/de.example.test.geckoviewtest-ED_fDOF4yrCjKrHnYMiPhQ==/split_lib_slice_8_apk.apk", 压缩文件 "/data/app/de.example.test.geckoviewtest-ED_fDOF4yrCjKrHnYMiPhQ==/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/de.example.test.geckoviewtest-ED_fDOF4yrCjKrHnYMiPhQ==/lib/x86, /system/lib]]] 找不到“libmozglue.so” 在 java.lang.Runtime.loadLibrary0(Runtime.java:1012) 在 java.lang.System.loadLibrary(System.java:1669) 在 org.mozilla.gecko.mozglue.GeckoLoader.doLoadLibraryExpected(GeckoLoader.java:347) 在 org.mozilla.gecko.mozglue.GeckoLoader.doLoadLibrary(GeckoLoader.java:373) 在 org.mozilla.gecko.mozglue.GeckoLoader.loadMozGlue(GeckoLoader.java:434) 在 org.mozilla.gecko.GeckoThread.initGeckoEnvironment(GeckoThread.java:287) 在 org.mozilla.gecko.GeckoThread.run(GeckoThread.java:448)

【问题讨论】:

【参考方案1】:

gecko 构建似乎不包含适合您所针对的架构的库 mozglue (即您的设备需要 x86 而您正在构建 arm64)。 您需要确保为您的架构导入正确的

implementation "org.mozilla.geckoview:geckoview-arm64-v8a:69.0.20190903125908" //for arm 64
implementation "org.mozilla.geckoview:geckoview-armeabi-v7a:69.0.20190903125908" //for arm v7
implementation "org.mozilla.geckoview:geckoview-x86:69.0.20190903125908" //for x86 32 bit
implementation "org.mozilla.geckoview:geckoview-x86_64:69.0.20190903125908" //for x86 64 bit

【讨论】:

以上是关于如何实现 GeckoView?的主要内容,如果未能解决你的问题,请参考以下文章

我如何在 GeckoView 上使用 canGoBack()

如何在 Android 上将 Javascript 注入 GeckoView

实施 GeckoView Web 扩展

GeckoView 发送事件或启动函数 (Android)

GeckoView 中有 shouldOverrideUrlLoading 吗?

在 Android 中集成 GeckoView