Android ソースコードをダウンロードして読む

1.AOSPのダウンロード方法

ソース コードのダウンロードは、ソース コードの分析の始まりです。Android のソース コードは、完全にダウンロードすることも、個別にダウンロードすることもできます。

1. フルダウンロード

公式ドキュメント https://source.android.com/source/downloading は、上記の手順に従うだけですが、ウォールをバイパスする必要があるため、中国では直接アクセスできず、Android プロジェクト全体のソースコードが巨大で、ウォールをダウンロードした後でも非常に遅いため、国内のミラーを使用することをお勧めします。

清華大学のオープンソース ミラーをお勧めします。アドレスは https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/ です。完全なチュートリアルもあります。コピー アンド ペーストはしませんが、注意すべき点の 1 つは、比較的大きなディスク (ポストコンパイルを除いて少なくとも 60 G) を準備する必要があることです。

AOSP にはシステムのソースコードだけでなく、aapt や adb などのツールコードも含まれているため、ソースコードを解析するときにすべてのコードが必要というわけではありません。これらはまったく必要ありませんし、システムのソースコードであってもすべてを読み取る必要はありません。

2. シングルダウンロード

正式なアドレスは https://android.googlesource.com/ です。たとえば、platform/frameworks/base/ ディレクトリにコードをダウンロードしたい場合は、git clone https://android.googlesource.com/platform/frameworks/base を実行できますが、それでも壁を乗り越えるという問題が発生します。もちろん、ミラーリングを使用することもできます。

ミラー アドレスは https://aosp.tuna.tsinghua.edu.cn/ です。たとえば、platform/frameworks/base/ ディレクトリをダウンロードしたい場合は、git clone https://aosp.tuna.tsinghua.edu.cn/platform/frameworks/base を使用できます。十分な帯域幅がある場合は、必要な 1 つのソース コードを数分でダウンロードできます。

単一のファイルをダウンロードする場合、またはファイル名とコードを検索する場合は、http://androidxref.com/ にアクセスしてください。ここに Android ソース コードがいくつかあります。

ディレクトリ構造

まず、前の図、Android プロジェクト全体のアーキテクチャ図
ここに画像の説明を挿入

Android システムが上から下に大まかに次の 4 つの層に分かれていることは誰もが知っているので、これらの 4 つの層をベースとして AOSP のディレクトリ構造を説明します。

  • 最初の層: アプリケーション層 (アプリケーション) は、ルート ディレクトリのplatform/packages/appsに対応します。
  • 第 2 層: アプリケーション フレームワーク層 (アプリケーション フレームワーク) は、ルート ディレクトリのプラットフォーム/フレームワークに対応します。
  • 3 番目の層: ランタイム層には、ランタイム (ライブラリ) と Android ランタイム環境 (Android ランタイム) が含まれます。
  • ライブラリに対応するディレクトリは多数ありますが、その中でlibcライブラリはplatform/bionicに対応します。
  • Android ランタイム環境、コア ライブラリはルート ディレクトリのplatform/libcoreに対応し、Dalvik 仮想マシンはルート ディレクトリのplatform/dalvikに対応しますが、現在は ART なので、ディレクトリはplatform/artです
  • 4 番目の層: Linux カーネル層はルート ディレクトリのカーネルに対応し、各ディレクトリはカーネル バージョンに対応します。Android はさまざまなチップと互換性がある必要があるため、次のリストに示します。
  • 金魚プロジェクトには、エミュレートされたプラットフォームのカーネル ソースが含まれています。
  • msm プロジェクトには、ADP1、ADP2、Nexus One、Nexus 4、Nexus 5、Nexus 6、Nexus 5X、Nexus 6P、Nexus 7 (2013)、Pixel、Pixel XL のソース コードが含まれており、Qualcomm MSM チップセットを使用するための開始点として使用できます。
  • omap プロジェクトは PandaBoard および Galaxy Nexus に使用され、TI OMAP チップセットを使用するための開始点として使用できます。
  • samsung プロジェクトは Nexus S 用であり、Samsung Hummingbird チップセットを使用するための開始点として使用できます。
  • tegra プロジェクトは Xoom、Nexus 7 (2012)、Nexus 9 で使用され、NVIDIA Tegra チップセットを使用するための開始点として使用できます。
  • exynos プロジェクトには Nexus 10 のカーネル ソース コードが含まれており、Samsung Exynos チップセットを使用するための開始点として使用できます。
  • x86_64 プロジェクトには Nexus Player のカーネル ソースが含まれており、Intel x86_64 チップセットを使用するための開始点として使用できます。
  • hitey-linaro プロジェクトは HiKey リファレンス ボード用であり、HiSilicon 620 チップセットを使用するための開始点として使用できます。
  • 3 番目と 4 番目の層の中間には、ルート ディレクトリのプラットフォーム/ハードウェアに対応するハードウェア抽象化層 (HAL) もあります。

