ア | イ | ウ | エ | オ |
カ | キ | ク | ケ | コ |
サ | シ | ス | セ | ソ |
タ | チ | ツ | テ | ト |
ナ | ニ | ヌ | ネ | ノ |
ハ | ヒ | フ | ヘ | ホ |
マ | ミ | ム | メ | モ |
ヤ | ユ | ヨ | ||
ラ | リ | ル | レ | ロ |
ワ | ヰ | ヴ | ヱ | ヲ |
ン |
A | B | C | D | E |
F | G | H | I | J |
K | L | M | N | O |
P | Q | R | S | T |
U | V | W | X | Y |
Z | 数字 | 記号 |
Androidアプリの配布形式であるapkや、Playストアにアップロードする形式であるaab(Android App Bundle)の中にも含まれている。
従って、中を覗けばclasses.dexなどのファイルがあることが確認できる。
Android 5.0以降では新仮想マシンARTが正式採用されており、このためdexはそのままでは使われていない。
アプリインストールの際に事前コンパイラー(Ahead-Of-Timeコンパイラー、AOTコンパイラー)によって.oatファイルへと変換(コンパイル)され、それが用いられる。
dexファイルは、8バイト形式のシグネチャ(マジックナンバー)が存在する。
例えば、"dex" 0x0a "039" 0x00 = { 0x64 0x65 0x78 0x0a 0x30 0x33 0x39 0x00 } のような形式となっている。
アプリをビルドするときのminSdkVersionの違いによって、出力されるdexファイルも変化するものと思われる。
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ライブラリーを導入することで制限の回避が可能である。
コメントなどを投稿するフォームは、日本語対応時のみ表示されます