Как мы знаем в Android Studio 2.2 появилось множество улучшений и новшеств.

Некоторые из этих изменений легко не заметить, потому что они оказались под капотом в плагине Android Gradle. Например, заново переписан уровень упаковки и подписания APK.

Схема подписи APK версия 2

С введением новой схемы подписи APK Signature Scheme v2 в Android 7.0 Nougat разработчики полностью переписали сборку APK в плагине Android Gradle.

Подробности низкого уровня вы можете прочитать в документации, а здесь мы дадим краткую tl;dr справку об этом для Android разработчиков:

  • Криптографическая подпись APK, которая используется для проверки целостности в настоящее время находится непосредственно перед секцией ZIP Central Directory.
  • Подпись вычисляется и верифицирует двоичное содержимое всего APK файла, в отличие от распакованного содержимого каждого файла в архиве в версии 1. Что существенно ускоряет подтверждение и повышает надежность, позволяя обнаруживать любые несанкционированные изменения файлов APK.
  • Для поддержки обратной совместимости пакет APK должен быть подписан с помощью первой версии схемы (схема подписи JAR) до того, как он будет подписан по схеме версии 2.

Зачем вводить это изменение, то как Android верифицирует APK-файлы? Во-первых, для повышения безопасности и расширяемости этого нового формата подписи, а во-вторых для повышения производительности — новые сигнатуры требуют значительно меньше времени для проверки на устройстве (нет необходимости в дорогостоящей декомпрессии), в результате чего сокращается время установки приложения.

Релизы для небольших APK

Разработчики Android воспользовались этой возможностью, когда переписывали упаковщик, чтобы сделать некоторую оптимизацию по размеру APK-файлов релизов, что привело к более быстрой загрузке, уменьшению дельта обновлений на Play Store, и уменьшению занимаемого места на устройстве. Вот некоторые из изменений, которые были сделаны :

  • Файлы в архиве теперь сортируются, чтобы минимизировать различия между  релизами APK.
  • Все временные метки файлов и метаданные обнулены.
  • Уровни сжатия 6 и 9 проверяются для всех файлов параллельно и используется оптимальный из них, т.е. если L9 дает мало пользы с точки зрения размера, то L6 может быть выбран для повышения производительности.
  • Нативные библиотеки хранятся в APK в несжатом виде и выровнены на страницу.  Это поддерживается опцией android:extractNativeLibs=»false» в Android 6.0 Marshmallow и позволяет приложениям использовать меньше места на устройстве, а также генерировать меньшие по объему обновления на Play Store.
  • Сжатие Zopfli не используется для алгоритма обновлений Play Store. Не рекомендуется пережимать APK с Zopfli. Пре-оптимизация отдельных ресурсов, таких как PNG файлы в ваших проектах по прежнему является хорошим решением и рекомендовано.

Эти изменения помогут сделать ваши релизы как можно меньше, так что пользователи могут загрузить и обновить приложение даже на более медленной связи или для менее совместимых устройств. Но как насчет отладки ?

Отладка сборки для скорости установки

При разработке приложений вы хотите сохранить скорость итерационного цикла : изменение кода, сборка, развертывание на присоединенном девайсе или эмуляторе. Начиная с Android Studio 2.0 разработчики студии работают над тем, чтобы сделать этот процесс быстрее. Теперь используя Instant Run вы можете обновлять в runtime только измененный код и ресурсы, поскольку новый эмулятор поддерживает мульти-процессорность, а  быстрый ADB позволяет быстрее передавать и устанавливать APK файлы.

И это не преувеличение, новый Андроид эмулятор действительно «летает» (прим. авт.).

Предупреждение. APK файлы созданные при помощи Instant Run или отладочные сборки категорически не предназначены для дистрибуции на Play Store! Убедитесь, что вы распространяете только релизы !