我正在构建一个需要播放AAC音频的PhoneGap应用。它使用原生WebView
效果很好,但我想在构建目标API 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
然后建造Crosswalk。 ffmpegsumo.dll 或 libffmpegsumo.so in 构建输出目录将包含专有的编解码器。
有关详细信息,请参阅Crosswalk Build Instruction。
但是,我使用建议的插件添加Crosswalk,因此我获得了没有专有编解码器的预构建库:
phonegap plugin add cordova-plugin-crosswalk-webview --variable XWALK_MODE="lite" --save
如何在Cordova Crosswalk插件中集成专有编解码器?
答案 0 :(得分:1)
我设法理解构建一切的(复杂的)过程。这个答案涉及编译完整Crosswalk(不是精简版)的自定义构建的过程。
实际上,我决定最终使用标准版并用MP3取代AAC音频,但我认为这个答案可能对将来参考有用。
我在Ubuntu 16.04 Docker容器中编译了Crosswalk,以避免&#34;污染&#34;我的系统,并确保我有正确的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的可用空间。
按照in the documentation概述安装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.gypi
和src/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
将此文件复制到安全的地方。
通过以下方式回到args:
gn args out/Default
添加以下行:
target_cpu = "x86"
保存文件,再次运行gclient sync
,然后重复ninja
命令。制作现在包含x86库的新AAR文件的副本。
标准的Cordova Crosswalk插件使用单个AAR文件和两个平台的库。 Raphael Kubo da Costa的This message建议如何制作这个档案:
AAR文件只是zip文件; 给出了ARM之间的唯一区别 和x86 AAR文件是不同的共享库,您可以使用 像
zipmerge
或任何合并zip文件的东西(甚至是 将所有内容解压缩到某个目录,然后创建一个新的zip文件) 构建一个最终的,多架构的AAR存档。
最后,要使用 Cordova插件中的自定义AAR文件,请参阅How to change the Crosswalk version used by the Cordova Crosswalk Webview plugin。