Android - Oreo 迁移后 Xwalk 崩溃
Android - Xwalk crash after Oreo migration
我想对面向 Android SDK 22 (5.1)
的应用程序进行一些更改。
我在 Android Studio 3 中加载了项目,得到了 Gradle 升级消息。当然,这样做会使整个事情爆炸,因为新 Gradle 处理依赖项的方式变得非常挑剔。我决定全力以赴,只做整个迁移。无论如何都必须在某个时候这样做。
应用程序使用 XWalkView
(在 class 中扩展),而不是本机 Webview,因为我们想要一些 WebGL 运行。 Xwalk 正在嵌入而不是共享。
只需将 Gradle 文件更新到最新的 Libs,基本上将 Android 支持更改为最新的目标 SDK,使应用程序在 [=65= 启动时崩溃(直接崩溃消息) ] 7+ 设备(Oreo 在 emu 上测试)。该应用程序之前已正确加载。 Logcat 如下:
在应用程序代码中,崩溃似乎源于以下行:
XWalkPreferences.setValue(XWalkPreferences.REMOTE_DEBUGGING, true);
,
它位于 class 扩展 Application
中,而后者又仅包含所用工具的 Debug/Release 配置。删除所述行允许应用程序正常工作,直到它实际尝试加载 XWalkView
.
该应用 运行 在 Android 4.4
(应用 19 分钟 SDK)、5.0 (21) 和 6.0 (23) 上正常运行。
我一直在互联网上搜索可能的解决方案,但尚未找到有用的方法。我知道人行横道已被弃用,可能应该被替换,但 Android 中未提供 WebGL 支持,我目前没有看到当前图形发生变化。
如果有任何其他信息可能有帮助,请告诉我,我会提供。
希望有人能给出一些启示。提前致谢。
编辑:
经过一番尝试,我发现问题出在库文件上。下载 crosswalk.aar
我发现它有两个版本:
- xwalk_core_library-23.53.589.4-arm.aar
- xwalk_core_library-23.53.589.4-arm64.aar
我删除了 maven 版本并手动包含了文件。当我使用 arm64 位时,我实际上可以在 Android 7 平台上毫无问题地使用该应用程序。但是后来我在其他版本中遇到了相同的 xwalk 崩溃。如果是 arm 库,事情又回到了原来的样子。
他们不能一起工作。构建时出现 Duplicate zip file
错误。
所以更新的问题是:
有没有办法告诉 gradle 每个体系结构使用哪个库文件?我一直在四处寻找,但找不到任何东西。
我设法解决了这个问题。这是库中包含的 JNI 的兼容性问题。
maven 加载的库仅包括 armeabi-v7a
和 x86
“.so”文件。
我所做的是从 here 手动下载库的通用和 arm64 aar 版本,解压缩它们,将 arm64-v8a jni 文件夹内容移动到到另一边然后使用jar cvf [yourLibName].aar -C [folderName]/ .
(不要忘记末尾的点)命令重新打包aar.
目前看来一切正常。希望奥利奥也可以,一旦我设法在设备上进行测试。
我想对面向 Android SDK 22 (5.1)
的应用程序进行一些更改。
我在 Android Studio 3 中加载了项目,得到了 Gradle 升级消息。当然,这样做会使整个事情爆炸,因为新 Gradle 处理依赖项的方式变得非常挑剔。我决定全力以赴,只做整个迁移。无论如何都必须在某个时候这样做。
应用程序使用 XWalkView
(在 class 中扩展),而不是本机 Webview,因为我们想要一些 WebGL 运行。 Xwalk 正在嵌入而不是共享。
只需将 Gradle 文件更新到最新的 Libs,基本上将 Android 支持更改为最新的目标 SDK,使应用程序在 [=65= 启动时崩溃(直接崩溃消息) ] 7+ 设备(Oreo 在 emu 上测试)。该应用程序之前已正确加载。 Logcat 如下:
在应用程序代码中,崩溃似乎源于以下行:
XWalkPreferences.setValue(XWalkPreferences.REMOTE_DEBUGGING, true);
,
它位于 class 扩展 Application
中,而后者又仅包含所用工具的 Debug/Release 配置。删除所述行允许应用程序正常工作,直到它实际尝试加载 XWalkView
.
该应用 运行 在 Android 4.4
(应用 19 分钟 SDK)、5.0 (21) 和 6.0 (23) 上正常运行。
我一直在互联网上搜索可能的解决方案,但尚未找到有用的方法。我知道人行横道已被弃用,可能应该被替换,但 Android 中未提供 WebGL 支持,我目前没有看到当前图形发生变化。
如果有任何其他信息可能有帮助,请告诉我,我会提供。
希望有人能给出一些启示。提前致谢。
编辑:
经过一番尝试,我发现问题出在库文件上。下载 crosswalk.aar
我发现它有两个版本:
- xwalk_core_library-23.53.589.4-arm.aar
- xwalk_core_library-23.53.589.4-arm64.aar
我删除了 maven 版本并手动包含了文件。当我使用 arm64 位时,我实际上可以在 Android 7 平台上毫无问题地使用该应用程序。但是后来我在其他版本中遇到了相同的 xwalk 崩溃。如果是 arm 库,事情又回到了原来的样子。
他们不能一起工作。构建时出现 Duplicate zip file
错误。
所以更新的问题是: 有没有办法告诉 gradle 每个体系结构使用哪个库文件?我一直在四处寻找,但找不到任何东西。
我设法解决了这个问题。这是库中包含的 JNI 的兼容性问题。
maven 加载的库仅包括 armeabi-v7a
和 x86
“.so”文件。
我所做的是从 here 手动下载库的通用和 arm64 aar 版本,解压缩它们,将 arm64-v8a jni 文件夹内容移动到到另一边然后使用jar cvf [yourLibName].aar -C [folderName]/ .
(不要忘记末尾的点)命令重新打包aar.
目前看来一切正常。希望奥利奥也可以,一旦我设法在设备上进行测试。