Создайте самое быстрое и компактное приложение для Android

04.05.2020
Posted in blog-article
04.05.2020 admin

Создайте самое быстрое и компактное приложение для Android

Как сделать своё приложение не только лёгким, но и быстрым

В прошлом месяце я выступил с докладом в LINE DEVELOPER DAY 2018. Этот день стал для меня особенным, потому что это был мой первый доклад в Японии. Прежде, чем войти в число выступающих, сотрудники LINE должны были представить свои доклады команде организаторов.

Я посвятил свой доклад наиболее быстрому созданию приложения для Android и с наименьшим APK-файлом от Android Studio и Gradle. В качестве опорной базы использовал собственный опыт работы с Google I/O и Clinic Developer Build. В результате я пришел к выводу, что Developer Build Clinic — это один из лидеров среди консультантов по улучшению производительности сборки, предоставляемых командой Android Studio.

В этом блоге я хочу поделиться с вами этими советами, а также приложением, которое я также приготовил для демонстрации в ходе этого эксперимента. Знакомьтесь, данное приложение называется LINE MAN Driver.

https://lineman.line.me

Для тех, кто пока не знаком с LINE MAN, немного расскажу о нем. Это приложение-помощник, которое работает с такими официальными сервисами Таиланда, как доставка еды или товаров повседневного спроса, мессенджеры, службы доставки посылок и заказ такси. Задача программы — удовлетворить все потребности тайских пользователей в любое время.

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

Советы по созданию приложения наименьшего размера

Размер APK влияет на скорость загрузки вашего приложения, количество задействованной памяти и объем потребляемой энергии. Я думаю, многие из вас знают, что размер APK является важным инструментом для привлечения пользователей. Итак, посмотрим текущий размер приложения в драйвере LINE MAN.

Текущий Размер приложения-9 Мб

Самый быстрый способ приступить к оптимизации APK — использовать APK Analyzer в Android Studio. Для этого откройте Android Studio и выберите «Profile or debug APK», а затем запустите файл APK. Этот инструмент проведет сортировку пакетов в вашем файле APK по категориям — макеты, изображения, классы, библиотеки и т. д. Вы узнаете, какая из категорий весит больше, и сможете определить, какую следует оптимизировать.

Анализатор APK

Совет 1: удалите неиспользуемые ресурсы

Большинство из вас работают в устаревших проектах, множество изображений, макетов и строк в которых вы никогда не использовали. Вы опасаетесь их удалять только из-за страха, что приложение вылетит.В Android Studio вы можете удалить балласт совершенно безопасно для программы. Выберите в меню «Удалить неиспользуемые ресурсы» и уничтожьте их одним щелчком мыши.

Совет 2: добавляйте только необходимые зависимости

Некоторые связи состоят из несколько библиотек, таких как play-services и Facebook SDK. Если вы не укажете, какие именно библиотеки из общего перечня вам нужны, вы получите все доступные, что в итоге приведет к утяжелению приложения. Например, если вы хотите использовать Google Auth, вы должны указать

«com.google.android.gms: play-services-auth: 16.xx» вместо

«com.google.android.gms: play-services: 16.xx». »

Вы можете классифицировать зависимости в вашем проекте с помощью командной строки ниже

$ ./gradlew app:dependencies

Вы увидите перечень всех используемых зависимостей. Проверьте, чтобы в списке остались только те, которые вам необходимы.

Совет 3: доздайте несколько APK для контроля над плотностью экрана

По умолчанию Android Studio генерирует универсальный APK, который регулирует все плотности экрана. Но пользователь приложения сможет использовать только один из всех наборов — тот, который будет соответствовать параметрам его устройства. Разбейте плотности на несколько пакетов. Войдите в app / build.gradle, и Android Studio создаст для вас несколько APK.

android {

splits {

abi {

enable true

reset()

// Specify a list of ABIs that Gradle should create APKs for

include ‘x86’, ‘x86_64’, ‘arm64-v8a’, ‘armeabi-v7a’

// If you don’t want to generate a universal APK that includes all ABIs.

universalApk false

}

}

}

Теперь вам остается только загрузить их все в Google Play. Отныне ваши пользователи будут загружать только APK, соответствующие их плотности экрана, без иных, ненужных файлов.

Совет 4: создайте несколько APK для ABI

Проведем для настроек поддержки двоичных интерфейсов приложений (ABI) выборку, аналогичную той, что мы делали в 3 совете. Сейчас на рынке Android представлены 7 процессорных архитектур, 3 из которых (mips, mips64, armeabi) являются редкими. Укажите ABI, которые хотите поддерживать, в app / build.gradle, и Android Studio сгенерирует под них несколько APK.

android {

splits {

abi {

enable true

reset()

// Specify a list of ABIs that Gradle should create APKs for

include ‘x86’, ‘x86_64’, ‘arm64-v8a’, ‘armeabi-v7a’

// If you don’t want to generate a universal APK that includes all ABIs.

universalApk false

}

}

}

После их загрузки в Google Play ваши пользователи получат возможность скачивать на свои устройста только APK, соответствующие их архитектуре процессора.

