如何在我自己的 android 库模块中添加人行横道 webview?

Posted

技术标签:

【中文标题】如何在我自己的 android 库模块中添加人行横道 webview?【英文标题】:How to add crosswalk webview in my own android library module? 【发布时间】:2017-04-09 17:26:30 【问题描述】:

我正在开发一个必须包含 Crosswalk Webview 的 android 库模块。我使用 Github Sonatype (https://github.com/sonatype/) 创建了这个库。没有 Crosswalk Webview 也能正常工作。我尝试了以下 3 种方法来包含 Crosswalk。

方法一:

在我的库项目 app gradle 中添加 Crosswalk Webview 库

错误:(编译错误)

无法解析:org.xwalk:xwalk_core_library:18.48.477.13

方法二:

在我的库项目中添加人行横道 aar 文件

添加aar文件参考链接How to import a .aar file into Android Studio 1.1.0 and use it in my code

我已经从 https://download.01.org/crosswalk/releases/crosswalk/android/stable/18.48.477.13/

错误:(编译错误)

无法解析:MyLIBApplication:xwalk_core_library_java:unspecified

方法三:

在我的库项目中添加人行横道 jar 文件

下载链接 https://download.01.org/crosswalk/releases/crosswalk/android/stable/18.48.477.13/

错误:此方法没有编译错误,但它给出的运行时错误是 java.lang.NoClassDefFoundError: org.xwalk.core.R$string

注意:我尝试了两个jar(普通,共享模式)文件

【问题讨论】:

方法 #2 应该可以工作。我已经下载了crosswalk-webview-18.48.477.13-arm zip 文件,它包含一个完整的 AS 模块。它包含一个 jar、一些资源和一堆依赖于 CPU 的 .so 本机库(因此,如果您要将其集成到您的库中,您将只能使用 ARM 或 x86 二进制文件,否则您将不得不为每个架构创建一个版本的 lib。TL;DR:不要这样做,通过 gradle 导入。 在 gradle 方法中我无法构建我的示例项目。 我才发现官方页面已经没有 gradle 教程了。显然现在添加 XWalk 和使用 npm 工具要复杂得多。 我刚找到this 以上链接工作在普通的 android 应用程序中工作,但库现在可以工作 【参考方案1】:

我创建了一个从 webview 到 XWalkView 的新应用程序来渲染 three.js stl loader 演示,无论是 WebGlRenderer 还是 CanvasRenderer,webview 都不支持。 下面是人行横道模块的使用流程:

第一步:文件->新建->导入模块

第 2 步选择模块并根据需要重命名

第 3 步选择所有选项

这里android studio可能会要求你更新,更新吧

第四步处理模块依赖

在此之后,Gradle Build 会自动运行 到这里我们已经完成了人行横道入口。

第 5 步使用 XWalkView

将此权限添加到 AndroidManifest.xml

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

在AndroidManifest.xml的应用节点上添加硬件加速

android:hardwareAccelerated="true"

将此添加到布局文件

<org.xwalk.core.XWalkView 
 android:id="@+id/xWalkView"
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_
 android:layout_>
</org.xwalk.core.XWalkView>

将此添加到活动中

XWalkView mXWalkView = (XWalkView) findViewById(R.id.xWalkView);
mXWalkView.load("http://192.168.1.42/test", null);

到这里我们就完成了 这是我使用 webview 和 XWalkView 渲染 three.js STL loader 的结果。

webview 不支持

XWalkView 支持不错

哈哈,成功了。


Follow 是另一个旧实现,也可以参考这个好[post] 或doc11。

这里是source code。

下载正确的Crosswalk Android webview包并从https://crosswalk-project.org/documentation/downloads.html解包

将xwalk_core_library_java.jar 从crosswalk libs 复制到android studio 项目中的app/libs/ 中,并点击该文件,选择“Adds As Library”

将crosswalk libs下的其他内容复制到app/src/main/jniLibs/

制作一个Android Resource dir res2,并将crosswalk res dir中的文件复制到这个dir。

将此添加到 AndroidMenifest.xml

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />


and add android:hardwareAccelerated="true" to application node.to use hardware acceleration which is needed by crosswalk webview

将此添加到布局

<org.xwalk.core.XWalkView android:id="@+id/webview"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_
        android:layout_
        >
    </org.xwalk.core.XWalkView>

将此添加到活动中

XWalkView mXWalkView = (XWalkView) findViewById(R.id.webview);
    mXWalkView.load("http://xxxxxx.com", null);

如果你想调试远程添加这个。

XWalkPreferences.setValue(XWalkPreferences.REMOTE_DEBUGGING, true);

【讨论】:

引用过程 @RDY 我今天创建了一个新的,我刷新了我的答案。 github.com/punyfeir/TestCrosswalkEmbed2 这个链接对我有帮助,谢谢@Kris 我说这只支持 ARM 是否正确?如果我想同时支持 x86 和 ARM 怎么办?我不确定要下载和导入哪个模块。 @RobVoisey 不,它可以支持许多架构。参考crosswalk-project.org/documentation/about/…和crosswalk-project.org/documentation/getting_started.html

以上是关于如何在我自己的 android 库模块中添加人行横道 webview?的主要内容,如果未能解决你的问题,请参考以下文章

如何防止流星应用程序与人行横道包在Android编译期间崩溃?

无法在 Android 库模块中启动 Activity

库模块在我的项目应用程序模块android中不起作用

如何将“aar”库添加到 AOSP?

如何正确地将库模块依赖项添加到 Flutter Plugin 的 Android 文件夹? [关闭]

我如何将此库添加到我的android studio项目中