天天看點

android全系統編譯ninja,Ninja編譯過程分析

在Android N的系統上,初次使用了Ninja的編譯系統。對于Ninja,最初的印象是用在了Chromium open source code的編譯中,在chromium的編譯環境中,使用ninja -C out/Default chrome指令,就可以利用源碼編譯出chrome的apk。對使用者而言,抛開對原理的探究,最直覺的印象莫過于可以清楚的看到自己目前編譯的進度。同時,對android而言,也可以感受到編譯速度的提升帶來的便捷。本文将深入分析Ninja的編譯原理,以及android上面的編譯改變。

正因為這個改變,是以在編譯android N的code的時候需要使用OpenJDK8

Ninja

Ninja是一個緻力于速度的小型編譯系統(類似于Make);

如果把其他編譯系統比做進階語言的話,Ninja就是彙編語言

主要有兩個特點:

1、可以通過其他進階的編譯系統生成其輸入檔案;

2、它的設計就是為了更快的編譯;

使用Kati把makefile轉換成Ninja files,然後用Ninja編譯

在不久的将來,當不再用Makefile(Android.mk)時,Kati将被去掉

ninja核心是由C/C++編寫的,同時有一部分輔助功能由python和shell實作。由于其開源性,是以可以利用ninja的開源代碼進行各種個性化的編譯定制。

android全系統編譯ninja,Ninja編譯過程分析

Blueprint和Soong是用于一起把Blueprint 檔案轉換為Ninja檔案。 将來需要寫Blueprint檔案(Android.bp),轉換為Android.soong.mk(也可以直接寫),然後轉換為Ninja檔案(build.ninja)然後用Ninja編譯。

如果Android.mk和Android.bp同時存在,Android.mk會被忽略。

如果Android.bp的同級目錄下有Android.soong.mk也會被include

android全系統編譯ninja,Ninja編譯過程分析