Совет 5: создайте APK с конкретными ABI

Этот совет отличается от предыдущих тем, что вам предлагается остановить выбор на одном виде APK. Укажите архитектуру процессора, которую хотите поддерживать, и Android Studio сгенерирует только один APK.

android {

defaultConfig {

ndk {

abiFilters ‘x86’, ‘x86_64’, ‘arm64-v8a’, ‘armeabi-v7a’

// armeabi, mips and mips64 has removed since NDK r17

}

}

}

Лично я предпочитаю поступать именно так. В моем опыте были случаи, когда устройство пользователя содержало одновременно несколько APK, из-за чего при загрузке возникали сбои. Когда системе не предлагаешь выбор, она не сможет запутаться, а потому возьмет единственно правильную версию.

Совет 6: удалите неиспользуемые альтернативные ресурсы

Как правило, при создании локального приложения вы настраиваете таргетинг только на некоторые языки. Но в приложении могут содержаться зависимости, которые включают в себя множество других языков — тех стран, которым вы не планируете предоставлять софт. Используйте свойство resConfigs, чтобы указать языки, которые вы хотите поддерживать. Лишние параметры будут удалены, размер вашего приложения станет существенно меньше.

android {

defaultConfig {

resConfigs ‘en’, ‘th’

.

}

}

Совет 7: удалите сжатые неиспользуемые коды и ресурсы

По умолчанию minifyEnabled в Android Studio имеет значение «false», но многие изменяют его на «true», чтобы в интересах безопасности сделать код меньше и запутанней. Я рекомендую добавить «shrinkResources» в app / build.gradle, чтобы удалить неиспользуемые ресурсы, оставшиеся после процесса минимизации.И, наконец, обратимся к классическому коду оптимизации. Добавьте «-optimize» после «proguard-android», так вы запустите оптимизацию сборки, что существенно уменьшит приложение.

android {

buildTypes {

release {

minifyEnabled true

 

shrinkResources true

proguardFiles getDefaultProguardFile(‘proguard-android-optimize.txt’), ‘proguard-

rules.pro’

}

}

}

Напоминаею, что этот процесс занимает больше времени, чем другие приемы, поэтому используйте «-optimize» только в блоке релизов.

Совет 8: используйте Shape Drawable

Иногда я вижу, что разработчики используют градиентный фон или изображение с закругленными углами в качестве растрового изображения. На самом деле растровое изображение больше, чем версия Shape Drawable от Android Studio, потому что в Shape Drawable вы можете нарисовать прямоугольник, овал, закругленный угол и другие формы в формате XML.

Совет 9: Используйте WebP

WebP обладает качеством исходника, но весит меньше на 30%. Тольно будьте внимательны к требованиям ОС. Если вы используете непрозрачный фон, API от 15 уровня будет поддерживать ваши WebP. Но если прозрачность фона для вас принципиальна, вам потребуется API от 18 уровня.

Конвертировать ваше изображение в формат WebP вы можете прямо в Android Studio. Для этого щелкните по выбранному изображению правой кнопкой мыши и выберите «Преобразовать в WebP», после чего перед вами появится такой же экран, как в этом примере.

Итак, давайте сравним результаты. Мы уменьшили размер исходного изображения на 15% с сохранением качества в 90%.

Совет 10: Используйте VectorDrawable

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

Если вы поддерживаете minSdkVersion 20 и ниже, не переживайте: данный прием также для вас доступен благодаря библиотеке поддержки Android. Выберите для работы библиотеку поддержки версии 23.2 и выше.

Совокупное улучшение

Итак, оценим улучшения после применения этих советов.

Еще кое-что

В Android Studio 3.2 и более поздних версиях присутствует Android App Bundle — это новый формат публикации, который также упрощает ваше приложение. Это новый способ экспорта, выгрузки приложения. Когда пользователь скачивает приложение, Google Play Dynamic Delivery предоставляет только код и ресурсы, необходимые для его типа устройства.

Таким образом, вам больше не нужно создавать несколько APK самостоятельно.

Обратите внимание, что расширение файла будет .aab, поэтому вам потребуется больше времени на его сборку. Но результат того стоит.

Методы быстрой сборки приложений

Скорость сборки имеет решающее значение для вашей производительности, которую вы, как разработчики Android, действительно хотите улучшить. Я приготовил для вас 10 методов для более быстрого создания приложения LINE MAN Driver.

Перед оптимизацией давайте посмотрим на текущую полную скорость сборки в приложении LINE MAN Driver от Android Studio 3.2.1.

Время сборки в LINE MAN Driver составляет около 3 минут.

Метод 1: использовать последний, самый новый плагин Android

Первый способ — убедиться, что вы используете новейший плагин Android Gradle. Каждая новая версия содержит большое количество исправлений ошибок и решений проблем с производительностью.

buildscript {

repositories {

jcenter()

google()

}

dependencies {

— classpath ‘com.android.tools.build:gradle:3.0.0’

+ classpath ‘com.android.tools.build:gradle:3.2.1’

}

.

}