ダウンロードしたカレントディレクトリは以下の通りです。

git クローン https://aosp.tuna.tsinghua.edu.cn/platform/packages/apps/Launcher2

git クローン https://aosp.tuna.tsinghua.edu.cn/platform/frameworks/base

git クローン https://aosp.tuna.tsinghua.edu.cn/platform/frameworks/native git クローン

https://aosp.tuna.tsinghua.edu.cn/プラットフォーム/システム/コア

git クローン https://aosp.tuna.tsinghua.edu.cn/platform/bionic git

クローン https://aosp.tuna.tsinghua.edu.cn/platform/libcore

git クローン https://aosp.tuna.tsinghua.edu.cn/platform/art

git クローン https://aosp.tuna.tsinghua.edu.cn/kernel/msm

2.AOSPの見方

ソース コードをダウンロードするときに、AOSP ソース コードが多すぎて迷ってしまいますが、ここでいくつかの疑問点を明確にする必要があります。

  • どのようなソースコードを読むべきか
  • ソースコードを読む順番と方法
  • 読むためにどのツールを使用するか

以下では、これら 3 つの質問について 1 つずつ詳しく説明します。

1. どのソースコードを読むべきか

さまざまな人々がさまざまな仕事に従事しているため、この質問はより個人化されています。アプリケーション開発に従事していて Java 層に興味がある人もいれば、フレームワーク開発に従事していてフレームワーク層に興味がある人もいるし、ハードウェア開発に従事していて基礎となる実装に興味がある人もいます。

これは人によって異なりますが、ただ 1 つだけ、「ソースコードをむやみやたらに見るのはだめです。そうしてしまうと、最終的には AOSP の海に沈んでしまうからです。1 年半すべて見ても、まだ最後まで見通せていないと感じます。ソースコードについて質問されると、1 つか 2 つは教えてもらえますが、深く掘り下げると、理由がわかりません。」

つまり、AOSP のソース コードは、たくさんあるということではなく、本質が重要です。すべてのソース コードを理解しようとせず、興味のある部分だけを勉強してください。Google のエンジニアでも AOSP のすべてを読むことはできないからです。

私の場合、アプリケーション層の開発に従事しており、主に以下の側面のソースコードを理解します。

  • Android システムの起動プロセス、アプリケーションの起動プロセス、4 つの主要コンポーネントの起動プロセス。これらはシステム起動の章に含まれます。
  • システムで一般的に使用されるサービスは、ActivityManagerService、WindowManagerService などです。これらは、システム サービスの章に含まれます。
  • 通信メカニズム (主に Binder と Handler)。これは通信の章に含まれます。
  • プロセスとスレッドの作成、操作、破棄はプロセスの章に含まれます。
  • View の描画および表示プロセス、イベント配布メカニズム。これはグラフィックス描画の章に含まれます。
  • Android 仮想マシンの ART 操作メカニズム、クラスロードメカニズム、Java アノテーション、Java リフレクション。これらは仮想マシンの章に含まれます。
  • Java コレクション用の Android の最適化アルゴリズム (Java Basics に含まれる予定)

2. ソースコードを読む順番と方法

2.1 読む順番

ソースコードを読むというのは時間の積み重ねであり、一朝一夕にできるものではないので、興味のあるソースコードをリストアップしたら、次に読む計画を立てて、最初に読むものを読む必要があります。これも人によって違いますし、自分の興味にもよりますが、一番読みたい人はトップに立つことになります。

「興味は最高の教師だからです。興味があるからこそ、学習や研究の意欲も湧いてきますし、疲れも感じません。興味のないものを最初からかじってしまうと、最後には退屈で集中できなくなります。理解度も深くなく、自信を失って最後には読むのを諦めてしまうかもしれません。」

もちろん、いくつかのことに興味がある場合は、いくつかの原則があります。

  • 物事には優先順位があり、木が大地に根付くように、大地が先にあって木がある、基本的なことが先である。
  • 関連するものをまとめて見て、しばらくシステム起動を見ずに、急にイベント配信とか見てみる

