Pull to refresh
0

Знакомьтесь: Jack и Jill на платформе x86

Reading time3 min
Views13K
Original author: Денис Смирнов
Jack (Java Android Compiler Kit) – это компилятор, преобразующий исходный код на Java в DEX-файлы Android. Jack – это набор инструментов, среди его возможностей – переупаковка, сжатие, обфускация и поддержка множественных DEX-файлов.

В Jack используются промежуточные библиотеки в формате .jack. Преобразованием существующих .aar/.jar файлов в этот формат занимается Jill (Jack Intermediate Library Linker).



Если для сборки используется Jack, то сначала Jill конвертирует внешние библиотеки, используемые в проекте, в .jack-файлы. Это подготавливает библиотеки к быстрому слиянию с другими .jack-файлами на следующем этапе, когда Jack и плагин Android Gradle, используя подготовленные ранее.jack-файлы и исходный Java-код, компилируют DEX-файл (или файлы). В ходе этого процесса Jack может выполнить минификацию кода (сжатие, обфускацию, или и то и другое вместе). На выходе получается APK-файл Android-приложения.


Процесс сборки приложения с использованием Jack и Jill

Jack и Jill доступны в Build Tools для Android Studio начиная с версии 21.1.1. Плагин Android Gradle поддерживает эти инструменты, начиная с версии 1.0.0. Для того чтобы задействовать возможности Jack, достаточно добавить в файл build.gradle команду useJack=true.


Android SDK Manager

Использование командной строки


Узнать подробности о работе с Jack и Jill можно с помощью команд, приведённых ниже. Здесь мы пользуемся стандартным интерфейсом командной строки Windows, библиотеками Jack и Jill, включёнными в состав Android Build Tools версии 23.0.2.
Некоторые возможности этих инструментов могут быть доступны из командной строки раньше, чем их поддержка будет включена в плагин Android Gradle.

Итак, вот команда для получения справки по Jack:

java –jar <Android SDK>/build-tools/< Build Tools version>/jack.jar ––help

Её выполнение даёт нам следующее:


Справка по Jack

А вот так можно поближе познакомиться с Jill:

java –jar <Android SDK>/build-tools/< Build Tools version>/jill.jar ––help



Справка по Jill

Некоторые особенности Jack


Прежде чем приступать к работе с Jack, стоит учесть, что он поддерживает язык программирования Java 1.7. и не поддерживает обработку аннотаций.

При использовании Jack, ему можно передавать конфигурационные файлы Proguard с помощью параметра командной строки ––config-proguard. Если говорить о переупаковке, то Jack совместим с правилами типа «rule», но не с правилами типа «zap» или «keep». Файлы правил можно указывать в командной строке с использованием параметра –– config-jarjar.

Поддержка Jack плагином Android Gradle всё ещё в процессе разработки, поэтому стоит учесть следующие особенности и ограничения:

  • Директива обфускации –applymapping ещё не поддерживается.
  • Возможность переупаковки (вроде инструмента jarjar) пока не интегрирована.
  • Средство Jacoco не поддерживается.
  • Манипуляции с байт-кодом не поддерживаются.
  • В некоторых случаях, при сборке очень больших приложений, можно столкнуться с исключением Out Of Memory. Справиться с проблемой можно, если настроить систему сборки на использование, как минимум, 2 Гб оперативной памяти:

dexOptions { javaMaxHeapSize "2048M" }

Попробуем Jack в деле.

Работа с Jack


Для начала нам понадобится какой-нибудь проект приложения для экспериментов. Например, импортируем из каталога примеров проект Hello JNI. Для этого выполним в Android Studio команду File > New > Import Sample. В появившемся окне найдём проект Hello JNI, и, выделив его название, нажмём на кнопку Next.


Проект Hello JNI для импорта

В следующем окне имя приложения (поле Application name) и путь к новому проекту (Project location) менять не будем, и, для завершения импорта, нажмём на кнопку Finish.

Если в ходе импорта появится сообщение о том, что системе не удаётся найти NDK (Android NDK Location is not specified), исправьте это, щёлкнув по ссылке Select NDK и указав в открывшемся окне путь к NDK. Этот путь будет записан в файл local.properties в виде ndk.dir=<path_to_ndk>.

После успешного импорта проекта найдём в режиме просмотра Project, в папке app, файл build.gradle и добавим в defaultConfig.with команду включения jack (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 (CPU Intel Atom Z3530, Android 5.0).


Тестовое приложение на x86-устройстве

Итоги


Каждый, кто занимался разработкой приложений, знает, что в этом деле на счету каждая секунда. Одна из важных особенностей Jack – это сокращение времени компиляции, а значит – повышение производительности труда. Кроме того, Jack по умолчанию используется в Android M. Пожалуй, только этих двух фактов достаточно для того, чтобы сделать Jack и Jill желанными гостями в доме любого программиста.
Tags:
Hubs:
Total votes 18: ↑17 and ↓1+16
Comments5

Articles

Information

Website
www.intel.ru
Registered
Founded
Employees
5,001–10,000 employees
Location
США
Representative
Анастасия Казантаева