Поделиться через


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

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

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

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

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

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

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

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

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

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

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

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

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

Совместно с этой функцией можно использовать расширенный режим развертывания, чтобы еще больше ускорить развертывание. Обе сборки, собственные библиотеки, карты типов будут развернуты в каталоге 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" />

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