1. ホーム
  2. Android

Androidの内部育成に磨きをかける2年間

2022-02-17 22:40:19

        Androidは奥深いシステムで、老羅はあえて自分が熟練しているとは言わないが(実際、彼は自分が神通力に長けていると言ったり、企業が神通力に長けている人材を採用したいと言ったりするのを嫌う)、少なくとも、Androidシステムの全体、一番上のアプリケーション層から、一番下のLinuxカーネルまですべて乗り切ったと言うことはできるだろう。Linuxカーネルの底辺に至るまで、精錬は一種の内部修養である。この記事では、2年間にわたるAndroidシステムの研究を紹介し、皆様のご支援とご声援に感謝の意を表します。

書籍「"Androidソースコード・シナリオ解析"」は、Attack of the Programmers ( http://0xcc0xcd.com をクリックすると入場できます。

        以下は、本記事の概要です。

<スパン 1. フィロソフィー

<スパン 2. マイルストーン

<スパン 3.読んだ本

4.研究されたコンテンツ

<スパン 5. 今後やるべきこと

        ラオスがこの2年間、皆さんに伝えようとしてきたことが網羅されているのです。さて、くだらない話はこのくらいにして、本題に入りましょう。

        I. コンセプト

        ここでは、どのような心構えでシステムの研究に臨むべきかということを考えています。昔から、本の中には顔があり、本の中には金の家があると言いますが、コードの中にも顔があり、金の家があると思うので、羅はみんなに "Read The Fucking Source Code" と言って欲しいのです。さらに、優れたオープンソースプロジェクトにとって、そのソースコードを読まないことは、もったいないことなのです。では、コードを読むことの利点は何でしょうか?他の人の素晴らしいコードやアーキテクチャを学ぶことに加えて、最も重要なことは、自分のプロジェクトの問題に対する答えを見つけることができるということです。

        プロジェクトで問題にぶつかったとき、私たちが最初に考えるのは、Webで答えを探すことです。しかし、ウェブでは満足な答えが得られないこともある。あなたが持っている1つの大きなトリックを忘れないでください - コードの中で答えを見つけることです! もちろん、コードから答えを探していると言うのは簡単ですが、あなたが見つけるためにまっすぐに行くとき、あなたは雲が霧であることを見つけるかもしれない、あなたがソースコードのファイルを参照したい場合でも、コードが言っているのかわからない、どこにわからない。これは、コードを読むのいつもの習慣が必要です、一時的に仏の足を保持しないでください。時には一時的な修正は、問題を解決することができますが、技術やステップでステップする必要性を習得し、運のこの種を保持することはありません。

        フックは、実はニュートンよりも先に重力の法則を発見し、正しい公式を導き出していたのです。しかし、彼は数学が苦手だったため、天体の運動を支配している力が万有引力であることに気づかず、太陽の周りを回る惑星の円運動をかろうじて説明することしかできなかったのです。その後、数学マニアのニュートンは、フックの問題を微積分で満足に解決し、力学の基本3法則を銀河系にまで拡張して、アリストテレス以来の「天と地は同じではない」という古い考えを変え、科学界に大発見として迎え入れられることになった。フックは激怒し、ニュートンが自分の研究を盗作していると訴えた。ニュートンは皮肉たっぷりにこう言い返した。「ああ、俺は本当にクソッタレの巨人の肩の上に立っているんだ!」。

        ニュートンやジョブズのような狂人は、巨人の肩の上に立つことなく、驚くべきことを成し遂げることができると信じるに足る理由がある。しかし、私たちはニュートンやスティーブ・ジョブズではないので、コードを見る前に、自分より先に来た人たちの要約を見つけた方がいい。Androidを例に挙げると、少なくともLinuxカーネルの基礎は知っておかなければなりません。だから、Androidのソースコードを見る前に、Linuxカーネルに関する古典的な本を見つけて、それを見てください。後日、お勧めの本を紹介します。

        では、読むべきバージョンをどのように選べばいいのだろうか。一般的には、最新のバージョンを選んで読むことである。しかし、新しいバージョンのソースコードがリリースされると、私たちが読んでいるソースコードは旧バージョンになってしまいます。このとき、古いコードを読み続けるべきか、新しいバージョンのコードを追いかけるべきか、悩むところです。シリーズものを見るように考えて、一気に前面に飛び出すと、何を言っているのかわからなくなるかもしれません。実際、バージョンアップが早くても、基本的なことは簡単には変わりません。コードを見るとき、その骨格や脈絡を把握することが目的のひとつになります。なにしろ、システムというのは細部まで作り込まれていて、短時間ですべてを食べきることはできません。しかし、一度、骨格と脈絡がわかれば、後で理解したい詳細について、関連するソースファイルをそっと探すことができ、簡単に本題に入ることができるのです。

        正直なところ、Androidのシステムについては、わからないことがたくさんあります。そのため、ブログ記事の後のコメントで、私が回答しないようなもっと具体的な質問をする生徒がいるのを時々見かけます。一つは、私が理解していないこと、もう一つは、これらの学生が見るべきコードを選ぶのを助ける時間がないことです。冒頭で私がAndroid系に習熟していないと言ったのも、このためです。しかし、主なあなたはAndroidシステムのコードに精通していることを信じて、シーンに問題がある、コードをフォローするためにつるつる、もう少し忍耐とケア、それは問題を解決することが可能であることを確認してください

        Androidのバージョンの問題ですが、現在私が書いている記事は2.3をベースに書いていることは皆さんご存知だと思います。多くの学生は、私が出て、今は4.2であり、4.3や5.0さえ出てきているのに、まだ2.3を見ている、と言うのです。私が言いたいのは、メインはその骨格と脈をマスターすること、バージョンがどう変わろうとも、原理は同じで、これがすべての変化に対応する方法だということです。したがって、私は自分のエネルギーをそらす避けるために、前後の研究をより一貫性と一貫性を作ることができる2.3を勉強することにこだわってきました。もしまだ疑問があるなら、後でAndroidのUIアーキテクチャについて話すときに、4.2と2.3の違いを簡単に比較しますが、実際、基本原則はまだ同じであることが分かると思います

        また、Androidシステムの骨格や脈絡に関して言えば、私の記事にはコードの詳細が多すぎる、もう少し抽象化して各モジュールの概要を一般性の高い言葉やイメージで説明してほしい、という学生からの不満もあるようです。私は、コードを読んで細部を理解しなければ、たとえ私が一般化された言語や画像でそのような概要を説明できたとしても、もしかしたらこの概要は私にしか理解できないかもしれない、と言いたいのです。

        Androidのソースコードを本格的に見始める前から、例えばHALがなぜドライバをユーザ空間とカーネル空間に分けたのか、BinderはIPC機構の中で最も効率が良いと言われているのかなど、Androidのシステムの概要を明確に示す図が欲しいという思いは同じでした。この2つについては、インターネットから抽象的な情報を入手して説明したのですが、やはり私には抽象的すぎて、もっともらしく理解しているようで実は理解していないだけだった!というのが正直なところです。それが、コードの中に答えを探そうと思ったきっかけです 今では、抽象的であるはずのアウトラインに立ち戻ると、それが何を言っているのかがよくわかるのです。

        だから、「天が人に降りようとするときは、まず心を痛め、筋骨を鍛え、体を飢えさせなければならない」という諺も納得がいく。

        さて、哲学はここまでにして、以下は要約です。

<スパン 1. コードの中から答えを探す - 「Read The Fucking Source Code」を読む。

2. Stay the same - 骨格と脈絡をつかむまで、1つのバージョンのコードにこだわる。

        II. マイルストーン

        Android 2.3の研究では、図1に示すように、大きく分けて以下の5つの時点を経験しました。


図1 Android 2.3のマイルストーンを調査している様子

         2011年6月21日の最初のブログ投稿から、2013年6月03日のAndroid 2.3に関する研究終了まで、合計で約2年間、無から有へのプロセスであった。最も苦しかったのは、2011年12月下旬から2012年6月12日までの半年間で、2011年12月下旬以前のブログ記事をまとめて、書籍「"Android System Source Code Scenario Analysis"」を作成し、2012年10月末にようやく発売されたことです。

        2年がかりで、2つのアウトプットを得たことになる。 

<スパン 1. ブログコラム「"老羅のAndroid旅"」の投稿数93、アクセス数1,857,224、コメント数4,156、ポイント数13,440、ランキング154を記録。

<スパン 2. 本書 "Android System Source Code Scenario Analysis" は、大きく3章と16章からなり、830ページと1570000語から構成されています。

        上記の出力は、大多数のユーザーの役に立つだけでなく、私自身、Androidシステムの骨格と脈拍を明確にすることができます。次のステップは、これらの骨格と静脈を要約し、2013年6月3日以降、彼らはどこに行くのだろうか?次の古いLuoも簡単に説明します。

        2011年6月21日にブログを始める前、実は結構な数の本を読んでいた。2011年6月21日以降も、ブログを書きながら、たくさんの本を読みました。長くなるので、メジャーなものと古典を以下のカテゴリーで列挙しておきます。

言語

C++オブジェクトモデル徹底攻略、英語版Inside C+++オブジェクトモデルに対応

プログラムのコンパイル、リンク、ロード

リンカーとローダー、英語版リンカーとローダー対応

プログラマーの独り言:リンク・ロード・ライブラリ編

オペレーティングシステム

Linux Kernel Design and Implementation、英語版「Linux Kernel Development」に対応。

英語版のUnderstanding the Linux Kernelはこちら

Linuxカーネルアーキテクチャの深堀り、英語版Professional Linux Kernel Architectureに対応

Linuxカーネルソースコードシナリオ分析

ネットワーキング

Linux Networking Architecture。Linuxカーネルにおけるネットワークプロトコルの設計と実装』(英語版対応

Understanding LINUX Network Technology Insider, 英語版はUnderstanding Linux Network Internalsです。

デバイスドライバです。

Linux Device Drivers、英語ではLinux Device Driversと表記します。

マスタリングLinuxデバイスドライバ開発』(英語版:Essential Linux Device Drivers

仮想マシン

Java SE 7 仮想マシン仕様

Java仮想マシンを深く掘り下げると、英語版ではInside the Java Virtual Machineとなります

オラクルJRockit。決定版ガイド

埋め込まれています。

組込みLinux開発、英語版「Embedded Linux Primer」対応

英語版は Building Embedded Linux Systems です。

ARMアーキテクチャ。

ARM組込みシステム開発。ARM System Developer's Guideの英語版に対応した「Software Design and Optimization」です。システムソフトウェアの設計と最適化

合成です。

コンピュータシステムの深い理解、英語版Computer Systemsに対応。プログラマーの視点から

        上記の書籍は上級者向けなので、OSの基礎だけでなく、ある程度の言語の基礎も必要です。また、本の読み方については、ラオウがいくつかのアイデアを紹介していますので、参考にしてください。

<スパン 1. 本は使いたいときだけ読むものではなく、よく読み、生涯学び続ける習慣を身につけるものである。

<スパン 2. 今の仕事に関係する本ばかり読んではいけない。IT技術の変化は激しく、東は3〜5年、西は3〜5年。

<スパン 3. 本をたくさん読めば読むほど、読むスピードが上がり、新しいことを学ぶときに気合が入りやすくなります。

Androidアプリの開発については、以下の公式ドキュメントを参照してください。

http://developer.android.com/training/index.html

http://developer.android.com/guide/components/index.html

http://developer.android.com/tools/index.html

        IV. 研究対象コンテンツ

        ブログ全体の内容は、一見ルーズに見えますが、実はすべてAndroidのシステム全体を、一番上のアプリケーション層から一番下のLinuxカーネル層まで貫くことを目標に、整理・計画されています。つまり、このブログのすべての記事は、"に分けることができます。 <スパン 横3本、縦3本 "のように、図2のようになります。


図2 「水平3垂直3」のAndroidシステム研究

        次に、Luoは3つの水平線と垂直線のそれぞれについて説明し、対応するブログ記事へのリンクを示している。

        1.準備 - 準備 - 水平線

        メインは

       (1) 関連書籍を読んで、LinuxカーネルとAndroidアプリケーションの基本を理解する。

Androidラーニングブート編

       (2) Androidのソースコード環境を構築する

Ubuntuに最新のAndroidのソースコードをダウンロード、コンパイル、インストールする

最新のAndroidカーネルソースコード(Linux Kernel)のダウンロード、コンパイル、インストール(Ubuntu版)。

Androidのソースコードに含まれるモジュールを個別にコンパイルする方法

単独で配布可能なAndroidエミュレータの作成

       (3) Androidはスマートポインタを多用するC++のコードが多いので、Androidが提供するC/C++ランタイムフレームワークのスマートポインタを理解することが重要である

Androidのスマートポインタ(軽量ポインタ、強ポインタ、弱ポインタ)実装原理の解析

         2. プロプライエタリドライバ -- 横線

         このProprietary Driversは、Logger、Binder、Ashmemで、Androidシステム全体の根幹となるものです。

        (1) ロガー

 Androidシステム開発におけるLOGの使い方を簡単にご紹介します。

Android ロギングシステム ドライバ ロガー ソースコード解析

Androidアプリケーションフレームワーク層とシステムランタイムライブラリ層のロギングシステムソースコード解析

AndroidロギングシステムLogcatのソースコード概要解析

        (2) バインダー

Androidプロセス間通信(IPC)機構バインダーの概要紹介と学習プラン

Androidプロセス間通信(IPC)のBinderデーモンとしてのService Managerを簡単に紹介します。

Androidのプロセス間通信(IPC)機構BinderでServerとClientのService Managerインターフェースを取得する方法です。

Binder for Androidのプロセス間通信(IPC)機構におけるServer起動処理のソースコード解析

Androidプロセス間通信(IPC)機構Binderにおける、ClientによるServerリモートインターフェイス取得処理のソースコード解析

Androidシステムのプロセス間通信Binder機構のJavaインタフェースをアプリケーションフレームワークレベルで解析したソースコード

        (3) アシュメム

Androidの匿名共有メモリ(Ashmem)の簡単な紹介と学習計画

Android匿名共有メモリドライバのソースコード解析

Android匿名共有メモリ(Ashmem)のプロセス間共有原理の解析

Android Anonymous Shared Memory C++呼び出しインタフェースの解析

        3. ハードウェア抽象化レイヤー -- HAL -- 縦線

        ハードウェア抽象化レイヤーは、Androidの学習ポータルとして最適で、Androidシステムの様々なレイヤーを下から上へとカバーします:。

Android Hardware Abstraction Layer (HAL)の概要と学習計画

UbuntuでAndroid用Linuxカーネルドライバの作成

Ubuntu上でAndroid内蔵C実行ファイルのLinuxカーネルドライバをテストする

Ubuntu上のLinuxカーネルドライバーにアクセスするためのAndroid用HAL(Hardware Abstraction Layer)モジュールの追加

Ubuntu上のAndroid Hardware Abstraction Layer (HAL)モジュールにJNIメソッドを書き、ハードウェアサービスインターフェースへのJavaアクセスを提供する。

Ubuntu上のAndroidのアプリケーションフレームワーク層にハードウェアアクセスサービスを追加する

Ubuntu上のAndroid組み込みJavaアプリケーションのためのApplication Frameworks層のハードウェアサービスのテスト

        4. Application Component -- アプリケーションコンポーネント -- 縦線

        アプリケーションコンポーネントは、Androidの心臓部であり、開発者に親密なサービスを提供します。アプリケーションコンポーネントには、アクティビティ、サービス、ブロードキャストレシーバ、コンテンツプロバイダの4種類があります。アプリケーションコンポーネントの周辺には、アプリケーションプロセス、メッセージループ、インストールという3つの関連モジュールがあります。

       (1)アクティビティ

AndroidアプリケーションのActivity起動過程の簡単な紹介と学習計画

Androidアプリケーションの起動処理に関するソースコード解析

Androidアプリケーション内のActivityを起動する処理(startActivity)のソースコード解析

Androidアプリケーションの新規プロセスでActivityを起動する方法とプロセスの解析

AndroidアプリのコンポーネントActivityの"singleTask"の謎を解き明かす。

       (2) サービス

Androidでカスタムサービスプロセス(startService)を新規プロセスで起動する原理の解析

Androidアプリケーションでサービスをバインドする(bindService)処理のソースコード解析

       (3) ブロードキャストレシーバ

AndroidシステムにおけるBroadcast機構の簡単な紹介と学習計画

AndroidアプリケーションのBroadcastReceiver登録処理の解析

Androidアプリケーションにおけるブロードキャスト送信(sendBroadcast)処理の解析

       (4) コンテンツプロバイダー

Androidアプリケーションコンポーネントの簡単な紹介と学習計画 コンテンツプロバイダ

Androidアプリケーションコンポーネントコンテンツプロバイダー応用例

Androidアプリケーションコンポーネント「Content Provider」の起動処理のソースコード解析

AndroidアプリケーションコンポーネントContent Providerによるアプリケーション間のデータ共有の原理の解析

AndroidアプリコンポーネントContent Providerの共有データ更新通知機構の解析

       (5) プロセス

AndroidシステムプロセスZygote起動プロセスのソースコード解析

Androidアプリケーションプロセス起動処理のソースコード解析

       (6) メッセージループ

Androidアプリケーションのメッセージ処理機構(Looper、Handler)解析

Androidアプリケーションのキーボードメッセージ処理機構解析

Androidアプリのスレッドメッセージループモデル解析

       (7) インストール

Androidアプリインストールプロセスのソースコード解析

Android デフォルトのホームアプリケーション(Launcher)起動処理のソースコード解析

        5. ユーザーインターフェースアーキテクチャ - UI - 縦線

        Lao LuoがAndroid 2.3のUIアーキテクチャをまだ書いているというのは、時代遅れだという意見が強いです。Lao Luoは、このような見方をする人は、まともに考えていないと考えています。Android 4.0からUI部分がより大きく変化したことは、ラオ・ルオも認めている。しかし、これらの変更はAndroid 2.3のUIアーキテクチャの上に行われたものであり、つまりAndroid 2.3のUIアーキテクチャが時代遅れになったわけではないことに留意してほしい。Android 4.0がAndroid 2.3の上にいくつかのfeaturesを追加して、Android 2.3が時代遅れだと言うことはできません。

        以下は、Androidのウェブサイトから引用した最新のUIレンダリングフロー図です。 4.2用UIレンダリングフローチャート : その


図2 Android 4.2のUIレンダリングフロー

        AndroidのUIアーキテクチャは、この図に示すように3つの主要なラインが存在します。

<スパン (1) 各WindowのSurfaceはどのようにレンダリングされるのか?最終的なレンダリングは、SurfaceFlingerに渡されるBufferになり、Displayにコンポジットされます。

<スパン (2) SurfaceFlingerは、各WindowのSurfaceをどのように合成しているのですか?

(3) WindowManamgerServiceはどのようにウィンドウを管理するのですか?

        2.3と4.2の間で(1)と(2)の点が変わっていますが、これは主にGPUサポートの追加によるもので、WindowのSurfaceがレンダリング時にGPUを使用し、SurfaceFlingerが各WindowのSurfaceやOverlay、Blitterのハードウェアアクセラレーションの合成にGPUを使用することになりますが、メインプロセスは変わらず、つまりWindowの表面がレンダリングされてから、合成を行うのはSurfaceFlingerに渡されたままになっていることに変わりはないでしょうか?また、まだ4.2のコードを見始めていないが、4.2のHWComposerは、OverlayとBlitterについては2.3のカプセル化と抽象化、SurfaceTextureと2.3 SurfaceComposerClient, SurfaceControlは同様の役割を担っていることがわかる。また、SurfaceControlも類似しています。ポイント(3)は、後からマルチウィンドウに対応するのでなければ、基本的に変わりません。

        上記の比較は、Android 2.3のUIアーキテクチャは時代遅れではなく、調べる価値があること、そして、2.3をベースに4.2のUIアーキテクチャを調べた方が有益であることを、ひとつだけ強調しています。

        Android 2.3のUIアーキテクチャの説明は以上ですが、それに対する次の分析ラインは、すべて上記の3つのポイントに基づいています。

        1つ目は、ブートアニメーションを入り口にして、Linuxカーネル内のドライバを理解することです。

Androidの起動画面表示処理の解析

        FBドライバは、上記のユーザー空間プログラムがUIを表示するためのグラフィックカードを抽象化するものです。

        HAL層のGrallocモジュールは、SurfaceFlingerがFBドライバにアクセスしやすいように、FBドライバをラップしています。

Androidフレームバッファのハードウェア抽象化レイヤ(HAL)モジュールGrallocの実装原理の解析

        SurfaceFlingerは、アプリケーションの各ウィンドウのUIを構成する、つまり、各ウィンドウのUIを構成し、FBを介して画面上に表示する役割を担っています。SurfaceFlingerを分析する前に、まず、アプリケーションでどのように使用されるかを理解しましょう。

AndroidアプリとSurfaceFlingerサービスの関係の概要と学習計画

AndroidアプリとSurfaceFlingerサービスとの接続過程の分析

AndroidアプリとSurfaceFlingerサービス間の共有UIメタデータ(SharedClient)作成過程の解析

AndroidアプリケーションがSurfaceFlingerサービスにリクエストしてSurfaceを作成する過程の分析

AndroidアプリケーションがSurfaceFlingerサービスに依頼してSurfaceをレンダリングする過程の解析

        すべてのことを考慮した上で、SurfaceFlingerの分析を開始する時が来ました:。

AndroidのSurfaceメカニズム向けサービス「SurfaceFlinger」の簡単な紹介と学習プランの紹介

Android向けSurface機構のサービス「SurfaceFlinger」の起動過程の分析

AndroidシステムのSurface機構のSurfaceFlingerサービスによるFrame Bufferの管理の解析

AndroidのSurface機構向けサービス「SurfaceFlinger」のスレッドモデルの解析

AndroidシステムのSurfaceメカニズムにおけるSurfaceFlingerサービスのレンダリングアプリケーションUIに関する分析

        SurfaceFlingerが操作するオブジェクトはアプリケーション・ウィンドウなので、アプリケーション・ウィンドウの構成を把握するためです。

Androidアプリケーションウィンドウ(Activity)実装フレームワークの簡単な紹介と学習計画

Androidアプリケーションウィンドウ(Activity)のContext作成過程の分析

Androidアプリケーションのウィンドウ(Window)オブジェクトの作成過程の解析(Activity)。

Androidアプリケーションのウィンドウ(Activity)のViewオブジェクトの生成過程の解析

Androidアプリケーションウィンドウ(Activity)とWindowManagerServiceサービスとの接続処理の解析

Androidアプリケーションウィンドウ(Activity)の描画面(Surface)作成処理の解析

Androidアプリケーションのウィンドウの計測、レイアウト、描画処理の解析(アクティビティ)

        アプリケーションウィンドウはWindowManagerServiceによって管理されており、SurfaceFlingerにウィンドウ情報を提供するのはWindowManagerServiceですので、最後にWindowManagerServiceを分析します。

Androidのウィンドウ管理サービスWindowManagerServiceの簡単な紹介と学習プランです。

Androidウィンドウ管理サービスWindowManagerServiceによるActivityウィンドウサイズ算出処理の分析

Android ウィンドウ管理サービス WindowManagerService によるウィンドウの整理方法の分析

Androidのウィンドウ管理サービスWindowManagerServiceによる入力メソッドウィンドウ(Input Method Window)の管理方法の解析

Android のウィンドウ管理サービス WindowManagerService による壁紙ウィンドウの管理に関する分析

Androidのウィンドウ管理サービスWindowManagerServiceによるウィンドウのZ軸位置算出処理の解析

Android WindowManagerServiceによるActivityコンポーネントの開始ウィンドウの表示処理の解析

Android WindowManagerServiceによるアクティビティウィンドウの切り替え(アプリ遷移)処理の解析

Androidのウィンドウ管理サービスWindowManagerServiceがウィンドウのアニメーションを表示する原理の解析

        以上、一通り勉強してみると、AndroidのUIアーキテクチャの骨格が見えてきます。しかし、先ほど勉強したアプリケーションウィンドウはまだ抽象的で、TextViewやSurfaceViewに代表されるアプリケーションウィンドウの中身を構成するUIコントロールがどのように実装されているのかを勉強する必要があります。

AndroidコントロールTextViewの実装原理の解析

AndroidビューSurfaceViewの実装原理解析

        最後に、Androidのリソース管理フレームワークについて触れずに、どうしてUIアーキテクチャを分析できるのでしょうか。これは、コードとUIを効果的に分離するものです。

Androidリソース管理フレームワーク(アセットマネージャー)の簡単な紹介と学習計画

Androidアプリケーションリソースのコンパイルおよびパッケージングプロセスの分析

Androidアプリケーションリソースマネージャー(アセットマネージャー)の作成プロセスの分析

Androidアプリのリソース発見プロセスの分析

        AndroidシステムのUIアーキテクチャの解析はここで行われますが、何かわかりますか?はい、ブートアニメーションを入口にして、Linuxカーネル空間のFBドライバから、ユーザー空間のHAL層モジュールGralloc、C/C++ランタイムフレームワーク層のSurfaceFlinger、Javaランタイムフレームワーク層のWindowMangerService、ウィンドウ、ウィジェット、リソース管理フレームワーク、下から上まで、隠蔽と短剣で対応しました。

        6. Dalvik仮想マシン -- 水平線

        Androidアプリケーションや一部のアプリケーションフレームワークはJava言語で開発され、Dalvik仮想マシンの上で動作していますが、もう一部、C/C++言語で開発されたアプリケーションフレームワークのスピートフルも存在します。Javaランタイムフレームワークと呼ばれるJava言語のラオス羅を使用して開発されたアプリケーションフレームワーク、およびC / C +ランタイムフレームワークと呼ばれるC / C +言語のラオス羅を使用して開発されたアプリケーションフレームワーク、彼らはDalvik仮想マシンで2つに分割されます。これまでの研究を通じて、我々は実際にAndroidのJava Runtime FrameworkとC/C++ Runtime Frameworkをすべて理解したので、最後にDalvik仮想マシンに注目して、次のように説明します。

Dalvik仮想マシンの簡単な紹介と学習計画

Dalvik仮想マシンの起動プロセスの解析

Dalvik仮想マシンの実行プロセスの解析

Dalvik仮想マシンのJNIメソッドの登録過程の解析

Dalvik仮想マシンのプロセスおよびスレッドの作成プロセスの解析

        3つの水平方向と3つの垂直方向の6つのメインスレッドを学んだ後、我々はAndroidシステムを上から下まで、その骨格と血管を整理したと胸を張って言うことができます!

<スパン 準備」「特殊ドライバ」「HAL」「アプリケーションコンポーネント」の4本立て。老羅が強くお勧めするのは、書籍「"Androidシステムソースコード状況分析"」で、内容はブログ記事よりずっと体系的で詳しく、他はもちろん、Binderプロセス間通信機構の章だけでも、お得な内容です。書籍「"Android System Source Code Situation Analysis"」の中で、老羅が最も誇りに思っているのは、第5章のBinderプロセス間通信メカニズムに関するもので、インターネットや他の書籍では、このように詳しい分析情報は絶対に見つけることができないものである。

        V. 今後やるべきこと

        次にやるべきことは、大きく分けて3つあります。

<スパン 1.Androidの作業を継続する

        少し前のGoogle I/OでAndroid 4.3か5.0がリリースされると思っていたら、ラオ・ルオが最新リリースを設計図にして研究していた。新バージョンがリリースされていないので、今は最新リリースの4.2を設計図にして研究するしかない。前述の通り、4.2と2.3の最大の違いは、デフォルトでGPUサポートが追加されたことなので、ラオ・ルオはこれからの期間、4.2のGPUサポートに注目することになる。

<スパン 2. ブログの更新を停止する

        この2年間、ブログにはとても力を入れていて、基本的に徹夜で作業しています。たいていの場合、ひとつのトピックに1週間ほどかけてコードを調べ、さらに4週間ほどかけて記事を書き出す。元々は、書籍 "Android System Source Code Scenario Analysis" の売り上げに頼って、ある程度の金銭的リターンを得て、4.x版のGPUサポートを書き終えて、最後にAndroidシステムのUIアーキテクチャに関する書籍をまとめるまで、ブログに投資を続けるという計画だったのですが、その通りになりました。しかし、最近、この本の売れ行きを聞いてみると、芳しくなく、期待した目標に達しなかったようです。好循環がない以上、ブログの更新を止めるしかない。老羅は他のことにエネルギーを割く必要があるのです!ご理解をお願いします。

<スパン 3.現在も継続的に小さなシェアがあります。

        主に、いくつかのエッセイを共有し、それを人々と議論しやすいWeiboやQQグループに掲載する予定です。また、老羅はオフラインで人々と共有することも喜んでいる。主に企業や単位が主催するサロン、イベント、会議など、また社内で個人的に行うこともある。ただし、もちろん主催者がコラム "Lao Luo's Android Journey" や書籍 "Android System Source Code Scenario Analysis" の内容に興味を持ち、Lao Luoを招待することが大前提となります。

        ラオ・ルオをシェアに招待する必要がある場合は、微博やメールで連絡することができます。2年間、応援していただき、本当にありがとうございました!

<スパン メール:[email protected]

<スパン ツイッター http://weibo.com/shengyangluo