序文
Androidのアプリケーション層の開発者がAndroidのシステム起動プロセスを理解するためにはAndroidのシステムを理解することは非常に有用です。これは、アプリケーション層の開発者として、あまりにも深く必要はありませんでし把握することは困難であり、実現するためにネイティブC / C ++を含ま細部の多くが、また、ロジック層の前の段階の多くを含んでいます。本論文では、単純に興味を持って友人の具体的な詳細は、独自の研究を進めることができ、Androidシステムの起動プロセスを終了します。
Androidシステムの起動プロセス
Androidシステムの起動処理は、電源ボタンによって起動力から出発し、完了端ランチャーアプリケーションが起動し、概ね次の7つのステップに存在分割することができます。
1、ブートプログラムの実行ブートローダの電源
電源が押されたときに、所定の場所で始まるガイドチップコード(硬化ROMに予め定義された場所)、ブートローダーブートプログラムが実行のためにRAMにロードされます。RAMおよびROMメモリが、前者はリードオンリーMemmoryの略語である、二つの部分であり、定義により、そのようなここで、システムの起動時に必要な情報として、事前に情報の一部を記憶する読み出し専用のメモリです。後者は略、メモリ書き込み、データがプログラム実行中に動的であってもよい書き込みアセス-Memmory読み取られ、システムは、データがクリアされ、オフになっています。
2、ブートローダはプルアップし、オペレーティングシステムを実行します
ブートローダ実行されると、それはプルアップし、オペレーティングシステムを実行します。ブートローダはその役割はプルアップし、オペレーティングシステムを実行することです、ブートローダは、Androidオペレーティングシステムの前にある小さなプログラムが実行されているです。
図3に示すように、オペレーティングシステムは初期化処理を開始します
Linuxカーネルの実装に基づいて、Androidオペレーティングシステムは、ので、この場合にはLinuxのカーネルには、システム設定を開始しました。セットアップシステムが完了すると、それは最初のファイルシステムでinit.rcスクリプトファイルを探して、initプロセスを開始します。
図4は、初期化処理が開始します
initは、あなたがその役割の名前によって判断することができますいくつかの初期化作業を行うことです。:initプロセスは、Androidシステム、最初のユーザ空間のプロセス、プロセス1、Androidシステムは、最初のプロセスとして、それは次のように簡単に要約し、多くの重要な責務を与えられている、起動中に重要なプロセスです
(1)必要なファイル・システム・ディレクトリのブートを作成してマウントします。
(2)初期化し、サービス属性を開始します。ここでは、Windowsオペレーティングシステムレジストリマネージャーのようなサービスの性質は、ユーザー、ソフトウェアなどに関するいくつかの情報を記録するために使用されます。
(3)分析init.rcプロファイルと受精卵のプロセスを開始します。
5、受精卵のプロセスを開始します
受精卵は「受精卵」のための中国語の翻訳は、文字通りの意味から、私たちは一般的にAndroidのシステム内での位置を把握することができ、生活の始まりです。システムの主要サービスSystemServerのDalvik / ART、アプリケーション・プロセスと動作を接合子のプロセスによって作成され、それは一般インキュベータと呼ばれています。多くの作業を受精卵、大きく以下の数で要約:
(1)のDalvik / ARTを作成
(2)層にJavaネイティブフレーム層に入ります。受精卵は、Javaフレームワーク層を作成したことは、このステップを経て、ネイティブJNI層によってmainメソッドのZygoteInitクラスを呼び出す達成されます。接合子パスは:フレームワーク/ベース/コア/ジャワ/ COM /アンドロイド/内部/ OS / ZygoteInit.java
主な方法は、(3)ZygoteInitは、新しいアプリケーション・プロセスを作成するために、AMS受精卵要求を待って、サービスソケットの終わりに作成されます。
mainメソッド(4)の方法が作成され、フォークSystemServerプロセスによって開始されるZygoteInit。
6、SytemServerプロセスが開始
SytemServerサービスは、主にようにAMS、WMS、PMSやなどのシステムサービスを作成するために使用され、システムのキー操作です。その主な責務は以下のとおりです。
(1)スタートバインダースレッドプール。SystemServerバインダーは、他のプロセスと通信するために使用することができるように、バインダースレッドプールを開始達成するために、主にZygoteInit.nativeZygoteInit()メソッドを介して、プロセスを呼び出すこと、ネイティブ層。
(2)SystemServerManager(SSM)を作成し、サービスを開始します。このプロセスが実装SystemServerメインメソッドと呼ばれ、参照はソースの下であってもよいです。システムサービスは、起動およびライフサイクル管理を作成するためのSystemServerManager。三つのカテゴリーにさまざまなサービスガイドサービス、コアサービス、その他のサービスが含まれ、ここで起動します;および他のコアサービスはBatteryServiceが挙げられ、ガイドサービス、AMS、PowerMS、PackageMSなどを含むなど、その他のサービスは、WMSを含め、SystemUIもここに始めました。
1 // ========= ========= SystemServer.java 2 公共 静的 ボイドメイン(文字列[]引数){ 3 新しい新しいSystemServer()RUN();. 。4 } 。5 プライベート ボイドRUN(){ 6 ... 7。 // メッセージルーパーを作成する 8。 Looper.prepareMainLooper(); 9 // 動的ローディングlibandroid_servers.so、初期ネイティブサービス 10 System.loadLibraryを( "android_servers" ) 。11 。 ..... 12 //は、システム・コンテキストの初期化 13である createSystemContext(); 14 //SystemServiceManager作成 15 mSystemServiceManager = 新しい新しいSystemServiceManager(mSystemContext)を、 16 ...... 。17個の // 例えばAMSなどのブート・サービス、等 18はであり ; startBootstrapServices() 19。 // コアサービスを開始し 20である startCoreServices(); 21である // 他のスポーン、WMS、SystemUI等のような 22である (startOtherServices); 23である .... 24 }
特定のサービスを含む、各サービスタイプが、前記最初の行18,20,22を介して、対応するメソッドのソースコード・ビューを入力することができます。
7.スタートランチャー
最後のステップは、このアプリケーションはランチャーであり、システムがインストールされたアプリケーション・システムを表示するアプリケーションを起動する起動することです。このステップは、5話で「接合体プロセスが開始さ」以前のポイントを作成し、新しいアプリケーションを作成するために、AMS受精卵要求を待って、ソケットを作成AMS SystemServerによって開始されます。ランチャー起動プロセスは、ユーザーが、対応するアイコンをクリックしてアプリケーションを起動することができるように、システムの画面上に表示されたショートカットアイコンのリストに情報要求PowerManagerServiceアプリケーションシステムがインストールされている戻り、パッケージ情報になります。結論として、それは二つのことです。
(1)アプリケーションを起動するためのAndroidシステムスターターとして。
デスクトップ、ショートカットアイコンの表示と管理アプリケーションまたは他のデスクトップコンポーネント(2)Androidのシステム。
Androidのシステム起動時のフローチャート
以上の処理によれば、本フローチャートを得ることができます。
エピローグ
この記事では、「Androidの高度な暗号解読」第二章の劉王ジュからコンテンツを整理し、本を読んで行うことができる学習のより深い理解に興味を持っています。この記事は間違ってか、適切な場所を記述した場合、非常に感謝し、私たちに知らせてください。