56

私はapkがAndroidにどのようにインストールされるか、具体的にはadb install(テストしているところ)を介してAndroidSDKエミュレーターをインストールするプロセスを理解しようとしています。

検索したところ、「apkは/ data / appにコピーされ、実行時にインストールされます。apkのアイコンがメニューにどのように表示されるかを説明していないため、満足のいく答えは見つかりませんでした。問題。

Windowsのバックグラウンドから来て、.exeまたはインストーラーを実行してプログラムをインストールすると、レジストリ、ファイル、サービスなどが変更されます。Androidにapkをインストールしたときに、これまたは同様のことが発生するかどうかを理解する必要があります。

だから誰かが私にapkがAndroidにインストールされたときに具体的に何が起こるかを説明することができれば私はそれを大いに感謝します。

ちなみに、Dalvik VM " zygote"がインストールに関与しているかどうか、またはそれが下位のLinuxカーネルレベルで発生しているかどうかも知りたいですか?

ここでの私の最終的な目標は、straceを使用して、apkのインストールプロセスをキャプチャし、システムの変更、ファイルの作成、ネットワークアクティビティ、およびその他の関心のあるイベントを文書化することです。

4

4 に答える 4

38

Android アプリケーションには、主に 2 つのカテゴリがあります。

  1. システム アプリ: システムの初期化時にインストールされます
  2. ユーザー アプリ: ADB を使用するか、SD カードに .apk ファイルをコピーして、Play ストアからインストールします。

以下は、ステップバイステップのインストールプロセスです。

  1. AndroidManifest.xml が解析され、情報が抽出されて /data/system/packages.xml および /data/system/packages.list に保存されます
  2. .apk ファイルが特定のディレクトリにコピーされ、データ ストレージ用のディレクトリがこのアプリ用に作成されます

XML 解析、リソース分析、および .apk ファイルのコピーは、

PackageManageService.java

ただし、ディレクトリの作成は

installd.c

PackageManageService.java は、/dev/socket/installed にあるローカル ソケット経由で installd.c と通信します。

システムアプリとユーザーアプリでは、.apkファイルをコピーしたパッケージが異なります。システムアプリの場合

/システム/アプリ/

ユーザーアプリの.apkファイルは.apkファイルにコピーされますが、

/データ/アプリ

.apk ファイルから抽出された .dex ファイルは、/data/dalvik-cache/ にコピーされます。

Package Manager はデータ ディレクトリ /data/data// を作成し、データベース、共有設定、ネイティブ ライブラリ、およびキャッシュ データを保存します

于 2015-08-18T08:46:12.997 に答える
12

あなたが知りたいことはすべて、Android 開発者の Web サイトhttp://developer.android.com/tools/building/index.htmlにあると思います。アプリ自体のパッケージングを理解するには、こちらの画像の方が優れています (そうではありません)。 APK のインストール プロセスを説明しますが、apk の構造とインストールを理解するのに役立ちます)。classes.dex はアプリケーションの下位構造であり、コンパイルされた Java とクラスが含まれているため、aapt ツールと .dex についてグーグルで検索することもできます。1 つの dex ファイルには、その 1 つのクラスのみを含む Java クラス ファイルとは対照的に、複数のクラスが含まれます。dex ファイルは、Android SDK の不可欠な部分である DX ツールで変換された Java バイトコードです。その結果、Dalvik 仮想マシンの独自のインスタンスを使用して、すべてのアプリケーションを独自のプロセスとして実行できます。 APK

于 2012-09-16T01:23:44.787 に答える
-1

これは 2 つのレベルで行われます。 1.) PackageManagerService を使用する PackageInstaller(UI) (システム サービス) がコマンドを 2 番目の部分 (Installd) に送信します。 2.) Installd は実際に apk をインストールするデーモンです。Installd と PackageManagerService は、ソケット通信を使用して通信します。使用されるソケットは、それ自体がインストールされます。init でのソケットの作成については、init.rc を参照できます。

于 2016-06-23T11:35:25.807 に答える