最近因为项目需要,编译了两个平台下的VLC framework。经过一番探索,终于找到了正确的编译步骤。
前期准备工作
你需要准备以下内容:
- 22G以上的硬盘空间。
- VPN。
- 足够长的空闲时间。
开始编译
1. Git VLCKit
在终端中键入
git clone https://code.videolan.org/videolan/VLCKit.git
首先将VLCKit的原始文件git下来,这个过程不需要开VPN,同时文件很小,所以耗时很少。
提示done就说明git完成。
2. 编译iOS平台的VLC framework
进入git下来的VLCKit文件夹中,可以看到一个名为compileAndBuildVLCKit.sh
的文件。这个文件是帮助我们编译framework的脚本文件,打开后就往下拉, 在大概40行左右就可以看到OPTIONS。
-k Specify which sdk to use (see 'xcodebuild -showsdks', current: ${SDK})
-v Be more verbose
-s Build for simulator
-f Build framework for device and simulator
-d Enable Debug
-n Skip script steps requiring network interaction
-l Skip libvlc compilation
-t Build for tvOS
-x Build for macOS / Mac OS X
-w Build a limited stack of non-scary libraries only
-y Build universal static libraries
-b Enable bitcode
-a Build framework for specific arch (all|i386|x86_64|armv7|armv7s|aarch64)
-e External VLC source path
在每一项的后面都给出了操作的用处,这里我们需要关注两项。如果你需要编译iOS平台下的framework,那么你需要使用-f
参数。如果你需要编译macOS平台下的framework,则你需要使用-x
参数。tvOS平台同理。
打开终端,进入到VLCKit目录下,开启VPN后执行以下命令:
sh compileAndBuildVLCKit.sh -f
这个过程将会耗时2h甚至更多,最终会产生15G+的文件。我的mac比较老,因此耗时很长。
说明:
这个过程和以前老的VLCKit的编译过程有差异,原来在VLCKit文件夹下有两个.sh
文件。一个用于编译iOS平台,另一个用于编译macOS平台。我发现使用老的VLCKit文件在macOS Mojave & Xcode 10下怎样都编译不过,因此使用了新的VLCKit文件。
原来编译iOS平台下的过程分为3步:
- 编译源文件。
- 编译模拟器环境下的framework。
-s
- 编译真机环境下的framework。
-f
因此整个库完整的编译成功需要执行3次脚本命令,而现在合成了一步,但时间上好像更长了。
经过超长的等待后,终端中显示completed
,则说明你编译成功。编译成功的framework在/VLCKit/build目录下,名字叫MobileVLCKit.framework
,文件大小大概在600M+。
至此iOS平台下的编译工作就全部完成。
3. 编译macOS平台下的VLC framework
建议重新git一份VLCKit文件来专门编译macOS版本的framework
编译macOS平台与iOS相仿,差别在于命令参数的区别。在这里你需要输入:
sh compileAndBuildVLCKit.sh -x
保持VPN畅通的情况下,等待大约1h左右,最终会产生5G+的文件。
经过漫长的等待后,终端中同样也会显示completed
,说明你编译成功。编译成功的framework在/VLCkit/build/Release下,文件大小大概在300M+。
至此macOS平台下的编译工作就全部完成。
其他说明
·二次编译
如果你不慎遗失了framework,而整个VLCKit的文件都还在,你想重新编译MobileVLCKit.framework & VLCKit.framework
。则你需要对.sh
进行如下修改。
打开compileAndBuildVLCKit.sh
文件,在其中搜索git
并注释掉这一段:
之后重新运行脚本就不会进行libvlc的拉取过程,编译时间会缩短很多。
·自定义VLC framework
如果你需要对VLC framework内部做一些自己的改动,加自己的函数,并公开到外部使用。编译也是同样的步骤,不过可能会碰壁。如果有需要可以留言帮你解决。