【書評】Androidを支える技術(I)
Androidを支える技術(I)
なにかと話題の書籍、「Androidを支える技術(I)」をようやく読み終えたのでちょっとしたレビューでも。
結論からいいますと、 ここ数年読んだAndroid書籍では最高に面白かったです
TL;DR
レビュー
冒頭にも書いたとおりAndroidの内部構造、一巻は特にイベントと描画周りに焦点をしばった内容です。これがディープなことディープなこと。
「はじめに」からすでにおかしくて、
「執筆中にNougatが出て、バイトコード実行環境が変わり加筆修正を余儀なくされた」
とか他の本ではありえないことが書かれています。この時点でいい意味でやばい本を買ったという予感と期待に胸が膨らみました。
(逆に上記文言で特になにも感じないなら、おそらくこの本は合いません)
第1章はAndroid全体の概要。Androidアプリを開発したこたがない組み込み系エンジニア向けの解説というところです。ここからすでに「何らのGUIシステムでコーディングしたことがある人」前提で話が進んでいきます。UIスレッドとか当然のように出てきます。
そして2章でいきなりLinuxカーネル。Linuxカーネルからのイベントを受け取り、Windowに配布する部分の解説ですからんね…カーネル周りの知識はほとんどないですがざっくり概要ぐらいは掴めたのと同時に「こんな仕組みだったのか!」という驚きを感じました。
ここはAndroidエンジニア以外の人の方が楽しいかもしれませんね。少なくともLinuxの知識があったほうが楽しめるのではないかと思います。
中盤がレイアウトや描画周りの解説。ここは(OpenGLを除き)Javaコード部分の解説が主体です。Viewツリーの構築と描画・イベント処理ですね。
ここについてはそこそこコードを追ったことがあるので、把握してた知識で問題なかったことを確認したぐらいです。dispatchTouch/dispatchDraw/onMeasureなどですね。このレベルぐらいなら自分のように、内部構造をちょっと覗いたことがあるという人は多いのではないでしょうか?
もちろん自分が追ってた範囲よりは深い部分の解説があって面白かったですが、アプリを作るぶんに困らない範囲の知識はもっていたのでそこまで新しい知識というわけでもなかったです。
逆に上記のメソッドをみてピンとこないなら 今すぐ注文していいと思います。より自作Viewが作りやすくなるはずです。
そして一番面白かったのが最終章「バイトコード実行環境」
なぜdexがレジスタ型なのかという考察、いかにネイティブコンパイルするか、さらにそれをAndroidバージョンごとにどのように変わっていったか、およびその理由の考察…
本当の読んでて興奮しました。個人的にこの本で一番面白かったのがこの章です。
デバイスの進化、ユーザ要求の変化、それらに合わせてAndroidはどのように変わるべきか…著者の異常とも言えるAndroid愛を感じる章です。
本当にここまでAndroidの構造を把握してる人は日本にそうそういないのではないでしょうか?Androidの複雑で膨大な内部構造のコードを読み・理解しているあたり、著者の力量の高さも伺えます。
当然ですが、内容はそこらのAndroidの書籍より数段ハード です。理解が追いつかず、同じ場所を何度も読み返したので読破にも時間がかかりました(それでも理解しきれてない部分が多い…)
でも面白いんですよねぇ。自分の知らない層の話なので本当に面白い。
個人的にですが以下のような人におすすめです。
- Android開発を年単位で経験している
- よくライブラリや自作Viewを作る
- よくView周りのソースを読む
まずある程度Androidの知識がないと厳しいです。昨日今日触り始めました、ではおそらく難しい。
「昨日今日の人」が読むのを止めはしませんが、この本より先に読むべき本はあると思います。本を読む代わりにとにかくコードを書くでもいいです。
逆にある程度なれた人にとってはより最適化されたアプリを作る手助けになるでしょう。
もっともこの本が最適化手法を提示してくれるわけではありません。
ただし、よりAndroidのソースを追いやすくなるのは間違いないです
その結果、より高速で効率のいいアプリを作れるようになる可能性はあると思います。
どの程度直接的に役立つのかはまだ自分もよくわかりません。
しかしいい刺激になるのは間違いないので、「今読む本がない / 次何を読もう?」というAndroidエンジニアには強くオススメしたい本でした。二巻も買います!
ちなみに所々でコラムがあるのですが、Android3.x系ひどい と何度も書いてて笑えましたw 確かに当時のタブレットはいい出来とは言い難かったですからね…