Android 研究ノート 1.4 Android プラットフォームのアーキテクチャ


1. 学習目標

1. Android プラットフォームのアーキテクチャを理解する
2. Android デバイスのファイル ブラウザに精通する
3. Android デバッグ ブリッジを使用できるようにする

2. 新しいコースの学習

(1) プラットフォームアーキテクチャの簡単な説明

  • Android は Linux をベースとしたオープンソース ソフトウェア スタックであり、そのプラットフォーム アーキテクチャは次の図に示されています。
    ここに画像の説明を挿入します

  • Android システムは、明確なアーキテクチャ、明確なレイヤー、共同作業を備えたレイヤード アーキテクチャのアイデアを採用しています。Android のシステム アーキテクチャは、Android システムをマクロな観点から理解するだけでなく、私たちの学習と実践の方向性を示してくれます。Android アプリケーション開発に従事している場合は、Android アプリケーション フレームワーク層とアプリケーション層を学習し、Android システム開発に従事している場合は、Android システム ライブラリと Android ランタイムを学習し、Android ドライバー開発に従事している場合は、 Android Linux カーネルを勉強する必要があります。つまり、正しい入り口を見つけて練習し、真の知識を獲得してください。

1. Linuxカーネル

  • Android プラットフォームの基盤は Linux カーネルです。たとえば、Android ランタイム (ART) は、Linux カーネルに依存して、スレッドや低レベルのメモリ管理などの低レベルの機能を実行します。
  • Linux カーネルを使用すると、Android で主要なセキュリティ機能を利用できるようになり、デバイス メーカーが有名なカーネル用のハードウェア ドライバーを開発できるようになります。

2. ハードウェア抽象化レイヤー

  • ハードウェア抽象化レイヤー (HAL) は、デバイスのハードウェア機能を高レベルの Java API フレームワークに公開する標準インターフェイスを提供します。HAL はいくつかのライブラリ モジュールで構成されており、各ライブラリ モジュールはカメラや Bluetooth モジュールなど、特定のタイプのハードウェア コンポーネント用のインターフェイスを実装しています。フレームワーク API がデバイス ハードウェアへのアクセスを必要とする場合、Android システムはそのハードウェア コンポーネントのライブラリ モジュールを読み込みます。

3. Android ランタイム

  • Android 5.0 (API レベル 21) 以降を実行しているデバイスの場合、各アプリは独自のプロセスで実行され、Android ランタイム (ART) の独自のインスタンスがあります。ART は、Android 専用に設計され、使用するメモリが非常に少ないように最適化されたバイトコード形式である DEX ファイルを実行することにより、メモリの少ないデバイス上で複数の仮想マシンを実行するように作成されています。コンパイル ツールチェーン (Jack など) は、Java ソース コードを DEX バイトコードにコンパイルし、Android プラットフォームで実行できるようにします。
  • Android バージョン 5.0 (API レベル 21) より前は、Dalvik が Android ランタイムでした。アプリが ART でうまく動作する場合は、Dalvik でも動作するはずですが、必ずしもその逆ではありません。
  • Android には、一部の Java 8 言語機能を含む、Java API フレームワークで使用される Java プログラミング言語のほとんどの機能を提供するランタイム ライブラリのコア セットも含まれています。

4. ネイティブ C/C++ ライブラリ

  • ART や HAL など、多くのコア Android システム コンポーネントとサービスはネイティブ コードから構築されており、C や C++ で書かれたネイティブ ライブラリが必要です。Android プラットフォームは、一部のネイティブ ライブラリの機能をアプリケーションに公開する Java フレームワーク API を提供します。たとえば、Android フレームワークの Java OpenGL API を介して OpenGL ES にアクセスし、アプリケーションでの 2D および 3D グラフィックスの描画と操作をサポートできます。
  • C または C++ コードを必要とするアプリケーションを開発している場合は、Android NDK を使用して、ネイティブ コードから特定のネイティブ プラットフォーム ライブラリに直接アクセスできます。

5. Java APIフレームワーク

  • Java 言語で記述された API を通じて、Android OS の機能セット全体を使用できます。これらの API は、Android アプリの作成に必要な構成要素を形成し、次のようなコアのモジュラー システム コンポーネントとサービスの再利用を簡素化します。 リスト、グリッド、テキスト ボックス、ボタンなど、アプリの UI を構築するための豊富で拡張可能なビュー システム埋め込み可能な Web ブラウザー、ローカライズされた文字列、グラフィックス、レイアウト ファイルなどの非コード リソースにアクセスするリソース マネージャー、すべてのアプリをステータス バーに表示する通知マネージャー、カスタム リマインダーを表示、アプリのライフサイクルを管理し、共通のナビゲーション バックスタックを提供するアクティビティ マネージャー; コンテンツ プロバイダー。アプリが他のアプリ (連絡先アプリなど) のデータにアクセスしたり、独自のデータを共有したりできるようにします。開発者は、Android システム アプリケーションで使用されるフレームワーク API に完全にアクセスできます。

