dex

読み:でっくす
外語:dex: Dalvik Executable 英語
品詞:名詞

Androidにおける実行ファイルの一つ。

目次

Android SDKにあるdxというツールでjarからapkを作るが、このとき、jar内にあるclassファイルがdexファイルに変換される。

Androidの仮想マシンDalvikJVMとは異なるため、このようにして変換し、専用の実行形式であるdex(Dalvik Executable)を作成して用いている。

apkやaab

Androidアプリの配布形式であるapkや、Playストアにアップロードする形式であるaab(Android App Bundle)の中にも含まれている。

従って、中を覗けばclasses.dexなどのファイルがあることが確認できる。

oat

Android 5.0以降では新仮想マシンARTが正式採用されており、このためdexはそのままでは使われていない。

アプリインストールの際に事前コンパイラー(Ahead-Of-Timeコンパイラー、AOTコンパイラー)によって.oatファイルへと変換(コンパイル)され、それが用いられる。

ファイルヘッダー

dexファイルは、8バイト形式のシグネチャ(マジックナンバー)が存在する。

例えば、"dex" 0x0a "039" 0x00 = { 0x64 0x65 0x78 0x0a 0x30 0x33 0x39 0x00 } のような形式となっている。

"dex"
このファイルがdexであることを表わす文字列。
0x0a
UNIX形式の改行コード。通信経路(UNIX→DOS)でコード変換が行なわれていないことを確認する。
"039"
dexのバージョンで、次のようなものが既知である
  • "009" ‐ レガシーな形式。Android プラットフォームのM3リリース(2007(平成19)年11月〜12月)で使用された
  • "013" ‐ レガシーな形式。Android プラットフォームのM5リリース(2008(平成20)年2月〜3月)で使用された
  • "035" ‐ 一般的な形式。Android の殆どのバージョンで使用されている
  • "037" ‐ Android 7.0から対応した形式。035とは、デフォルト メソッドの追加と invokeの調整が行なわれている点が異なる
  • "038" ‐ Android 8.0から対応した形式。新しいバイトコード(invoke-polymorphic、invoke-custom)とメソッド ハンドル用データが追加された
  • "039" ‐ Android 9.0から対応した形式。新しいバイトコード(const-method-handle、const-method-type)が導入された。またAndroid 10以降ではブート クラスパス上のDEXファイルにのみ適用される非表示APIの情報も含むよう拡張されている
0x00
NUL末端

アプリをビルドするときのminSdkVersionの違いによって、出力されるdexファイルも変化するものと思われる。

メソッド数の上限とmultidex

dexファイルに含められるメソッドは無符号16ビットの番号で管理されており、つまり65,536個が上限となる。

これはアプリ自体のメソッドだけでなく、使われているライブラリーなどのメソッドも含めた総計である。つまり、androidxに関する各種、material、billing、gsonといったものや、kotlin-stdlib-jdk7やkotlinx関係など、アプリ開発にはほぼ必須と言えるものをimplementationに追加するだけで、65,536個の上限は簡単に超えていく。従って様々なライブラリーを組み込んだ多機能なアプリでは、比較的簡単に上限を突破する。

この解決方法はdexファイルを複数に分割するmultidexである。Android 5.0(APIレベル 21)以上では仮想マシンARTの正式採用とともに標準でmultidexに対応しており、ビルドの際にも自動的に処理されるため、プログラマーも利用者も何も考える必要はない。

Android 5.0よりも前の環境では、別途multidexライブラリーを導入することで制限の回避が可能である。

用語の所属
実行ファイル
Android
関連する用語
apk
multidex

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club