x86でジャックとジルに会う

Jack (Java Android Compiler Kit)は、JavaソースコードをAndroid DEXファイルに変換するコンパイラーです。 ジャックは、その機能の中で、再パッケージ化、圧縮、難読化、および複数のDEXファイルのサポートという一連のツールです。



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プラグインによるジャックのサポートはまだ開発中のため、次の機能と制限を考慮する必要があります。





 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つの事実だけで十分でしょう。



All Articles