在Android平台开发环境安装ninja

在Android 7.0以后,Ninja成为了Android底层真正控制编译流程的工具。 直接使用ninja命令,而非make,可以在某些情况下,提高编译验证、debug的效率。

本文介绍安装ninja的五种方法。

管理员安装

一般,Android平台标准的开发环境是Ubuntu。 管理员可以通过以下命令,直接安装。

sudo apt-get install ninja-build

如果是Max OS X(Darwin)环境,也可以用Homebrew安装。

brew install ninja

无root权限安装

在没有root权限的情况下,一共有四种安装方法,推荐使用第一种。

利用pip安装

对于某些没有访问外网条件的环境,需要先配置pip,确保pip能正常安装Python官方源的包。

pip install --user ninja

这个PyPI上的ninja,不算是官方的发布,源于ninja-python-distributions。 如果没有root权限,这个是最简单快捷的安装方法。

如果要说有什么缺点的话,那就是它会在真正的ninja可执行文件外面包一层没有实质功能的Python。 在一些情况下,比如Ctrl+c中断执行时,会额外打印一段Python的trace。

直接从项目中复制

由于Android项目自带ninja的可执行文件,所以,不安装直接使用,也是可能的。

在项目根目录,执行find命令,可以找到ninja可执行文件。

$ find prebuilts -name ninja
prebuilts/build-tools/linux-x86/asan/bin/ninja
prebuilts/build-tools/linux-x86/bin/ninja
prebuilts/build-tools/darwin-x86/bin/ninja

如果工作站为Ubuntu,通常使用中间的那个。 如果是Mac OS X,则使用第三个。 使用起来的大概情况如下。

prebuilts/build-tools/linux-x86/bin/ninja -f out/combined-aosp_arm64.ninja

如果有反复使用的需求,则可以复制该文件到可执行目录下。 比如,用户目录的bin,在Ubuntu上通常就是一个可执行路径。 注意,libc++.so是必须准备的调用库,必须放在与可执行目录同级的lib64。

mkdir -p ~/bin ~/lib64
cp prebuilts/build-tools/linux-x86/bin/ninja ~/bin/
cp prebuilts/build-tools/linux-x86/lib64/libc++.so ~/lib64/

这样就可以直接使用ninja了。

从GitHub下载产物

在Ninja项目的Releases页面,可以直接下载到编译好的主要Ninja版本。 如果有必须使用最新版本v1.8.2的需求,这是最好的办法。 apt、Homebrew、pip和项目自带的ninja,目前(2017年9月)最新版本为1.7.2。

This is a major release after v1.7.2, mainly for performance improvements, support for more path components, and several bugfixes.

v1.8.2版本主要是提升了编译性能。 详情可参考《release: ninja v1.8.2 - Google Groups》。

wget https://github.com/ninja-build/ninja/releases/download/v1.8.2/ninja-linux.zip

解压可得ninja可执行文件,复制到可执行环境下即可运行。

从源码编译安装

这是最不推荐的做法,因为最麻烦。 除非需要改动源码,自定义功能,否则下载官方发布的版本就好了。

然而,俺们是在中国。

由于GitHub的Releases产物,托管在AWS上。 这意味着,在中国下载,会概率性失败。 如果产物过大,还有高概率下载到一半失败。 所以……

在GitHub的ninja-build/ninja下载源码,并传到工作站中。

在源码根目录,执行编译。

./configure.py --bootstrap

复制项目根目录下编译好的ninja到可执行路径下。

cp ninja ~/bin/

相关笔记