AndroidプラットフォームのLinuxプロセスにどの種類のコードがロードされるのか、私にはよくわかりません。
AndroidがDalvikを採用している場合、プロセスにはDalvik VMとアプリケーションのコードが含まれていますが、コードはDalvikバイトコードの形式ですか?はいの場合、コードは.apkファイルのclasses.dexと同じですか?
AndroidがAndroidランタイム(ART)を採用している場合、classes.dexはネイティブマシンコードに変換されているため、LinuxプロセスでのアプリのコードはDalvikバイトコードではなく、ネイティブマシンコードになると思います。私の理解が正しい場合、Dalvik VMはまだプロセスに含まれていますか?
Android 5.0 (Lollipop)以降、Dalvikはネイティブバイナリを処理するAndroid Runtime (ART)に完全に置き換えられました。
Androidランタイム(ART)は、Android 5.0(APIレベル21)以降を実行するデバイスのデフォルトのランタイムです。
インストール時に、ARTはデバイス上のdex2oatツールを使用してアプリをコンパイルします。このユーティリティはDEXファイルを入力として受け入れ、ターゲットデバイス用にコンパイルされたアプリ実行可能ファイルを生成します
より具体的には、Dalvikは、Dalvikが解釈またはJITコンパイルするために前処理されたdexファイルの最適化バージョンであるodexファイルの使用を促進します。
ARTは、ELFファイルの使用を促進します。ELFファイルは、特定の機能とオブジェクトを、インストール時に実行されるデバイスのネイティブ命令にリンクするための一般的な形式です。
Dalvikとは異なり、ARTは、インストール時にアプリケーション全体をネイティブマシンコードにコンパイルすることにより、事前(AOT)コンパイルの使用を導入します。
ARTは、Dalvikと同じ入力バイトコードを使用し、APKファイルの一部として標準の.dexファイルを介して提供されます。一方、.odexファイルは、実行可能リンク可能形式(ELF)実行可能ファイルに置き換えられます。アプリケーションがARTのデバイス上のdex2oatユーティリティを使用してコンパイルされると、コンパイルされたELF実行可能ファイルからのみ実行されます
Androidは、JavaネイティブインターフェイスにELF .so(共有オブジェクト)ライブラリを使用します。Android 5.0(Lollipop)以降のデフォルトであるAndroidランタイム(ART)では、すべてのアプリケーションがインストール時にネイティブELFバイナリにコンパイルされます。
ARTにはDalvikのインスタンスは含まれておらず、ほとんど互換性がありますが、Dalvikでサポートされている一部の機能はARTでサポートされていないことが言及されています。
ただし、Dalvikで機能する一部の技法は、ARTでは機能しません。このドキュメントでは、ARTと互換性を持つように既存のアプリを移行する際の注意事項について説明します。ほとんどのアプリは、ARTで実行する場合にのみ機能するはずです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加