如何在我自己的 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编译期间崩溃?