Метод 2: Избегайте устаревшего Multidex

Второй метод состоит в том, чтобы избежать Legacy Multidex. Как вы знаете, если ваше приложение превышает ограничение в 64k методов, вам нужно использовать Multidex. Так что если ваш minSdkVersion равен 21 и ниже, и вы также используете Multidex, то вам придется использовать так называемый Legacy Multidex, что замедлит работу.

Чтобы избежать Legacy Multidex, укажите minSdkVersion 21 или выше в app / build.gradle.

productFlavors

development

minSdkVersion 21

.

}

}

Метод 3: Отключить Multi APK

Третий метод — отключить создание нескольких APK для сборки разработки. Это поможет сэкономить время, которое бы потребовалось на упаковку и создание этих APK потребуется. Добавьте эти строки в блок отладки app / build.gradle

buildTypes

debug

splits.abi.enable = false

splits.density.enable = false

}

}

Метод 4: Минимизировать используемые ресурсы

Сведите к минимуму набор ресурсов, которые вы упаковываете в свою сборку. По умолчанию система сборки содержит все языки и плотности экрана, поддерживаемые вашим приложением и библиотеками. Но во время разработки вам не нужно использовать их все. Выберите один набор ресурсов, добавив resConfigs, в котором укажите язык и плотность экрана.

productFlavors {

dev {

resConfigs(‘en’, ‘xhdpi’)

.

}

}

Метод 5: Отключить сжатие PNG

По умолчанию AAPT будет обрабатывать ваши PNG-файлы, чтобы уменьшить их размер. Эта опция является полезной при выпуске APK, но в процессе разработки она только съедает время. Чтобы избежать сжатия PNG, установите «false» в прописанном ниже коде.

buildTypes {

debug {

aaptOptions.cruncherEnabled = false

.

}

}

Метод 6: Используйте Instant Run

Когда вы нажимаете кнопку RUN, система по умолчанию пытается выполнить «холодную» замену и требует перезапуска приложения. Но если нажать на кнопку «Применить изменения», система выберет для выполнения «горячую» замену. В результате вы сразу сможете оценить результаты работы, не отрываясь от творческого процесса.

Метод 7. Отключение обновления идентификатора сборки

Следующая техника — отключить обновление идентификатора сборки в Firebase Crashlytyics. Многие из вас используют Crashlytics. По умолчанию при каждой сборке он генерирует уникальный идентификатор. Вы можете отключить эту функцию следующим образом.

buildTypes {

debug {

ext.alwaysUpdateBuildId = false

.

}

}

Но будьте внимательны! Флаг «false» вам необходим только в блоке отладки.

Метод 8. Не используйте динамические версии

Gradle позволяет каждые 24 часа получать последние версии каждой зависимости. Чтобы активировать эту возможность, достаточно добавить в конце строки зависимости символ «+«. Как мы знаем, то, что хорошо для выпущенного приложения, мешает разработчику.

android {

dependencies {

implementation ‘com.android.support:appcompat-v7:+’

.

}

}

Метод 9: Конфигурация gradle.properties

Представленный ниже код — это конфигурации, которые я собрал в процессе создания разработок под Android. Для меня они как волшебство, которое поможет вам ускорить работу над приложением.

Например, по умолчанию Android Studio предоставит вам 1,5 ГБ памяти. Это может быть очень много или слишком мало, в зависимости от характеристик вашего проекта.

org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=1024m —

XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

org.gradle.daemon=true

org.gradle.parallel=true

org.gradle.configureondemand=true

org.gradle.caching=true

android.enableBuildScriptClasspathCheck=false

Я советую попробовать эти конфигурации и гарантирую, что вы сэкономите много времени на сборку.

Метод 10: используйте новый кодер R8

В Android Studio 3.3, выход которой уже на носу, появится возможность использовать для сжатия кода R8 следующего поколения. Это уменьшит неиспользуемые ресурсы и код, а также сократит ваш исходный код. Таким образом, Android Studio сократит необходимое время на сборку и размер APK.

Совокупное улучшение

Теперь, когда мы использовали все, что было описано в советах выше, оценим новую скорость сборки. Нам удалось увеличить скорость полной сборки в 3 раза! Теперь она занимает около1 минуты.

Резюме

Только представьте, как сильно вы можете уменьшить ваши старые проекты и сократить время их разработки, если их размеры на данный момент превышают параметры LINE MAN Driver. Я надеюсь, мои методы и рекомендации помогут вам увеличить производительность. Наслаждайтесь кодированием!

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Contact

Давайте работать вместе!

Пишите нам и найдем точки соприкосновения, может станем партнерами, а может поможем вам зайти в нашу чудесную нишу

Вы разработчик?

Пишите! Нам постоянно нужны новые кадры, либо можем помочь в продвижении вашего приложения

Новичок?

Поможем быстро войти в нишу, не тратя годы на понимание

Давно в нише?

Рады будем пообщаться как на темы whitehat, так и blackhat тематики ^_^ + всегда есть что обсудить по поводу рекламных сетей

ПИШИ В TELEGRAM!

Contact