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

Процесс сборки .NET для Android отвечает за объединение всего: создание , поддержка , , и другие действия сборки, создание android-оболочек и создание , предназначенного для выполнения на устройствах Android.

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

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

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

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

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

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

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

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

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

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

Быстрое развертывание поддерживается как для форматов пакетов .apk, так и .aab. Он включен по умолчанию и может быть отключен в сборках отладки, установив для свойства значение True. Обратите внимание, что использование .aab с быстрым развертыванием будет медленнее, чем .apk, потому что файл .aab должен быть обработан через bundletool для последующей упаковки и установки.

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

Проекты MSBuild

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

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

Связывание проектов

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

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

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

Свойства подписывания

Свойства подписи контролируют, как подписывается пакет приложений, чтобы его можно было установить на устройство Android. Чтобы обеспечить быструю итерацию сборки, задачи .NET для 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>

Разработка точек расширения

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

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

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

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

Целевые определения

В .NET для 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" />

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