我正在构建一个需要播放aac音频的phonegap应用程序。使用本机WebView很好,但是我想在一个针对apis 16-20的构建上使用crosswalk,因为我的应用程序中的一些css功能在android 4.x上根本不起作用。
当我复制项目以添加crosswalk lite时,我可以看到除了指向aac文件的<audio>元素之外,该应用程序都可以工作。这是因为Crosswalk does not ship with proprietary codecs by default
链接页面显示:
要使用这些编解码器构建crosswalk,开发人员必须运行构建
打开“必须接受EULA”开关:

$ xwalk/gyp_xwalk -Dmediacodecs_EULA=1

然后建造人行横道。中的ffmpegsumo.dll或libffmpegsumo.so
生成输出目录将包含专有编解码器。
有关详细信息,请参阅Crosswalk Build Instruction
但是,我正在使用建议的插件添加crosswalk,因此我得到了没有专有编解码器的预构建库:
phonegap plugin add cordova-plugin-crosswalk-webview  --variable XWALK_MODE="lite" --save

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

最佳答案

我设法理解了建立一切的(复杂的)过程。这个答案涉及编译完整crosswalk(不是lite版本)的自定义构建的过程。
实际上,我最终决定使用标准的构建,并用mp3代替aac音频,但我认为这个答案可以作为以后的参考。
环境
我在ubuntu 16.04docker容器中编译了crosswalk,以避免“污染”我的系统,并确保我有正确的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

注意:这个过程需要很大的空间。继续之前,请确保至少有25GB的可用空间。
要求
按照所述安装depot_tools
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

这个命令会失败,但没关系。说明书上说:
如果由于缺少依赖项而导致gyp_xwalk失败,请不要担心;稍后将介绍如何安装它们,之后您可以再次手动运行gyp_xwalk
调整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建筑
返回到args:
gn args out/Default

添加以下行:
target_cpu = "x86"

保存文件,再次运行gclient sync,然后重复ninja命令。复制新的aar文件,该文件现在包含x86库。
使用aar文件
标准的cordova crosswalk插件使用一个aar文件和两个平台的库。in the documentation作者Raphael Kubo da Costa建议如何制作这个单一的档案:
aar文件只是zip文件;考虑到arm之间的唯一区别
x86 aar文件是不同的共享库,您可以使用
类似于zipmerge或任何合并zip文件(甚至
将所有内容提取到某个目录中,然后创建一个新的zip文件)
建立一个最终的、多体系结构的aar档案。
最后,要在cordova插件中使用自定义构建的aar文件,请参见This message

10-08 17:26