如何在使用 Cordova 插件时向 Crosswalk 添加媒体编解码器支持?

How do I add media codecs support to Crosswalk while using the Cordova plug-in?

我正在构建一个需要播放 AAC 音频的 PhoneGap 应用程序。它使用本机 WebView 运行良好,但我想在针对 API 16-20 的构建中使用 Crosswalk,因为我的应用程序中的某些 CSS 功能在 Android 4.x.

当我复制项目以添加 Crosswalk Lite 时,我可以看到除了 <audio> 指向 AAC 文件的元素外,该应用程序正常运行。这是因为 Crosswalk does not ship with proprietary codecs by default.

链接页面说:

To build Crosswalk with these codecs, a developer must run the build with the “must accept a EULA” switch turned on:

$ xwalk/gyp_xwalk -Dmediacodecs_EULA=1

Then build Crosswalk. The ffmpegsumo.dll or libffmpegsumo.so in the build output directory will contain the proprietary codecs.

Refer to Crosswalk Build Instruction for more details.

但是,我正在使用建议的插件添加 Crosswalk,因此我得到了没有专有编解码器的预构建库:

phonegap plugin add cordova-plugin-crosswalk-webview  --variable XWALK_MODE="lite" --save

如何在 Cordova Crosswalk 插件中集成专有编解码器?

我设法理解了构建一切的(复杂的)过程。这个答案涉及编译完整人行横道(不是精简版)的自定义版本的过程。

实际上,我决定最终使用标准构建并用 MP3 替换 AAC 音频,但我认为这个答案可能对未来的参考有用。

环境

我在 Ubuntu 16.04 Docker 容器中编译了 Crosswalk 以避免 "polluting" 我的系统并确保我有正确的 Linux 版本。标准图像非常准系统,所以我安装了一些依赖项。我还设置了一个共享文件夹来访问编译后的文件:

docker run -it -v /home/andrea/shared:/shared ubuntu:16.04 /bin/bash
apt update
apt install -y python git nano lsb-release sudo wget curl software-properties-common
export EDITOR=nano # life it too short to learn vi

最后需要add the multiverse repositories:

apt-add-repository multiverse

Note: this procedure needs a lot of space. Make sure to have at least 25GB of free space before continuing.

要求

按照概述安装 depot_tools in the documentation:

git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
export PATH=$PATH:/path/to/depot_tools

初始化工作目录:

mkdir crosswalk-checkout
cd crosswalk-checkout
export XWALK_OS_ANDROID=1
gclient config --name src/xwalk https://github.com/crosswalk-project/crosswalk.git

然后使用 nano .gclient 编辑配置文件并添加以下行:

target_os = ['android']

保存文件。

正在获取源代码

尝试第一次同步:

gclient sync

此命令将失败,但没关系。说明说:

Do not worry if gyp_xwalk fails due to missing dependencies; installing them is covered in a later section, after which you can run gyp_xwalk manually again.

调整 install-build-deps.sh 文件然后 运行 它:

sed -si "s/msttcorefonts/ttf-mscorefonts-installer/g" src/build/install-build-deps.sh
sudo ./src/build/install-build-deps-android.sh

运行 gclient sync 并等待它正确完成。

建筑物

通过检查文件 src/xwalk/build/common.gypisrc/tools/mb/mb_config.pyl,我们可以看到我们需要在构建参数中添加 ffmpeg_branding="Chrome"

为了防止后面出错,请安装libnotify相关的开发包:

sudo apt install libnotify-dev

移动到src目录并打开配置:

cd src/
gn args out/Default

确保内容如下:

import("//xwalk/build/android.gni")
target_os = "android"
is_debug = false
ffmpeg_branding = "Chrome"
use_sysroot = false

参数use_sysroot = false 防止了另一个错误。保存文件时,您应该看到如下内容:

Waiting for editor on "/home/utente/crosswalk-checkout/src/out/Default/args.gn"...
Generating files...
Done. Wrote 6060 targets from 1003 files in 2416ms

再次发布cd ..和运行gclient sync

最后,构建核心库:

cd src/
ninja -C out/Default xwalk_core_library

这将为 ARM 构建库,生成位于以下位置的 AAR 文件:

src/out/Default/xwalk_core_library.aar

复制此文件到安全的地方。

为 x86 构建

返回参数:

gn args out/Default

添加以下行:

target_cpu = "x86"

保存文件,再次运行gclient sync然后重复ninja命令。复制新的 AAR 文件,其中现在包含 x86 库。

使用 AAR 文件

标准的 Cordova Crosswalk 插件使用一个 AAR 文件,其中包含适用于两个平台的库。 This message 作者 Raphael Kubo da Costa 建议如何制作这个单一档案:

AAR files are just zip files; given the only difference between the ARM and x86 AAR files are the different shared libraries, you can use something like zipmerge or anything that merges zip files (or even extract everything into some directory and then create one new zip file) to build one final, multi-architecture AAR archive.

最后,要使用 Cordova 插件中自定义构建的 AAR 文件,请参阅 How to change the Crosswalk version used by the Cordova Crosswalk Webview plugin