Создание app-release.apk для публикации в маркете

В общем, все сделал по документации. Android Studio сообщает о том, что apk был успешно собран и предлагает мне перейти в соответствующую папку. Я перехожу туда, а там нет подписанного apk файла. Там вообще нет apk файла. Есть только в app/build/outputs/apk 2 debug файла. Почему нет готового для маркета apk?
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
В Intelij Idea в меню перед запуска выбивает Error:The apk for your currently selected variant (app-release.apk) is not
В Intelij Idea в меню перед запуска выбивает Error:The apk for your currently selected variant.

Release .apk (Cross-platform)
Всем привет! Столкнулся с такой проблемой. При debug под Android на физическом устройстве (version.
Создание пакета приложения для публикации в магазине
Здравствуйте! Возникла такая проблема: создали приложение в VS для Windows 8, теперь нужно.
Создание apk для запуска на реальном устройстве
Написал простой RSS Reader для Android на Visual Studio 2015 Community, debug версия приложения на.
Создание apk-файла в Android Studio
Конечной целью любой java-разработки является создание завершенного приложения : это может быть как библиотека/исполняемый jar-файл, либо web приложение. Имеются различные типы приложений и библиотек. При всем многообразии возможных разношёрстных типов готовых библиотек и приложений android-устройства выбиваются из общей колеи. Для android-устройств конечным программным продуктом являются apk-файлы, которые можно свободно распространять между пользователями.
На заре развития программного обеспечения вся разработка для android-устройств осуществлялась, как правило, в IDE Eclipse со специализированными плагинами типа ADT (Android Development Tools). Данная среда разработки позволяет создавать для android apk-файлы. Но времена быстро меняются, и сегодня гораздо эффективнее и быстрее создавать apk-файлы в представленной ещё в 2013 году Android Studio, основанную на старом конкуренте Eclipse — системе IntelliJ IDEA.
Аббревиатура apk (Android Package Kit) символизирует формат файлов, которые используются для распространения и установки приложений на устройства android. Файл apk содержит все необходимые элементы для правильной установки приложения на устройстве, и, по своему назначению, чем-то похож на исполняемые exe-файлы в Windows. Когда Вы «заходите в магазин» Google Play, чтобы выбрать и загрузить какое-либо приложение, Ваше устройство android скачивает и устанавливает файл apk с нужным приложением.
Создание apk-файла
Рассмотрим процесс создания apk-файла на примере p13osgi, в котором использовался OSGi-фреймворк. Этот пример подробно рассмотрен на странице Android и OSGI-фреймворк Felix. В данной статье используем готовый модуль из проекта.
Заметка. Почему в качестве примера создания apk-файла выбираем данный модуль/проект, а не какой-либо другой? Дело в том, что в данном примере используется расположенная в поддиректории lib внешняя библиотека. И для нас интерес будет представлять структура apk-файла с внешней jar-библиотекой : какое место в данном пакете будет занимать внешний файл org.apache.felix.framework-6.0.3.jar. Здесь следует понимать, что OSGi-фреймворк (Felix) позволяет создавать модульную структуру приложения. Причем, в режиме run-time можно динамически подключать новые модули (bunlde), останавливать запущенные модули, одновременно подключать разноверсионные модули. Данный функционал OSGi-фреймворка на примере Вы можете реально проверить на своем компьютере; для этого необходимо познакомиться с Уроком 8.
Создание APK-файлов всех модулей проекта
Чтобы использовать самый простой способ создания apk-файла, выберите в Android Studio пункт меню «Build → Build Bundle(s)/APK(s) → APK(s)», как это представлено на следующем скриншоте.

В данном случае для всех модулей проекта будут созданы apk-файлы. Здесь необходимо отметить, что apk-файлы будут без цифровой подписи и распространению не подлежат. Но на них можно «посмотреть», что мы и сделаем в последнем разделе статьи, а также можно проверить работоспособность на android-устройстве. Загрузку apk-файла на android-устройство мы рассмотрим в ближайшее время отдельной статьей. Также отдельной статьей я представлю процесс создания apk-файла с цифровой подписью при выборе пункта меню «Build → Generate Signed Bundle/APK».
А сейчас Вы должны увидеть, что для всех модулей проекта создаются apk-файлы, которые располагаются в поддиректориях проекта [project_name]/[module_name]/build/outputs/apk/debug/. Т.е. в поддиректории модуля build/outputs/apk/debug/ будет размещаться созданный apk-файл, наименование которого включает наименование модуля с постфиксом «-debug». В нашем примере будет создан файл p13osgi-debug.apk.
Определение типа apk : debug-release
Постфикс «-debug», добавляемый к наименованию пакета, определен по умолчанию. Вы можете самостоятельно переименовать файл, и он останется работоспособным. Но можно и изменить настройки. Для этого необходимо указателем мыши нажать на расположенную в левом нижнем углу маленькую кнопочку, как это представлено на нижнем левом скриншоте. Данная кнопка открывает окно со специальными ярлыками различных вспомогательных окон. При простом наведении указателя мыши на эту кнопку, появляется список всех этих окон для быстрого выбора нужного.
Откроем окно Build Variants и в дополнительно открытом окне (скриншот справа) найдем модуль p13osgi (наш пример).
Если в выпадающем списке переключить режим сборки с debug на release, то будет создаваться пакет p13osgi-release-unsigned.apk в поддиректории «build/outputs/apk/release/».
![]() |
![]() |
Создание APK-файла одного модуля проекта
Для того, чтобы создать apk-файл одного модуля, необходимо открыть панель Gradle (см.ярлык на скриншоте сверху слева). В открывшемся окне, как это представлено на следующем скриншоте, необходимо выбрать пункт меню «module_name → Tasks → build → build». В результате данных действий будет создан apk-файл только одного модуля.

Структура файла APK
В заключении посмотрим на внутренности нашего apk-файла. Сразу же отмечу, что apk-файл можно открыть zip-архиватором, например 7-Zip. Но многое останется недоступным. Лучше использовать анализатор apk-файлов от Android Studio. Далеко ходить не надо : необходимо выбрать пункт меню «Build → Analyze APK . » (см. самый верхний скриншот). В открывшемся диалоговом окне найти нужный пакет в файловой структуре, после чего в IDE будет открыта панель, как это представлено на следующем скриншоте.

Интерфейс панели анализатора разделен на 2 части. В верхней части Вы видите корневую структуру apk-файла. В нижней части можно просматривать структуру выделенного элемента верхней части.
Что сразу же бросается в глаза? Вспоминаем : в нашем примере/модуле была использована внешняя библиотека с OSGi-фреймворком Felix org.apache.felix.framework-6.0.3.jar, расположенная в поддиректории lib
В структуре созданного пакета поддиректория lib. Все файлы внешней jar-библиотеки размещаются в корне по пакетам. Можно предположить, что и дополнительное использование бандлов/модулей (а для чего использовать фреймворк, если не использовать бандлы) приведет к тому, что и их содержимое также будет интегрировано в общий пакет. Таким образом, мы лишаемся преимуществ использования OSGi-технологии при разработке приложений для android-устройств, поскольку любая доработка отдельного модуля/бандла будет связана с обновлением всей сборки (apk-пакета). Кроме этого, отсутствует возможность одновременного использования разноверсионных бандлов, а межмодульное взаимодействие посредством сервисов становится «слишком дорогим» (можно и напрямую постучаться к классам бандла, зачем нам посредник-активатор). На данном простом примере я не вижу преимуществ использования OSGi для создания многомодульного приложения.
Буду признателен всем, кто опровергнет данное предположение и предложит значимое использование OSGi-технологии в android-устройстве.
Что касается *.class’ов, то их также не будет в apk-файле. Им на смену пришли файлы *.dex .
Файл .dex
«Рабочей лошадкой» в системе Android является Dalvik Virtual Machine, не использующая байт-код Java. Виртуальная машина Dalvik является службой приложения, которая интерпретирует скомпилированный код в dex-файле. Инструкции байт-кода формата DEX не совпадают с инструкциями байт-кода Java. Таким образом, в apk-файле Java-классы представлены в формате .dex. Но необходимо отметить, что структура пакетов сохраняется.
Публикация приложения
После создания приложения, его тестирования и отладки мы можем приступить к его публикации. Суть публикации заключается в создании файла с расширением .apk, которое будет представлять приложение, и его последующее размещение в Google Play Market или на других внешних сайтах. По умолчанию в процессе отладки и создания приложения файл apk уже создается, и мы можем его найти в папке проекта по пути Название_проекта\app\build\outputs\apk. По умолчанию файл называется app-debug.apk и представляет debug-версию.
Но для полноценно публикации данного файла может оказаться недостаточно. И нам еще дополнительно надо произвести некоторую подготовку проекта к релизу. Для это следует указать в файле манифеста у элемента установлены атрибуты android:versionCode и android:versionName . Также в файле манифеста элемент не должен содержать атрибута android:debuggable
Кроме того, на этом этапе можно установить иконку для приложения, которая будет отображаться на рабочем экране гаджета, название приложения (атрибут android:label у элемента), а также можно задать лицензионное соглашение.
В файле манифеста также следует определить название пакета (атрибут package элемента ), которое будет использоваться для приложения в дальнейшем. По умолчанию при разработке в Android Studio пакеты приложений начинаются с com.example. Не стоит оставлять данное название, так как название пакета будет служить уникальным идентификатором вашего приложения. Например, ниже в моем случае названием пакета служит «com.maverics.eugene.telephonelist»:
При этом если в файлах кода java название пакета в начале файла также должно соответствовать пакету приложения.
Установка требований
На этапе подготовки к релизу также можно установить требования к API. Например, наше приложение имеет определеную минимальную версию ОС Android, поэтому мы можем установить в файле манифеста соответствующие атрибуты у элемента
- android:minSdkVersion — минимальная версия Android
- android:targetSdkVersion — оптимальная версия API
- android:maxSdkVersion — максимальная версия системы
Например, пусть минимальная версия Jelly Beans 4.1.2, а оптимальная KitKat 4.4.4:
Подпись приложения
Когда все уже готово, приложение для Android должно быть подписано сертификатом, благодаря которому можно идентифицировать автора приложения. Когда мы тестируем приложение, устанавливая его через Android Studio на устройство, то оно подписывается автоматически. Но для создания релиз-версии нам надо произвести дополнительно ряд действий.
При создании сертификата следует помнить, что при обновлении приложения система будет сравнивать сертификаты старой и новой версии. И обновление будет происходить, если сертификаты обоих версий совпадут. Но если новая версия будет подписана новым сертификатом, то приложение будет расцениваться как совершенно новое, никак не связанное со старой версией и представляющее совершенно другое приложение. В этом случае чтобы его установить, новая версия должна будет иметь другой название пакета, нежели старая.
Во-первых, в Android Studio выберем в меню пункт Build -> Generate Signed APK . После этого нам откроется окно мастера:

Нажмем на кнопку Create new. . После этого нам откроется окно создания ключа:

Введем в поле Key store path путь к файлу сетификата, который будет создан. Если указанной папки не существует, то ее надо создать или определить существующую папку.
В поле Password/Confirm указываем пароль.
В поле Alias указываем псевдоним. Можно поставить произвольное название.
В поле First and Last Name вписываем имя и фамилию. И далее пишим подразделение, организацию, город, страну и код страны.
В конце нажимаем OK.
После этого автоматически обновится первое окошко:

Далее нажмем на кнопку Next:

Финальное окно покажет нам путь к каталогу, где будет находиться подписанное приложение apk в release-версии. Нажмем на Finish.
Теперь по указанному пути можно будет найти подписанный apk, который будет иметь название app-release.apk:

Мы можем переименовать файл, сохранив его расширение и выложить в Play Market или на любой сайт или сразу загрузить на мобильное устройство. После загрузки на телефон/планшет достоточно нажать на него, и с помощью стандартного установщика пакетов приложение будет установлено. Правда, здесь также надо учитывать, что если мы устанавливаем приложение не из Play Market, то в настройках надо разрешить установку из других источниках — Безопасность->Неизвестные источники (Разрешить установку приложений из других источников)
Подготовка приложения к выпуску
После создания и тестирования кода приложения необходимо подготовить пакет для распространения. Первой задачей при подготовке этого пакета является сборка приложения для выпуска, в основном предполагающая установку некоторых атрибутов приложения.
Чтобы построить приложение для выпуска, выполните следующие действия:
- Укажите значок приложения — для каждого приложения Xamarin.Android должен быть указан значок приложения. С технической точки зрения это не обязательно, однако многие продавцы, например Google Play, требуют, чтобы у приложения был свой значок.
- Версия приложения — этот шаг включает в себя инициализацию или обновление сведений о версиях. Это важно для эффективного обновления приложения в будущем и для того, чтобы пользователи могли знать, какая версия приложения у них установлена.
- Сжатие APK — размер конечного пакета APK можно существенно уменьшить с помощью компоновщика Xamarin.Android в управляемом коде и ProGuard в байт-коде Java.
- Защита приложения — предотвращение отладки, незаконного изменения или реконструирования приложения пользователями или злоумышленниками путем отключения отладки, скрытия управляемого кода, добавления защиты от отладки и незаконного изменения, а также использования собственной компиляции.
- Задать свойства упаковки — свойства упаковки управляют созданием пакета приложений Android (APK). Этот шаг позволяет оптимизировать пакет APK, защитить его ресурс и при необходимости разбить его на модули. Кроме того, вы можете предоставить пользователям пакет приложений Android, оптимизированный для их устройств.
- Компиляция — на этом шаге компилируется код и ресурсы, чтобы убедиться, что сборка выполняется в режиме выпуска.
- Архив для публикации — на этом шаге выполняется сборка приложения и его место в архиве для подписывания и публикации.
Далее эти действия описываются более подробно.
Указание значка приложения
Настоятельно рекомендуется указывать значок приложения для каждого проекта Xamarin.Android. Некоторые магазины приложений не допускают публикацию приложений Android без значков. Указать значок приложения для проекта Xamarin.Android можно с помощью свойства Icon атрибута Application .
- Visual Studio
- Visual Studio для Mac
В Visual Studio 2017 и более поздних версиях значок приложения можно указать в разделе Манифест Android в окне Свойства проекта, как показано на следующем снимке экрана:
![]()
В Visual Studio для Mac значок приложения также можно указать в разделе Приложение Android в окне Параметры проекта, как показано на следующем снимке экрана:
![]()
В этих примерах в @drawable/icon добавлена ссылка на файл значка по пути Resources/drawable/icon.png (обратите внимание, что расширение .png не включено в имя ресурса). Этот атрибут также объявляется в файле Properties\AssemblyInfo.cs, как показано в следующем примере:
[assembly: Application(Icon = "@drawable/icon")]
Как правило, using Android.App объявляется в верхней части AssemblyInfo.cs (для пространства имен атрибута Android.App задается значение Application ). Но, возможно, потребуется добавить инструкцию using , если ее еще нет.
Настройка управления версиями приложения
Управление версиями имеет важное значение для обслуживания и распространения приложений Android. Без какого то ни было механизма управления версиями сложно определить необходимость и способ обновления приложения. Для упрощения управления версиями Android распознает два различных типа сведений:
- Номер версии — целочисленное значение (используемое внутри Android и приложением), представляющее версию приложения. Для большинства приложений номер версии начинается с 1, и с каждой сборкой это значение увеличивается. Это значение не имеет связи или сопоставления с атрибутом имени версии (см. ниже). Пользователи не должны видеть это значение в приложениях и службах публикации. Это значение хранится в файле AndroidManifest.xml в виде android:versionCode .
- Имя версии — строка, используемая только для передачи пользователю сведений о версии приложения (установленной на определенном устройстве). Пользователи должны видеть имя версии. Оно также должно отображаться в Google Play. Android не использует эту строку для внутренних целей. Имя версии может быть любым строковым значением, упрощающим идентификацию сборки, установленной на устройстве пользователя. Это значение хранится в файле AndroidManifest.xml в виде android:versionName .
- Visual Studio
- Visual Studio для Mac
В Visual Studio эти значения можно задать в разделе Манифест Android в окне Свойства проекта, как показано на следующем снимке экрана:

Эти значения можно задать в разделе Build Android Application (Сборка > приложения Android) раздела Параметры проекта, как показано на следующем снимке экрана:

Сокращение объема пакета APK
Размер пакетов APK Xamarin.Android можно уменьшить, используя компоновщик Xamarin.Android, который удаляет ненужный управляемый код, и средство ProGuard из пакета SDK для Android, которое удаляет неиспользуемый байт-код Java. В процессе сборки сначала используется компоновщик Xamarin.Android для оптимизации управляемого кода (C#), а затем применяется ProGuard (если он включен) для оптимизации пакета APK на уровне байт-кода Java.
Настройка компоновщика
Режим «Выпуск» отключает общую среду выполнения и включает компоновку, поэтому приложение поставляет только части Xamarin.Android, необходимые во время выполнения. С помощью статического анализа компоновщик в Xamarin.Android определяет, какие сборки, типы и члены типов использует или указывает приложение Xamarin.Android. Затем компоновщик удаляет все неиспользуемые (или неуказанные) сборки, типы и члены. Это может привести к значительному сокращению размера пакета. Рассмотрим пример HelloWorld, когда окончательный размер пакета APK уменьшается на 83 %:
- Конфигурация: нет — размер Xamarin.Android 4.2.5 = 17,4 МБ.
- Конфигурация: только сборки пакета SDK — размер Xamarin.Android 4.2.5 = 3,0 МБ.
- Visual Studio
- Visual Studio для Mac
Параметры компоновщика можно задать в разделе Параметры Android в окне Свойства проекта:

В раскрывающемся меню Компоновка можно настроить следующие параметры компоновщика:
- None — отключает компоновщик; связывание не выполняется.
- Только сборки пакета SDK — связывает только сборки, необходимые для Xamarin.Android. Другие сборки не компонуются.
- Сборки sdk и пользовательские сборки . Это позволит связать все сборки, необходимые приложению, а не только те, которые требуются Xamarin.Android.
Параметры компоновщика можно настроить на вкладке Компоновщик в разделе Сборка Android окна Параметры проекта, как показано на следующем снимке экрана:

Доступны следующие параметры компоновщика:
- Не связывать — отключает компоновщик; связывание не выполняется.
- Связывание только сборок пакета SDK — связывает только сборки, необходимые для Xamarin.Android. Другие сборки не компонуются.
- Связывание всех сборок . Это позволит связать все сборки, необходимые приложению, а не только сборки, необходимые для Xamarin.Android.
При компоновке могут возникать нежелательные побочные эффекты, поэтому важно повторно протестировать приложение в режиме выпуска на физическом устройстве.
ProGuard
ProGuard является средством пакета SDK для Android, которое компонует и скрывает код Java. ProGuard обычно используется для создания небольших приложений за счет сокращения размера больших включенных библиотек (например, служб Google Play) в пакете APK. ProGuard удаляет неиспользуемый байт-код Java, что приводит к уменьшению размера результирующего приложения. Например, использование ProGuard в небольших приложениях Xamarin.Android обычно достигает сокращения размера примерно на 24 %, а использование ProGuard для более крупных приложений с несколькими зависимостями библиотек обычно достигает еще большего размера.
ProGuard не является альтернативой компоновщику Xamarin.Android. Компоновщик Xamarin.Android связывает управляемый код, а ProGuard — байт-код Java. В процессе сборки сначала используется компоновщик Xamarin.Android для оптимизации управляемого кода (C#) в приложении, а затем применяется ProGuard (если он включен) для оптимизации пакета APK на уровне байт-код Java.
Если параметр Включить ProGuard включен, Xamarin.Android запустит ProGuard в итоговом пакете APK. Во время сборки ProGuard создает и использует файл конфигурации ProGuard. Xamarin.Android также поддерживает настраиваемые действия сборки ProguardConfiguration. В проект можно добавить настраиваемый файл конфигурации ProGuard, щелкнуть его правой кнопкой мыши и выбрать в качестве действия сборки, как показано в следующем примере:
- Visual Studio
- Visual Studio для Mac


По умолчанию средство ProGuard отключено. Параметр Включить ProGuard доступен, только если для проекта задан режим Выпуск. Все действия сборки ProGuard игнорируются до тех пор, пока не будет включен параметр Включить ProGuard. Конфигурация Xamarin.Android ProGuard не скрывает пакет APK. Скрытие невозможно включить даже с помощью настраиваемых файлов конфигурации. Сведения об использовании скрытия см. в разделе Защита приложения с помощью Dotfuscator.
Дополнительные сведения об использовании средства ProGuard см. в разделе ProGuard.
Защита приложения
Выключение отладки
Во время разработки приложения Android отладка выполняется с использованием протокола Java Debug Wire (JDWP). Это технология, которая позволяет таким средствам, как adb, взаимодействовать с виртуальной машиной Java в целях отладки. Протокол JDWP включен по умолчанию для сборок отладки приложения Xamarin.Android. Несмотря на то, что протокол JDWP имеет важное значение во время разработки, он может представлять угрозу безопасности для выпускаемых приложений.
В выпускаемом приложении следует всегда отключать состояние отладки, так как в противном случае можно (через JDWP) получить полный доступ к процессу Java и выполнить произвольный код в контексте приложения.
Манифест Android содержит атрибут android:debuggable , который контролирует возможность отладки приложения. Атрибуту android:debuggable рекомендуется задать значение false . Проще всего это сделать путем добавления инструкции условной компиляции в файл AssemblyInfo.cs:
#if DEBUG [assembly: Application(Debuggable=true)] #else [assembly: Application(Debuggable=false)] #endif
Обратите внимание, что сборки отладки автоматически задают некоторые разрешения для упрощения отладки (например, Internet и ReadExternalStorage). Однако сборки выпуска используют только разрешения, настроенные явным образом. Если обнаружится, что при переключении на сборку выпуска приложение теряет разрешение, которое было доступно в сборке отладки, убедитесь, что это разрешение включено явным образом в списке Необходимые разрешения, как описано в разделе Разрешения.
Защита приложений с использованием Dotfuscator
- Visual Studio
- Visual Studio для Mac
Даже если отладка выключена, злоумышленники по-прежнему могут выполнять повторную упаковку пакета, а также добавлять и удалять параметры конфигурации или разрешения. Это позволяет реконструировать приложение, выполнять его отладку или незаконно изменять. Dotfuscator Community Edition (CE) может использоваться для маскировки управляемого кода и вставки кода обнаружения состояния безопасности среды выполнения в приложение Xamarin.Android на этапе построения, чтобы обнаружить запуск приложения на устройстве с административным доступом и отреагировать соответствующим образом.
Dotfuscator CE входит в состав Visual Studio 2017. Чтобы использовать Dotfuscator, щелкните Инструменты > PreEmptive Protection — Dotfuscator.
Дополнительные сведения о настройке Dotfuscator CE см. в разделе Использование Dotfuscator Community Edition с Xamarin. После настройки Dotfuscator CE будет автоматически защищать каждую создаваемую сборку.
Даже если отладка выключена, злоумышленники по-прежнему могут выполнять повторную упаковку пакета, а также добавлять и удалять параметры конфигурации или разрешения. Это позволяет реконструировать приложение, выполнять его отладку или незаконно изменять. Несмотря на то, что это средство не поддерживает Visual Studio для Mac, вы можете использовать Dotfuscator Community Edition (CE) с Visual Studio для маскировки управляемого кода и вставки кода обнаружения состояния безопасности среды выполнения в приложение Xamarin.Android на этапе построения, чтобы обнаружить запуск приложения на устройстве с административным доступом и отреагировать соответствующим образом.
Дополнительные сведения о настройке Dotfuscator CE см. в разделе Использование Dotfuscator Community Edition с Xamarin. После настройки Dotfuscator CE будет автоматически защищать каждую создаваемую сборку.
Объединение сборок в машинный код
Если этот параметр включен, сборки объединяются в общую библиотеку машинного кода. Это позволяет сжимать сборки и получать файлы .apk меньшего размера. Сжатие сборок также обеспечивает минимальную обфускацию, на которую не следует полагаться.
Этот параметр требует наличия лицензии Enterprise и доступен только при отключении параметра Использовать Fast Deployment. Параметр Объединить сборки в машинный код отключен по умолчанию.
Обратите внимание, что параметр Объединить в машинный кодне означает, что сборки компилируются в машинный код. Параметр Компиляция AOT нельзя использовать для компиляции сборок в машинный код.
Компиляция AOT
Параметр Компиляция AOT (на странице Свойства упаковки страницы) активирует компиляцию AOT (Ahead-of-Time) сборок. Если этот параметр включен, издержки при запуске JIT (Just In Time) уменьшаются путем предварительной компиляции сборки до времени выполнения. Итоговый машинный код включается в пакет APK вместе с нескомпилированными сборками. Это приводит к сокращению времени запуска приложения, но за счет незначительного увеличения размеров APK.
Для использования параметра Компиляция AOT требуется лицензия Enterprise или более высокого уровня. Параметр Компиляция AOT доступен, только если проект настроен для режима «Выпуск». По умолчанию параметр отключен. Дополнительные сведения о компиляции AOT см. в статье об AOT.
Оптимизирующий компилятор LLVM
Оптимизирующий компилятор LLVM создает быстрее скомпилированный код небольшого размера и преобразует AOT-скомпилированные сборки в машинный код, однако это происходит за счет увеличения времени сборки. Компилятор LLVM отключен по умолчанию. Для использования компилятора LLVM сначала необходимо включить параметр Компиляция AOT на странице Свойства упаковки.
Для использования параметра Оптимизирующий компилятор LLVM требуется корпоративная лицензия.
Настройка свойств упаковки
- Visual Studio
- Visual Studio для Mac
Свойства упаковки можно задать в разделе Параметры Android в окне Свойства проекта, как показано на следующем снимке экрана:

Свойства упаковки можно задать в разделе Параметры проекта, как показано на следующем снимке экрана:

Многие из этих свойств, например Использовать общую среду выполнения и Использовать Fast Deployment, предназначены для режима отладки. Тем не менее для режима выпуска приложения предусмотрены другие настройки, которые определяют, как приложение оптимизируется по размеру и скорости выполнения, как обеспечивается защита приложения от незаконного использования и как следует упаковывать приложения для поддержки различных архитектур и ограничений по размеру.
Указание поддерживаемых архитектур
При подготовке приложения Xamarin.Android к выпуску необходимо указать поддерживаемые архитектуры процессоров. Один APK-файл может содержать код для нескольких различных архитектур. О поддержке нескольких архитектур процессоров см. раздел Архитектуры ЦП.
Создание одного пакета (APK) для каждого выбранного ABI
Если этот параметр включен, один пакет APK создается для каждого поддерживаемого ABI (выбираемого на вкладке Дополнительно, как описано в разделе Архитектуры ЦП), а не один большой пакет APK для всех поддерживаемых ABI. Этот параметр доступен, только если проект настроен для режима «Выпуск». По умолчанию параметр отключен.
Multi-DEX
Если параметр Включить Multi-Dex включен, инструменты Android SDK Tools используются для преодоления предела в 65 тысяч методов для формата DEX-файлов. Ограничение в 65 КБ методов основано на количестве методов Java, на которые ссылается приложение (включая методы в любых библиотеках, от которых зависит приложение) — оно не основано на количестве методов, написанных в исходном коде. Если приложение определяет лишь несколько методов, но использует много методов (или большие библиотеки), вероятно, что предел в 65 тысяч будет превышен.
Бывает, что приложение не использует каждый метод в каждой ссылаемой библиотеке. Поэтому можно воспользоваться таким средством, как ProGuard (см. выше), чтобы удалить неиспользуемые методы из кода. Параметр Включить Multi-Dex рекомендуется включать только в случае крайней необходимости, т. е. приложение по-прежнему ссылается на более чем 65 тысяч методов Java даже после использования ProGuard.
Дополнительные сведения о Multi-Dex см. в статье о настройке приложений с более чем 64 тысячами методов.
Пакеты приложений Android
Пакеты приложений отличаются от пакетов APK тем, что их невозможно развернуть непосредственно на устройстве. Скорее, это формат, предназначенный для отправки вместе со всеми ресурсами и скомпилированным кодом. После отправки подписанного пакета приложений в магазине Google Play будет иметься все необходимое для создания и подписывания пакетов APK вашего приложения и их динамической доставки пользователям.
Чтобы включить поддержку пакетов приложений Android, в параметрах проекта Android выберите для свойства Формат пакета Android значение bundle . Прежде чем это сделать, убедитесь, что проект настроен на использование конфигурации Release , поскольку пакеты приложений предназначены только для пакетов выпуска.
Теперь можно создать пакет приложений, выполнив поток архивации. Будет создан пакет приложений для вашего приложения.
Дополнительные сведения о пакетах приложений Android см. в разделе Пакеты приложений Android.
Компилятор
- Visual Studio
- Visual Studio для Mac
После завершения всех описываемых выше действий приложение будет готово для компиляции. Выберите Сборка > перестроить решение , чтобы убедиться, что сборка успешно выполняется в режиме выпуска. Обратите внимание, что на этом шаге еще не создается пакет APK.
В разделе Подписывание пакета приложения более подробно рассматриваются вопросы упаковки и подписывания.
После выполнения всех описанных выше действий скомпилируйте приложение (выберите Собрать > все), чтобы убедиться, что сборка успешно выполняется в режиме выпуска. Обратите внимание, что на этом шаге еще не создается пакет APK.
Архивация для публикации
- Visual Studio
- Visual Studio для Mac
Чтобы начать процесс публикации, щелкните правой кнопкой мыши проект в обозревателе решений и выберите команду контекстного меню Архивировать:

Команда Архивировать запускает диспетчер архивов и начинает процесс архивации пакета приложения, как показано на следующем снимке экрана:

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

При выборе команд Архивировать и Архивировать все автоматически запускается диспетчер архивов. Чтобы запустить диспетчер архивов напрямую, щелкните пункт меню Сервис > Диспетчер архивов. :

Архивы решения можно просмотреть в любое время. Для этого следует щелкнуть правой кнопкой мыши узел Решение и выбрать команду Просмотр архивов:

Диспетчер архивов
В диспетчере архивов представлены область Список решений, область Список архивов, а также панель сведений:

В области Список решений отображаются все решения, для которых существует хотя бы один архивированный проект. Область Список решений включает следующие разделы:
- Текущее решение — отображает текущее решение. Обратите внимание, что эта область может быть пустой, если для текущего решения отсутствует архив.
- Все архивы — отображает все решения, имеющие архив.
- Текстовое поле поиска (вверху) — фильтрует решения, перечисленные в списке Все архивы , в соответствии со строкой поиска, введенной в текстовом поле.
В области Список архивов отображается список всех архивов для выбранного решения. Область Список архивов включает следующие разделы:
- Имя выбранного решения — отображает имя решения, выбранного в списке решений. Все сведения, отображаемые в области Список архивов, относятся к выбранному решению.
- Фильтр платформ — это поле позволяет фильтровать архивы по типу платформы (например, iOS или Android).
- Элементы архива — список архивов для выбранного решения. Для каждого элемента в списке отображаются имя проекта, дата создания и платформа. В процессе архивации или публикации также могут отображаться дополнительные сведения, например информация о ходе выполнения процесса.
В панели сведений представлена дополнительная информация об архиве. Кроме того, из нее пользователь может запустить рабочий процесс распространения или открыть папку, где было создано распространение. В разделе Комментарии к сборке можно добавить комментарии в архив.
Распределение
Если архивированная версия приложения готова к публикации, выберите архив в диспетчере архивов и нажмите кнопку Распространить:

В диалоговом окне Канал распространения приводятся сведения о приложении, информация о ходе выполнения процесса распространения, а также доступные каналы распространения. При первом запуске доступны два варианта:

Вы можете выбирать из следующих каналов распространения:
- Ad-Hoc — сохраняет подписанный пакет APK на диск, который можно загрузить на устройства Android. В разделе Подписывание пакета приложения вы узнаете, как создать удостоверение подписывания Android, как создать новый сертификат подписи для приложений Android и как опубликовать специальную версию приложения на диск. Этот способ удобен для тестирования пакета APK.
- Google Play — публикует подписанный APK-файл в Google Play. В разделе Публикация в Google Play вы узнаете, как подписать пакет APK и опубликовать его в магазине Google Play.
Чтобы начать процесс публикации, выберите Архив сборки > для публикации:

Команда Архивировать для публикации выполняет построение проекта и объединяет его в файл архива. Команда Архивировать все позволяет архивировать все доступные для этого проекты в решении. Любая из этих команд автоматически запускает диспетчер архивов по завершении операции построения и объединения:

В этом примере в диспетчере архивов представлено только архивированное приложение MyApp. Обратите внимание, что в поле комментария можно добавить небольшой комментарий, который будет сохранен вместе с архивом. Чтобы опубликовать архивированную версию приложения Xamarin.Android, выберите приложение в диспетчере архивов и щелкните Подписать и распространить, как показано ниже. В открывшемся диалоговом окне Подписать и распространить будет представлено два варианта:

Здесь можно выбрать канал распространения:
- Ad-Hoc — сохраняет подписанный пакет APK на диск, чтобы его можно было загрузить на устройства Android. Перейдите к разделу Подписывание пакета приложения , чтобы узнать, как создать удостоверение для подписывания Android, создать новый сертификат подписи для приложений Android и опубликовать «нерегламентированное» приложение на диске. Этот способ удобен для тестирования пакета APK.
- Google Play — публикует подписанный APK-файл в Google Play. В разделе Публикация в Google Play вы узнаете, как подписать пакет APK и опубликовать его в магазине Google Play.
Связанные ссылки
- Многоядерные устройства и Xamarin.Android
- Архитектура процессора
- AOT
- Сокращение объемов кода и ресурсов
- Настройка приложений с помощью более чем 64 000 методов

