Androidソースの行数、その3

前回の調査AndroidのソースはLinux kernelをのぞいて約770万行とわかった。
これらは多くの既存のオープンソースプロジェクトの成果を利用している。

では、純粋にAndroid向けに書かれたコードはどのくらいのものなのだろうか?

そこで、ソースの中に /Copyright.*Android/ というパターンのあるファイルだけを取り出して行数を数えてみた。

$ find . ! -path './kernel/*' -name "*.[ch]" -o -name "*.cpp" |xargs grep -l 'Copyright.*Android' |xargs -l wc -l |awk '{ sum += $1} END {print sum}'
655508
$ find . ! -path './kernel/*' -name "*.S"  |xargs grep -l 'Copyright.*Android' |xargs -l wc -l |awk '{ sum += $1} END {print sum}'
14603
$ find . ! -path './kernel/*' -name "*.java" |xargs grep -l 'Copyright.*Android' |xargs -l wc -l |awk '{ sum += $1} END {print sum}'
938023
$

前回の結果とまとめるとこうなる。

ソース種別 行数 うちAndroid行数 Android%
C/C++ 5,597,713 655,508 11.7%
Asm 221,402 14,603 6.6%
java 1,909,260 938,023 49.1%
total 7,728,375 1,608,134 20.8%


Javaのソースは半分近くがAndroid用に新規に書き起こされたが全体では770万行の2割の160万行ということになる。

ちなみに、kernelのソースコードには /Copyright.*Android/ というパターンはなくて、android用の追加されたと思われる部分はGoogleのCopyrightになっていた。


(補足)
蛇足かもしれないけど、このワンライナーの説明を。

$ find . ! -path './kernel/*' -name "*.[ch]" -o -name "*.cpp" | 

カレントディレクトリ以下の'./kernel/*' 以外のファイルで、名前が "*.[ch]" または "*.cpp" のものを抽出して

xargs grep -l 'Copyright.*Android' |

/Copyright.*Android/ のパターンにあうファイルだけを抽出

xargs -l wc -l |

各行(ファイル名)ごとにひとつづつ wc -l を実行して
(xargs に -l をつけないと複数個まとめて wc -l が実行されてしまう。最初はこれでハマった。)

awk '{ sum += $1} END {print sum}'

各行の最初のカラム(行数)を加算していき、最後にそれを表示する。