Вводные сведения о пакетах ресурсовIntroduction to asset packages

Важно!

Если вы планируете отправить приложение в Store, необходимо обратиться в службу поддержки разработчиков Windows и получить разрешение на использование пакетов активов.If you intend to submit your app to the Store, you need to contact Windows developer support and get approval to use asset packages.

Пакеты активов — это тип пакета, функционирующий как централизованное расположение для общих файлов приложения, который, по сути, устраняет необходимость в использовании дублирующих файлов в пакетах архитектуры.Asset packages are a type of package that act as a centralized location for an application’s common files – effectively eliminating the necessity for duplicated files throughout its architecture packages. Пакеты активов аналогичны пакетам ресурсов в том, что оба типа пакетов содержат статическое содержимое, необходимое для работы приложения. Их различие в том, что все пакеты активов загружаются всегда, независимо от системной архитектуры, языка и масштаба отображения, настроенных у пользователя.Asset packages are similar to resource packages in that they are both designed to contain static content needed for your app to run, but different in that all asset packages are always downloaded, regardless of the user’s system architecture, language, or display scale.

Схема объединения пакета активов

Поскольку пакеты активов содержат все независимые от архитектуры, языка и масштаба файлы, использование пакетов активов позволяет уменьшить общий размер упакованного приложения (поскольку файлы не дублируются), что позволяет управлять использованием места на диске для локальной разработки крупных приложений и управлять пакетами приложения в целом.Because asset packages contain all the architecture, language, and scale agnostic files, leveraging asset packages results in a reduced overall packaged app size (since these files are no longer duplicated), helping you manage local development disk space usage for large apps and manage your app’s packages in general.

Как пакеты активов влияют на публикацию?How do asset packages affect publishing?

Самым очевидным преимуществом пакетов активов является уменьшение размера упакованных приложений.The most obvious benefit of asset packages is the reduced size of packaged apps. Небольшие пакеты приложений ускоряют процедуру публикации приложения, так как Store приходится обрабатывать меньше файлов; однако это не основное преимущество пакетов активов.Smaller app packages speed up the app’s publishing process by letting the Store process less files; however this is not the most important benefit of asset packages.

При создании пакета активов можно указать, нужно ли разрешить выполнение пакета.When an asset package is created, you can specify whether the package should be allowed to execute. Поскольку пакеты активов должны содержать только не зависящие от архитектуры файлы, они, как правило, не содержат файлы .dll или .exe, поэтому выполнять пакеты активов, как правило, не требуется.Since asset packages should contain only architecture agnostic files, they generally don't contain any .dll or .exe files, so for asset packages typically don't need to execute. Важность этого отличия в том, что в процессе публикации все выполняемые пакеты необходимо сканировать, чтобы убедиться в отсутствии в них вредоносных программ, и такое сканирование занимает больше времени, если пакеты большие.The importance of this distinction is that during the publishing process, all executable packages must be scanned to ensure that they do not contain malware, and this scanning process takes longer for larger packages. Однако если пакет не предназначен для выполнения, при установке приложения будет гарантирована невозможность выполнения файлов из этого пакета.However, if a package is designated as non-executable, the installation of the app will ensure that files contained in this package cannot be executed. Эта гарантия устраняет необходимость в полном сканировании пакета и существенно сокращает продолжительность сканирования на наличие вредоносных программ при публикации приложения (и во время обновлений), что существенно ускоряет публикацию приложений, использующих пакеты активов.This guarantee eliminates the need for a complete package scan and will greatly reduce the malware scan time during the publication of the app (and for updates too) - thus making publishing significantly faster for apps that use asset packages. Обратите внимание, что для получения этого преимущества публикации также необходимо использовать пакеты приложений с плоскими пакетами, поскольку это позволяет хранилищу обрабатывать каждый файл пакета. appx или. msix в параллельном режиме.Note that flat bundle app packages must also be used to get this publishing benefit since this is what allows the Store to process each .appx or .msix package file in parallel.

Нужно ли использовать пакеты активов?Should I use asset packages?

