Jackは、.jack形式の中間ライブラリを使用します。 既存の.aar / .jarファイルのこの形式への変換は、 Jill (Jack Intermediate Library Linker)によって行われます。
ジャックがアセンブリに使用される場合、最初のジルはプロジェクトで使用される外部ライブラリを.jackファイルに変換します。 これにより、次のステップで、ジャックとAndroid Gradleプラグインが以前に準備された.jackファイルとJavaソースコードを使用してDEXファイルをコンパイルするときに、他の.jackファイルとすばやくマージするためのライブラリが準備されます。 このプロセス中に、ジャックはコードを圧縮できます(圧縮、難読化、またはその両方)。 出力は、AndroidアプリケーションのAPKファイルです。
ジャックとジルを使用したアプリケーション構築プロセス
JackとJillは、バージョン21.1.1以降、Android Studioのビルドツールで使用できます。 Android Gradleプラグインは、バージョン1.0.0以降のこれらのツールをサポートしています。 Jackの機能を使用するには、useJack = trueコマンドをbuild.gradleファイルに追加するだけです。
Android SDKマネージャー
コマンドラインの使用
以下のコマンドを使用して、JackとJillの操作の詳細を確認できます。 ここでは、Androidビルドツールバージョン23.0.2に含まれている標準のWindowsコマンドラインインターフェイス、JackおよびJillライブラリを使用します。
これらのツールの一部の機能は、サポートがAndroid Gradleプラグインに含まれる前に、コマンドラインから利用できる場合があります。
ジャックに関するヘルプを取得するためのコマンドは次のとおりです。
java –jar <Android SDK>/build-tools/< Build Tools version>/jack.jar ––help
その実装により、次のことが可能になります。
ジャックヘルプ
そして、あなたはジルをもっとよく知ることができます:
java –jar <Android SDK>/build-tools/< Build Tools version>/jill.jar ––help
ジルヘルプ
ジャックのいくつかの機能
Jackを使用する前に、JackがJava 1.7プログラミング言語をサポートしていることを検討する価値があります。 注釈処理はサポートしていません。
Jackを使用する場合、-config-proguardコマンドラインオプションを使用して、Proguard構成ファイルを転送できます。 再パッケージについて説明する場合、ジャックは「ルール」などのルールと互換性がありますが、「ザップ」や「キープ」などのルールとは互換性がありません。 ルールファイルは、-config-jarjarパラメーターを使用してコマンドラインで指定できます。
Android Gradleプラグインによるジャックのサポートはまだ開発中のため、次の機能と制限を考慮する必要があります。
- 難読化ディレクティブ-applymappingはまだサポートされていません。
- 再パック機能(jarjarツールなど)はまだ統合されていません。
- Jacocoはサポートされていません。
- バイトコード操作はサポートされていません。
- 場合によっては、非常に大きなアプリケーションを構築するときに、メモリ不足例外が発生することがあります。 少なくとも2 GBのRAMを使用するようにビルドシステムを構成すると、問題に対処できます。
dexOptions { javaMaxHeapSize "2048M" }
ビジネスでジャックを試してみましょう。
ジャックと働く
まず、何らかの実験アプリケーションプロジェクトが必要です。 たとえば、サンプルディレクトリからHello JNIプロジェクトをインポートします。 これを行うには、Android Studioでコマンド[ファイル]> [新規]> [サンプルのインポート]を実行します。 表示されるウィンドウで、Hello JNIプロジェクトを見つけ、その名前を選択したら、[次へ]ボタンをクリックします。
こんにちはJNIプロジェクトのインポート
次のウィンドウでは、アプリケーション名(アプリケーション名フィールド)と新しいプロジェクトへのパス(プロジェクトの場所)は変更されません。インポートを完了するには、[完了]ボタンをクリックします。
インポート中に、システムがNDKを見つけられない(Android NDK Locationが指定されていない)というメッセージが表示された場合、Select NDKリンクをクリックし、開いたウィンドウでNDKへのパスを示すことでこれを修正します。 このパスは、ndk.dir = <path_to_ndk>としてlocal.propertiesファイルに書き込まれます。
プロジェクトを正常にインポートした後、プロジェクトビューモードでappフォルダーのbuild.gradleファイルを見つけ、defaultConfig.withでjack enableコマンド(useJack = true)を追加します。
android { compileSdkVersion = 23 buildToolsVersion = "23.0.2" defaultConfig.with { applicationId = "com.example.hellojni" minSdkVersion.apiLevel = 4 targetSdkVersion.apiLevel = 23 useJack = true } }
次に、Asus Fonepad 8タブレット(Intel Atom Z3530 CPU、Android 5.0)でシステムの動作をテストします。
x86デバイスでのアプリケーションのテスト
まとめ
アプリケーションを開発してきたすべての人は、この問題に1秒ごとが重要であることを知っています。 Jackの重要な機能の1つは、 コンパイル時間の短縮です。これは生産性の向上を意味します。 さらに、Android MではJackがデフォルトで使用されています。おそらく、JackとJillがプログラマーの家にゲストを迎えるには、これら2つの事実だけで十分でしょう。