@パベル・ドゥッカ
Jack - コンパイラです。javac に似ていますが、少し異なることを行います。
ご覧のとおり、Jack は Java ソース コードを直接 Dex ファイルにコンパイルします。中間の *.class ファイルはもうないので、dx ツールは必要ありません。
ちょっと待って!自分のプロジェクト (.class ファイルのコレクションとして提供される) にサードパーティ ライブラリを含めるとどうなりますか?
そして、それがジルの出番です:
Jill はクラス ファイルを処理し、Jack コンパイラの入力として使用できる特別な Jayce 形式に変換できます。
それでは、ちょっと脇に置いて考えてみましょう... 私たちが夢中になったすべてのクールなプラグインに何が起こるのでしょうか? それらはすべて.classファイルを必要とし、Jackコンパイラにはそれらがありません...
幸いなことに、ジャックは私たちにとって重要な機能のいくつかをすぐに提供してくれます。
- Retrolambda - 必要ありません。ジャックはラムダを適切に処理できます
- Proguard - 現在は Jack に組み込まれているため、難読化と最小化を引き続き使用できます
利点:
Jack は Java プログラミング言語 1.7 をサポートし、以下に説明する追加機能を統合します。
プレデクシング
JACK ライブラリ ファイルを生成すると、ライブラリの .dex が生成され、プレデックスとして .jack ライブラリ ファイル内に保存されます。コンパイル時に、JACK は各ライブラリの pre-dex を再利用します。すべてのライブラリは事前にデキシングされています。
増分コンパイル
インクリメンタル コンパイルとは、前回のコンパイル以降に変更されたコンポーネントとその依存関係のみが再コンパイルされることを意味します。インクリメンタル コンパイルは、変更がコンポーネントの限られたセットのみに制限されている場合、フル コンパイルよりも大幅に高速になる可能性があります。
再梱包
JACK は jarjar 構成ファイルを使用して再パッケージ化を行います。
マルチデックスのサポート
dex ファイルは 65K メソッドに制限されているため、65K を超えるメソッドを含むアプリは複数の dex ファイルに分割する必要があります。(multidex の詳細については、「65,000 を超えるメソッドを使用したアプリのビルド」を参照してください。)
短所:
- Jack は Transform API をサポートしていません - 変更できる中間の Java バイトコードがないため、ここで言及していないプラグインの一部は機能しなくなります。
- アノテーション処理は現在 Jack ではサポートされていないため、Dagger、AutoValue などのライブラリに大きく依存している場合は、Jack に切り替える前によく考えてください。編集: Jake Wharton が指摘したように、Jack in N Preview は注釈処理をサポートしていますが、Gradle を通じてまだ公開されていません。
- Java バイトコード レベルで動作するリント ディテクターはサポートされていません。
- Jacoco はサポートされていません。個人的に Jacoco は疑わしいと思います (実際に見たいものが表示されません)。
- Dexguard - Proguard のエンタープライズ バージョンは現在サポートされていません