Проект компилятора Java для Android Jack & Jill от Google мертв


В неожиданном объявлении команда разработчиков Android дала понять, что новый компилятор Jack и компоновщик Jill никуда не денутся. Теперь переход на Java 8 будет осуществляться путем разработки существующего компилятора javac.

Создавая Android, Google развил экосистему Java, что бы они ни утверждали об обратном. Он использовал несовместимую виртуальную машину Dalvik, которая запускает не-Java байт-код под названием dex. Чтобы запустить Java на Dalvik, вы сначала скомпилируете программу обычным способом, а затем используете dx для перевода байтового кода Java в dex. Начиная с Android 4.4 (Kitkat) виртуальная машина Dalvik была заменена ART, Android RunTime, но она по-прежнему запускает код dex.
У этого двухэтапного преобразования байтового кода Java в Java, а затем из байтового кода в процесс dex были свои проблемы, и в 2012 году был объявлен проект Джека или, если хотите, «эксперимент». Он состоял из нового компилятора, который брал код Java и преобразовывал его непосредственно в dex. Попутно идея заключалась в том, что последние инновации Java могут быть включены в Java 8, и Джек был способом поддерживать Java Android в актуальном состоянии с остальным миром Java. Отсутствие функций Java 8 не является большой проблемой, но это означает, что программисты Android не могут использовать лямбды, скажем, для обработки событий.
Преимущество использования Джека:

Полностью открытый исходный код
Ускоряет время компиляции У Джека есть специальные средства поддержки для сокращения времени компиляции: предварительная обработка, инкрементная компиляция и сервер компиляции Джека.
Обрабатывает сжатие, обфускацию, переупаковку и мультидексирование. Использование отдельного пакета, такого как ProGuard, больше не требуется.

Цель Джилл, помимо того, что она является второй половиной хорошей шутки, состоит в том, чтобы преобразовать существующие библиотеки jar в новый формат библиотеки jack.
Однако у этого подхода были некоторые проблемы. Одна практическая проблема заключалась в том, что он не был хорошо интегрирован с Android Studio, поэтому даже сейчас многие программисты не используют цепочку инструментов Jack. Он также не поддерживал функцию мгновенного запуска последней версии Android Studio, которая позволяла запускать приложения, применяя инкрементальные изменения, а не загружая каждый раз весь APK. В дополнение ко всему этому оказывается, что иногда полезно иметь байт-код Java в качестве промежуточного звена, потому что с ним работают многие инструменты, процессоры аннотаций, анализаторы байт-кода и перезаписчики. Если Android перейдет на Jack, тогда все инструменты, которые работают с байтовым кодом до его компиляции в dex, больше не будут доступны.
В сообщении в блоге утверждается, что именно по этой причине цепочка инструментов Jack устарела.
Итак, как мы собираемся внедрить Java 8 в Android?
«Мы решили добавить поддержку функций языка Java 8 непосредственно в текущий набор инструментов javac и dx и исключить набор инструментов Jack. В этом новом направлении существующие инструменты и плагины, зависящие от формата файла класса Java, должны продолжать работать. . В будущем функции языка Java 8 будут изначально поддерживаться системой сборки Android. Мы планируем запустить это как часть Android Studio в ближайшие недели, и мы хотели бы сообщить вам об этом решении заранее ».
О, хорошо, еще одно серьезное изменение в ландшафте Android Studio. Было бы неплохо иметь лямбды, но оно того стоит?
Между строк должно произойти следующее: компилятор dx должен быть расширен для отображения новых функций Java из 8-байтового кода Java в dex. Учитывая степень обратной совместимости, которую поддерживает Java, большая проблема, вероятно, будет заключаться в ограниченном наборе байтового кода, который dx может преобразовать в dex. Однако при переходе с Java 7 на 8 есть изменения в байтовом коде.
Все это звучит очень разумно, за исключением, конечно, того факта, что Java 9 уже не за горами, и много времени было потрачено впустую на эксперимент Джека и Джилл.
Конечно, существует вероятность того, что отключение набора инструментов Джека как-то связано с юридическими проблемами, которые возникают у Google с Oracle, но на первый взгляд кажется, что возвращение к зависимости от javac только ухудшает положение, а не улучшает его .
Один тревожный аспект заключается в том, что причина отказа от Джека и Джилл, приведенная сейчас, была совершенно ясна в начале проекта. Это наводит на мысль, что, возможно, всем Android-предприятием управляет не всезнающий гений.
Столько времени потрачено зря, а лямбд все еще нет.

Майк Джеймс является автором книги «Программирование Android: начиная с приложения» (I / O Press), которая представляет собой руководство для начинающих по использованию Android Studio. В настоящее время он обновляет это для Android Studio 2.3, выпущенного ранее в этом месяце. Программирование на Android: запуск с приложением, второе издание (I / O Press) ISBN: 978-1871962512


Добавить комментарий