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}'
各行の最初のカラム(行数)を加算していき、最後にそれを表示する。