Размеры пакета приложения
В этой статье рассматриваются элементы, входящие в пакет приложения Xamarin.Android, и связанные с ними стратегии эффективного развертывания пакетов на этапах отладки и выпуска.
Обзор
Xamarin.Android использует разные механизмы, чтобы свести размер пакета к минимуму, сохраняя эффективность процессов отладки и развертывания выпуска. В этой статье мы рассмотрим рабочий процесс выпуска и отладки Xamarin.Android, а также изучим меры, которые принимает платформа Xamarin.Android, чтобы гарантировать небольшой размер компилируемых и выпускаемых приложений.
Пакеты выпусков
Чтобы предоставить пользователям полностью автономные приложения, пакет должен содержать само приложение, все связанные с ним библиотеки, контент, среду выполнения Mono и необходимые сборки библиотеки базовых классов (BCL). Например, для стандартного шаблона "Hello World" содержимое полного пакета сборки будет выглядеть так:
15,8 МБ — это слишком большой размер. Основной проблемой здесь стали библиотеки BCL, так как они включают mscorlib, System и Mono.Android с большим количеством важных для работы приложения компонентов. Но значительная часть их функциональности, скорее всего, не нужна в вашем приложении. Было бы неплохо исключить эти ненужные компоненты.
При сборке приложения для распространения следует применить дополнительный процесс "компоновки", который проверяет приложение и удаляет любой неиспользуемый код. Примерно такой же процесс сборщик мусора выполняет для динамической памяти. Разница лишь в том, что он работает с объектами, а компоновщик — с кодом приложения. Например, в System.dll существует целое пространство имен для отправки и получения электронной почты. Если приложение не использует эти возможности, код для них просто зря занимает место в приложении. Запустив компоновщик для приложения Hello World, мы получим новую версию пакета:
Как видите, этот процесс значительно сокращает объем BCL, удаляя все ненужное. Обратите внимание, что конечный размер BCL всегда зависит от того, что используется в приложении. Давайте рассмотрим приложение ApiDemo с более серьезной функциональностью. Здесь хорошо видно, что компонент BCL занимает больше места, чем в примере Hello World, поскольку ApiDemo нужно больше функций из него:
Как мы видим на этих примерах, размер пакета приложения обычно имеет размер на 2.9 МБ больше, чем само приложение и его зависимости.
Отладочные пакеты
Для отладочных сборок используется несколько другой подход. Нам нужно много раз подряд развертывать приложение на устройстве, и мы не хотим терять на этом много времени, а значит здесь важнее скорость развертывания, чем размер пакета.
При этом Android копирует и устанавливает пакеты довольно медленно, и нам нужен минимально возможный размер пакета. Как уже говорилось выше, уменьшить размер пакета можно с помощью компоновщика и еще нескольких разных способов. Но компоновщик работает медленно, и нам не нужно развертывать все приложение, а только те части, которые изменились после последнего развертывания. В этой ситуации мы можем отделить приложение от основных компонентов Xamarin.Android.
При первой отладке на устройстве мы скопируем два больших пакета: Общая среда выполнения и Общая платформа. Общая среда выполнения содержит среду выполнения Mono и BCL, а общая платформа — конкретные сборки для уровня API Android:
Этот процесс занимает немало времени, но зато эти компоненты копируются только один раз и мы сможем использовать их снова при последующей отладке приложения. И в самом конце мы быстро копируем основное приложение, размер которого невелик:
Быстрое развертывание сборок
Параметр сборки Быстрое развертывание сборок позволяет еще больше сократить размер отладочного пакета. При его использовании из пакета приложения исключаются сборки, которые устанавливаются на устройство напрямую и только один раз. Теперь вы сможете копировать только те файлы, которые изменились с момента предыдущего развертывания.
Чтобы включить быстрое развертывание сборок, выполните следующие действия:
В обозревателе решений щелкните правой кнопкой мыши проект Android и выберите пункт Параметры.
В диалоговом окне "Параметры проекта" выберите Сборка Android:
Установите флажки Использовать общую среду выполнения Mono и Быстрое развертывание сборок:
Нажмите кнопку ОК, чтобы сохранить изменения и закрыть диалоговое окно параметров проекта.
Теперь при следующей отладочной сборке этого приложения все сборки будут установлены напрямую на устройство (если еще не установлены), и отдельно будет установлен небольшой пакет приложения (очищенный от сборок). Такой подход сокращает время на подготовку к тестированию обновленной версии приложения.
Нам придется лишь один раз дождаться завершения длительного развертывания общей среды выполнения и общей платформы, но зато при последующих изменениях мы сможем быстро и безболезненно развернуть новую версию приложения, ускорив тем самым цикл правки, развертывания и выполнения.
Итоги
В этой статье мы подробно рассмотрели параметры упаковки Xamarin.Android для выпуска и отладки. Кроме того, мы изучили стратегии Mono для платформы Android, позволяющие упростить развертывание пакетов на этапах отладки и выпуска приложения.