Link: Profilo · An Android performance library

via Profilo · An Android performance library

コードを眺めているが・・・。すごいなこれ。

すごいところを列挙するのはあとでやるとして、Android の C++ レイヤの練度で見ると Facebook は自分の勤務先を含む多くの会社を圧倒している気がする。

たとえば Chrome なんかは単純に C++ のコードベースとして見れば割と比類ない練度だと思うけれども、基本的にはデスクトップアプリだから Android らしさというのはない。Facebook から出てくるライブラリの C++ は Android らしさを感じる。しかも Android が好きで良さを引き出そうというよりは、Android の弱点にくまなく付け込んで攻略するという方向性。これは自分の好みに近い

自分の勤務先は根本的にはウェブの会社で、モバイル対応はなんとなく場当たり的に行われた。上の方は mobile first と旗を振ったけれど、なにをすべきなのかは誰もよくわかっていなかった。各チームがそれぞれ勝手に色々やっていたため、全社共通の基盤みたいのの整備が遅れた。さすがに今はちゃんとしてきたけれども、インフラから整然と作っていったサーバ側とはだいぶ趣が違う。そしてアプリインフラ的なレイヤを主導しているのが Java の人なせいか C++ レイヤは未だに荒野感がある。まあ Android の低レベルの仕事をしたいプログラマの多くはアプリじゃなくて OS やると思うんだよね。アプリとして C++ 書きたい人、そんなにいない気がする。

この話とはちょっと矛盾するけれども、初期にモバイル対応 (Android アプリ開発) を主導した現場の人の多くは Android OS 出身者で、自分のアプリのために Android のギリギリを攻めて行こうというよりは Android ecosystem の良き市民であろうという意識が強かった。だから platform の .so を dlopen() してシンボルをぶっこぬく、とか多分やらない。Java レイヤの hidden API を reflection でよぶくらいがせいぜい。自分たちのチームにしても、OS やデバイスがやるべきことは自分で妙なハックをしたりせず OS やデバイスの人に頼む。(自分はそれがあまり好きでないが、妥当だとは思っている。)

ふりかえって Facebook を見るに、彼らの mobile first はなにをすべきかはっきりしていた。Facebook アプリに全部の機能を詰め込んでちゃんと動くようにすればよい。そう決断したタイミングがすごく早かったとは思わないけれども、とにかくチームが、そしてコードベースが一つのアプリを中心に編成された。だからライブラリなどのインフラも大規模コードベースらしく整備されているし、よく書けてる。

しかも低レベルでいろいろやりたいプログラマに OS をやるという選択肢がない。彼らはそのかわりにアプリの中で色々無茶なハックをしてウサを晴らしたのだろう。OS のコードをコピーし、アプリ固有の事情にあわせツールチェインを魔改造し・・・といった具合に。

まあこれらは完全な想像だけれども、Profilo および依存先 C++ のコードには大量につっこまれたエンジニアリング資源の匂いがあるね。Android がアプリレイヤでどこまで無茶できるかを体験するには面白いところなのだろうな Facebook. まあコード読んで勉強させていただきますわ。