Уменьшите размер APK вашего приложения, даже если вы используете Realm

Как уменьшить размер вашего приложения, даже если вы используете базу данных Realm для Android.

Эта статья предназначена для разработчиков, которые слышали или использовали базу данных Realm в своих приложениях для Android.

Это руководство призвано помочь вам настроить проект Android таким образом, чтобы Realm занимал меньше места, чем обычно.

Для этой статьи я возьму свое приложение, Сильверскринерв качестве примера.

Вы можете найти исходный код на GitHub здесь:

бапспатил/SilverScreener
SilverScreener — многофункциональное приложение-путеводитель по фильмам. github.com

Время до Царства…

Вернемся к тому времени, когда я реализовал обычный, скучный База данных SQLite в моем приложении. Размер APK приложения был 4 МБ.

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

Войди, Царство.

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

Было очень легко и быстро выполнять операции CRUD. Каждую строчку кода Realm было легко прочитать и понять даже новичку. Работать с потоками тоже не составило труда. Шифрование базы данных? Просто напишите 2 дополнительные строки кода, и все готово!

Теперь, конечно, эта статья не является ни рекламой Realm, ни учебником по Realm. Итак, давайте перейдем к проблеме с использованием Realm.

Что не так с Царством?

После того, как я добавил зависимости для Realm в свое приложение, настроил Realm и удалил весь код SQLite, размер APK моего приложения увеличился с 4 МБ к 12 МБ! Теперь для простого приложения, такого как мое, эта разница может быть невелика. Но что, если в вашем приложении есть огромная база данных с множеством сущностей? Прибавка будет гораздо больше.


SQLite против Realm: сравнение размера APK

Причина

В телефонах Android есть процессоры, поддерживающие следующие архитектуры:

  • x86
  • x86_64
  • armeabi-v7a
  • arm64-v8a
  • armeabi (Устаревший)
  • mips (Устаревший)
  • mips64 (Устаревший)

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

В вашем APK-файле, созданном Android Studio, есть собственный код Realm для все вышеупомянутые архитектуры. Но телефонам ваших пользователей нужно только приложение с родным кодом Realm для их архитектура процессора. Им не нужно приложение, для которого скомпилирован Realm. все архитектуры; это только увеличило бы размер приложения, которое им пришлось бы загружать из Play Store.

Решение

Это можно сделать двумя способами:

  1. ABI-фильтры (менее эффективны)
  2. Разделение APK (более эффективно)

Для краткости в этой статье я расскажу только о разделении APK, и вот что это на самом деле означает:

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

Это можно сделать на уровне приложения build.gradle файл вашего Android-проекта.

Поскольку armeabi, mips и mips64 архитектуры уже устарели, давайте сосредоточимся на создании отдельных APK для x86, x86_64, armeabi-v7a и arm64-v8a архитектуры.

Если вы делаете это для приложения, которое необходимо загрузить в Play Store:

Поскольку будет создано несколько APK, коды версий для всех должны быть разными, поскольку консоль Google Play не позволяет загружать APK с одинаковыми кодами версий.

Поэтому, если ваш текущий код версии для одного APK равен 1, а следующая версия вашего приложения с несколькими APK не должна быть 2 (x86), 3 (x86_64), 4 (armeabi-v7a) и 5 ​​(arm64-v8a); это плохая практика, и вам будет труднее с ней справиться.

Вместо этого лучше иметь огромное десятичное число и присваивать каждой архитектуре «коды» следующим образом:

  • x86: 0
  • x86_64: 1
  • armeabi-v7a: 2
  • arm64-v8a: 3

Тогда ваши коды версий для вашего приложения будут выглядеть примерно так: 2000 (x86), 2001 (x86_64), 2002(armeabi-v7a) и 2003(arm64-v8a); и следующие коды версий будут 3000, 3001, 3002 и 3003. Вы поняли идею.

Теперь давайте перейдем к практической части и погрузимся в наш уровень приложения. build.gradle файл:

Вот как ваш уровень приложения build.gradle файл, включенный с разделением APK, должен выглядеть:

Теперь создайте свои новые APK, и вы должны увидеть значительное уменьшение размера в отдельных APK для конкретной архитектуры!

Вы можете загрузить 4 APK-файла, сгенерированные в Google Play Console для одной и той же версии приложения, поскольку все они имеют разные коды версий.

Пользователи смогут загрузить из Play Store только ту версию APK, которая соответствует архитектуре их телефона, и все это происходит за кулисами благодаря волшебству консоли Google Play.

Лучшая часть? Размер APK для моего приложения SilverScreener был теперь 3,1 МБ!

Вот сравнение до и после разделения APK:


SQLite vs Realm vs Realm с разделением APK: сравнение размера APK

Вынос

Realm — отличная база данных, но она также значительно увеличивает размер APK.
Вперед, начните использовать разделение APK в своем приложении без ущерба для размера файла. 😁


Вы можете найти SilverScreener в магазине Play здесь:

Приложения в Google Play – SilverScreener
_SilverScreener — это приложение для поиска фильмов в темной тематике. Оно показывает вам список фильмов из The Movie Database, популярного… _play.google.com

Вы также можете найти меня и все мои соцсети здесь:

Бапусахеб Патил
_Сертифицированный Google Android-разработчик, который любит создавать приложения, циферблаты и мемы._bapspatil.com

Похожие записи

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

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