2.2 読み取り方法

Android システムは、上位アプリケーションからフレームワーク、ライブラリ、さらには Java レイヤーから C++ までのハードウェアに至るまで幅広くカバーしており、数十階建てのビルのように、各階には階段とエレベーターがあり、ビル内を往復するだけで済みます。

あるナレッジポイントのソースコードを読むとき、ナレッジポイントごとに読み取り方法が異なり、システム起動プロセスなど下から上に読むのに適したものもありますが、私はイベントの先頭からinit.cpp、zygoteプロセス、Java仮想マシン、最後にLuncherまで読み始めます。

上から下への読み取りに適したものもあります。たとえば、Activity の開始では、startActivity メソッドから読み取りを開始し、ActivityThread、ActivityManagerService と続きます。

Binderなど両端の真ん中から読み込むのに適したものもありますが、Java層からC++層は見えるのですが、ドライバが見えません。

ここにはまだ良い方法があります。つまり、イベントがトリガーされる場所から開始する方が適切です。

3. 読書にどのようなツールを使用しますか

Android のソース コード読み取りアーティファクトは、もちろん Source Insight です
ここに画像の説明を挿入

Source Insight の利点:

  • メソッド ジャンプ、クラス ジャンプをサポートし、C++ を非常によくサポートします。
  • ファイル検索、Java、C++、XML のすべてのサポート、およびコンテンツ検索のサポート
  • ワンクリックインポートをサポートし、いつでもパスを設定できます
  • そして最も重要なのは、インポートされたファイルが多数ある場合でもスタックしないことです。

Source Insight の使用方法について説明します

3.1 Source Insight をダウンロードしてインストールする

Baidu 自体、および Source Insight は Android Studio と同じ Darcula テーマで構成することもできますが、これは別途ダウンロードする必要があります。

3.2 AOSP ソースコードのインポート

まだ完全な AOSP ソース コードをダウンロードしていませんが、最初に重要なソース コードをいくつかダウンロードしました。Source Insight を開き、[プロジェクト] -> [新しいプロジェクト] を選択し、AOSP などの名前を付けて、[OK] をクリックします。

表示するソース コード ディレクトリを選択し、[OK] をクリックします。

ソースコードをインポートする必要があるディレクトリを選択し、「ツリーの追加」をクリックします

インポートが成功すると、以下に多数のファイルがリストされます。「閉じる」をクリックします。

3.3 ソースコードを表示する

プロジェクトを入力するとまだ空白です。ツールバーを開く必要があります。そうすれば、ソース コードを表示できます。

左側はメソッドとメンバー変数の検索、右側はプロジェクトファイルの検索クラス名、プロジェクトシンボルのコンテンツ検索です。

また、Ctrl + 左キーでジャンプ、Alt +、戻る、Alt + . などのショートカット キーもあり、Ctrl + G で指定した行にジャンプ、Ctrl + F でコンテンツを検索します。ジャンプできないメソッドに遭遇する場合があります。その場合は、図に示すように、[プロジェクト] をクリックし、[ファイルの同期] を選択し、グローバル関連付けを選択する必要があります。

ここでは、インポートするファイルが多すぎないように注意する必要があります。多すぎると同期が失敗します。いくつかのディレクトリを選択してインポートできます。

ソース コードをインポートするとき、一部のコンパイルされたソース コード (.s または .S で終わる) をインポートできないことがあります。このときは、図に示すように、[オプション] をクリックし、[ファイル タイプ オプション] を選択して、C/C++ に .s および .S のサポートを追加して、[閉じる] をクリックする必要があります。

次に、いくつかのディレクトリを再度追加し、「プロジェクト」をクリックし、「プロジェクト ファイルの追加と削除」を選択し、対応するディレクトリを選択します。「ツリーの追加」を選択します。また、「ツリーの削除」を選択して、対応するディレクトリのソース コードを削除することもできます。操作は次のとおりです。

3. その他

Android のソース コードを実際に読み始める前に、ソース コードの核心部分は C/C++ で書かれているため、C/C++ の文法の知識を理解しておくことが最善です。基本的な文法を知らないと混乱するでしょう。ここでは、「C 標準ライブラリ 中国語版」と「C++ 標準ライブラリ 中国語版 2」の 2 冊の本をお勧めします。その他の学習 Web サイトおすすめです

おすすめ

転載: blog.csdn.net/shanshui911587154/article/details/129669609