Обновление структуры файлов приложения с целью использования пакетов активов может обеспечить ощутимые преимущества: уменьшенный размер пакета и оптимизация циклов разработки.Updating the file structure of your app to leverage the use of asset packages can yield tangible benefits: reduced package size and leaner development iterations. Если ваши пакеты архитектуры содержат значительное количество общих файлов или если большая часть приложения состоит из невыполняемых файлов, настоятельно рекомендуется потратить время на преобразование содержимого и использовать пакеты активов.If your architecture packages all contain significant amount of files in common or if the bulk of your app is made up of non-executing files, it is highly recommended that you invest the extra time to convert to using asset packages.

Однако стоит предупредить, что пакеты активов не являются средством обеспечить опциональность содержимого приложения.However, it should be cautioned that asset packages are not a means to achieve app content optionality. Файлы пакета активов не являются необязательными и загружаются всегда независимо от архитектуры, языка и масштаба целевого устройства: любое необязательное содержимое, которое должно поддерживать ваше приложение, необходимо реализовать с помощью необязательных пакетов.Asset package files are non-optional and will always be downloaded regardless of the target device’s architecture, language, or scale - any optional content that you want your app to support should be implemented using optional packages.

Создание пакета активовHow to create an asset package

Самый простой способ создания пакетов активов — использование макета упаковки.The easiest way to create asset packages is using the packaging layout. Однако пакеты активов также можно создать вручную с помощью MakeAppx.exe.However, asset packages can also be created manually using MakeAppx.exe. Чтобы указать, какие файлы включить в пакет активов, необходимо создать файл сопоставления.To specify which files to include in the asset package, you will need to create a “mapping file”. В этом примере единственный файл в пакете активов — Video.mp4, однако указать здесь необходимо все файлы пакета активов.In this example, the only file in the asset package is "Video.mp4”, but all the asset package’s files should be listed here. Обратите внимание, что описатель ResourceDimensions в ResourceMetadata пропущен для пакетов активов (по сравнению с файлом сопоставления для пакетов ресурсов).Note that the ResourceDimensions specifier in ResourceMetadata is omitted for asset packages (as compared to a mapping file for resource packages).

[ResourceMetadata]
"ResourceId"        "Videos"

[Files]
"Video.mp4"         "Video.mp4"

Используйте одну из этих команд для создания пакета ресурсов с помощью MakeAppx.exe (для MSIX и appx).Use one of these commands to create the asset package using MakeAppx.exe (for MSIX and .appx).

MakeAppx.exe pack /r /m AppxManifest.xml /f MappingFile.txt /p Videos.appx
MakeAppx.exe pack /r /m AppxManifest.xml /f MappingFile.txt /p Videos.msix

Следует отметить, что все файлы, на которые есть ссылка в AppxManifest (файлы логотипа), невозможно переместить в пакеты активов, эти файлы необходимо продублировать в пакетах архитектуры.It should be noted here that all of the files referenced in the AppxManifest (the logo files) cannot be moved into asset packages – these files must be duplicated across architecture packages.

Пакеты активов также не должны содержать файл resources.pri; использовать MRT для доступа к файлам пакета активов невозможно.Asset packages should also not contain a resources.pri; MRT cannot be used to access asset package files. Чтобы узнать больше о том, как осуществлять доступ к файлам пакета активов и почему пакеты активов требуют установки приложения на диск NTFS, изучите раздел Разработка с использованием пакетов активов и сворачивания пакетов.To learn more about how to access asset package files and why asset packages require your app to be installed to an NTFS drive, see Developing with asset packages and package folding.

Чтобы проконтролировать, возможно ли выполнение пакета активов, можно воспользоваться командой uap6:AllowExecution в элементе Properties манифеста AppxManifest. Кроме того, необходимо добавить uap6 к элементу верхнего уровня Package, чтобы получить следующее:To control whether an asset package is allowed to execute or not, you can use uap6:AllowExecution in the Properties element of the AppxManifest You must also add uap6 to the top level Package element to become the following:

<Package IgnorableNamespaces="uap uap6" 
xmlns:uap6="http://schemas.microsoft.com/appx/manifest/uap/windows10/6" 
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" 
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10">

Если не указано, значение по умолчанию для AllowExecution — true. Задайте это значение равным false для пакетов активов без выполняемых файлов, чтобы ускорить публикацию.If not specified, the default value for AllowExecution is true – set it to false for asset packages with no executables to make publishing faster.