6. システム適用

  • Android には、電子メール、テキスト メッセージング、カレンダー、インターネット ブラウジング、連絡先などのアプリのコア セットが付属しています。プラットフォームに付属するアプリは、ユーザーがインストールを選択できるアプリと同様であり、特別なステータスはありません。そのため、サードパーティのアプリは、ユーザーのデフォルトの Web ブラウザー、SMS メッセンジャー、さらにはデフォルトのキーボードになる可能性があります (システムの設定アプリなどの一部の例外を除きます)。
  • システム アプリはユーザーのアプリとして機能するだけでなく、開発者が独自のアプリからアクセスできる主要な機能も提供します。たとえば、アプリがテキスト メッセージを送信する場合、その機能を自分で構築する必要はなく、代わりにインストールされた SMS アプリを呼び出して、指定した受信者にメッセージを送信できます。

(2) Android端末のファイルブラウザ

  • 新しいバージョンの Android Studio はAndroid Device Monitorメニュー バーから削除されました。接続されている Android デバイスのファイルを表示したい場合は、Device File Explorer を使用する必要があります。

1.1 デバイスファイルブラウザを起動する

  • 单击見る | ツールウィンドウ | デバイス ファイル エクスプローラー
    ここに画像の説明を挿入します
    ここに画像の説明を挿入します
  • SDカード: セキュアデジタルカード
  • パーミッション: 10 ビットパーミッション文字、
    1 ビット: ファイルタイプ ( d: ディレクトリ; l: リンクリンク; -: 通常ファイル)
    234 ビット: ファイル所有者 (所有者/ユーザー) のパーミッションを示します ( r——読み取り; w——書き込み; x— — 実行)
    567 ビット: ユーザー グループ メンバー (グループ) の権限を示します ( r——読み取り; w——書き込み; x——実行)
    8910 ビット: 非ユーザー グループ メンバー (その他) の権限を示します ( —r読み取り; w— —書き込み) ; x——実行)
    2 桁目から 10 桁目までの「-」は、この権限がないことを意味します。

2. メモリディレクトリを表示する

  • クリックして開きdata/data、実行している Android プログラムを見つけますnet.xqf.test
    ここに画像の説明を挿入します

3. 外部メモリカードを確認します

  • クリックして開きますsdcard
    ここに画像の説明を挿入します
  • 音楽プレーヤーを開発し、メモリ カード上のオーディオ ファイルを再生したい場合は、オーディオ ファイルをMusicディレクトリにアップロードできます。
    ここに画像の説明を挿入します

(3) Android デバッグブリッジ

  • ADB (Android Debug Bridge) ツールを使用すると、デバイスまたはモバイル エミュレーターのステータスを管理できます。ソフトウェアのインストール、システムのアップグレード、shelI コマンドの実行など、多くの携帯電話の操作を実行することもできます。簡単に言うと、これは Android スマートフォンと PC を接続するブリッジであり、ユーザーはコンピューター上でスマートフォンを完全に操作できるようになります。
  • adb.exeの場所を確認してください
    ここに画像の説明を挿入します

1. 接続されているデバイスを表示する

  • 注文の実行:adb devices
    ここに画像の説明を挿入します

2. デバイスの接続状態を確認する

  • 注文の実行adb get-state
    ここに画像の説明を挿入します
  • 結果には 3 つの状況が考えられます。オフライン - デバイスの接続が異常、デバイス - 正常、不明 - デバイスが接続されていません。
  • シミュレータを閉じてこのコマンドを再度実行すると、エラーが報告されます。

3. 携帯電話のログを表示する

  • Ctrl+C を押すと、ラジオ、システム、メイン、イベントなど、携帯電話の 4 つのバッファ ログを表示できます。ラジオは、通話テキスト メッセージなどの通信ログを保存します。イベントは、携帯電話などのイベント ログを指します。キー出力など、メインとは携帯電話アプリケーションソフトウェアのログはアプリケーション層のログ出力、システムはシステムコンポーネントのログを指します。
  • 注文の実行:adb logcat
    ここに画像の説明を挿入します

4. すべてのアプリケーション パッケージ名を表示する

  • 注文の実行:adb shell pm list packages
    ここに画像の説明を挿入します
    ここに画像の説明を挿入します

5. シェル状態に入る

  • Android は Linux カーネルをベースにしているため、Linux コマンドをシェル状態で使用できます。
  • 注文の実行:adb shell
    ここに画像の説明を挿入します
  • 注文の実行:ls
    ここに画像の説明を挿入します
  • /data/data ディレクトリに入ります
    ここに画像の説明を挿入します
  • 注文の実行:ls
    ここに画像の説明を挿入します
  • exitコマンドを実行してadbシェルを終了します。
    ここに画像の説明を挿入します
  • 解像度を確認するには、次のコマンドを実行します。adb shell wm size
    ここに画像の説明を挿入します
  • バッテリー情報を出力し、コマンドを実行します。adb shell dumosys battery
    ここに画像の説明を挿入します
  • システムのバージョン番号を取得し、次のコマンドを実行します。adb shell getprop ro.build.version.release
    ここに画像の説明を挿入します

6. サービスプロセスを強制終了します。

  • 注文の実行:adb kill-serverここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/qq_41301333/article/details/127788394