Процесс сборки

Процесс сборки Xamarin.Android отвечает за объединение процессов: создание Resource.designer.cs, поддержку действий сборки@(AndroidAsset), @(AndroidResource) и других, создание вызываемых в Android оболочек и файла .apk для выполнения на устройствах Android.

Пакеты приложений

В широком смысле существует два типа пакетов приложений для Android (файлы .apk), которые может создавать система сборки Xamarin.Android:

  • Сборки выпуска, которые полностью автономны и не требуют дополнительных пакетов для выполнения. Это пакеты, которые будут предоставлены в магазине приложений.

  • Сборки отладки, которые противоположны сборкам выпуска.

Эти типы пакетов соответствуют MSBuild, Configuration который создает пакет.

Общая среда выполнения

До Xamarin.Android 11.2 общая среда выполнения представляла собой пару дополнительных пакетов Android, которые предоставляют библиотеку базовых классов (mscorlib.dll и т. д.) и библиотеку привязок Android (Mono.Android.dll и т. д.). Отладочные сборки используют общую среду выполнения вместо библиотеки базовых классов и привязок в пакете приложения для Android, благодаря чему размер пакета отладки меньше.

Общую среду выполнения можно отключить в отладочных сборках, установив для свойства $(AndroidUseSharedRuntime)Falseсвойство в .

Поддержка общей среды выполнения была удалена в Xamarin.Android 11.2.

Быстрое развертывание

Быстрое развертывание обеспечивает дополнительное сжатие пакета приложения Android. Это достигается за счет исключения сборок приложения из пакета, а также развертывания сборок приложения непосредственно во внутреннем каталоге files приложения, обычно расположенном в /data/data/com.some.package. Внутренний каталог files не является глобальной папкой, доступной для записи, поэтому для выполнения всех команд для копирования файлов в этот каталог используется средство run-as.

Этот процесс ускоряет цикл сборки, развертывания и отладки, потому что если изменяются только сборки, пакет не переустанавливается. C целевым устройством повторно синхронизируются только обновленные сборки.

Предупреждение

Быстрое развертывание на устройствах, которые блокируют run-as, в число которых зачастую входят устройства старше Android 5.0, завершается сбоем.

Быстрое развертывание включено по умолчанию. Чтобы отключить его в отладочных сборках, нужно установить для свойства $(EmbedAssembliesIntoApk) значение True.

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

Проекты MSBuild

Процесс сборки Xamarin.Android основан на MSBuild, который также является файлом проекта и используется в Visual Studio для Mac и Visual Studio. Обычно пользователям не нужно изменять файлы MSBuild вручную. Интегрированная среда разработки создает полностью функциональные проекты и обновляет их с помощью внесенных изменений и автоматически вызывает целевые объекты сборки по мере необходимости.

Опытным пользователям может потребоваться сделать что-то, не поддерживаемое графическим интерфейсом IDE, поэтому процесс сборки настраивается путем непосредственного редактирования файла проекта. На этой странице описаны только функции и настройки Xamarin.Android. Многие другие возможности возможны с обычными элементами, свойствами и целевыми объектами MSBuild.

Привязка проектов

С проектами привязки используются следующие свойства MSBuild:

Создание Resource.designer.cs

Для управления созданием файла Resource.designer.cs используются следующие свойства MSBuild:

Свойства подписи

Свойства подписи контролируют, как подписывается пакет приложений, чтобы его можно было установить на устройство Android. Чтобы ускорить итерацию сборки, задачи Xamarin.Android не подписывают пакеты во время процесса сборки, потому что это выполняется довольно медленно. Вместо этого они подписываются (если необходимо) перед установкой или во время экспорта с помощью IDE или целевого объекта Install. Вызов целевого объекта SignAndroidPackage приведет к созданию пакета с суффиксом -Signed.apk в выходном каталоге.

По умолчанию целевой объект подписи генерирует ключ подписи отладки, если это необходимо. Если вы хотите использовать определенный ключ, например, на сервере сборки, можно использовать следующие свойства MSBuild:

Сопоставление параметра keytool

Рассмотрим следующий вызов keytool:

$ keytool -genkey -v -keystore filename.keystore -alias keystore.alias -keyalg RSA -keysize 2048 -validity 10000
Enter keystore password: keystore.filename password
Re-enter new password: keystore.filename password
...
Is CN=... correct?
  [no]:  yes

Generating 2,048 bit RSA key pair and self-signed certificate (SHA1withRSA) with a validity of 10,000 days
        for: ...
Enter key password for keystore.alias
        (RETURN if same as keystore password): keystore.alias password
[Storing filename.keystore]

Чтобы использовать хранилище ключей, созданное выше, используйте группу свойств:

<PropertyGroup>
    <AndroidKeyStore>True</AndroidKeyStore>
    <AndroidSigningKeyStore>filename.keystore</AndroidSigningKeyStore>
    <AndroidSigningStorePass>keystore.filename password</AndroidSigningStorePass>
    <AndroidSigningKeyAlias>keystore.alias</AndroidSigningKeyAlias>
    <AndroidSigningKeyPass>keystore.alias password</AndroidSigningKeyPass>
</PropertyGroup>

Точки расширения сборки

Система сборки Xamarin.Android предоставляет несколько общедоступных точек расширения для пользователей, желающих присоединиться к нашему процессу сборки. Чтобы использовать одну из этих точек расширения, необходимо добавить настраиваемый целевой объект в соответствующее свойство MSBuild в PropertyGroup. Например:

<PropertyGroup>
   <AfterGenerateAndroidManifest>
      $(AfterGenerateAndroidManifest);
      YourTarget;
   </AfterGenerateAndroidManifest>
</PropertyGroup>

К точкам расширения относятся:

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

Определения целевых объектов

Относящиеся к Xamarin.Android части процесса сборки определены в $(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets, но для создания сборки также требуются обычные языковые файлы целей сборки, такие как Microsoft.CSharp.targets.

Следующие свойства сборки следует задать перед импортом языковых файлов целей сборки:

<PropertyGroup>
  <TargetFrameworkIdentifier>MonoDroid</TargetFrameworkIdentifier>
  <MonoDroidVersion>v1.0</MonoDroidVersion>
  <TargetFrameworkVersion>v2.2</TargetFrameworkVersion>
</PropertyGroup>

Все эти целевые объекты и свойства могут быть включены в C # путем импорта Xamarin.Android.CSharp.targets:

<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />

Этот файл можно легко адаптировать для других языков.