在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的開源代碼進行各種個性化的編譯定制。
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