Criar e converter um mapa de grupo de conteúdo de origemCreate and convert a source content group map

Para preparar seu aplicativo para a instalação de streaming, você precisará criar um mapa de grupo de conteúdo.To get your app ready for streaming install, you'll need to create a content group map. Este artigo irá ajudá-lo com as especificidades de criar e converter um mapa de grupo de conteúdo, fornecendo algumas dicas e truques ao longo do caminho.This article will help you with the specifics of creating and converting a content group map while providing some tips and tricks along the way.

Criar o mapa de grupo de conteúdo de origemCreating the source content group map

Você precisará criar um arquivo SourceAppxContentGroupMap.xml e, em seguida, usar o Visual Studio ou a ferramenta MakeAppx.exe para converter esse arquivo para a versão final:AppxContentGroupMap.xml.You'll need to create a SourceAppxContentGroupMap.xml file, and then either use Visual Studio or the MakeAppx.exe tool to convert this file to the final version: AppxContentGroupMap.xml. É possível pular uma etapa criando o AppxContentGroupMap.xml do zero, mas é recomendável (e geralmente mais fácil) criar o SourceAppxContentGroupMap.xml e convertê-lo, uma vez que caracteres curinga não são permitidos no AppxContentGroupMap.xml (e eles são muito úteis).It's possible to skip a step by creating the AppxContentGroupMap.xml from scratch, but it's recommended (and generally easier) to create the SourceAppxContentGroupMap.xml and convert it, since wildcards are not allowed in the AppxContentGroupMap.xml (and they're really helpful).

Vamos examinar um cenário simples em que a instalação do streaming de aplicativos é benéfica.Let's walk through a simple scenario where app streaming install is beneficial.

Digamos que você criou um jogo, mas o tamanho do seu aplicativo final é de mais de 100 GB.Say you've created a game, but the size of your final app is over 100 GB. Isso vai levar muito tempo para baixar da Microsoft Store, o que pode ser inconveniente.That's going to take a long time to download from the Microsoft Store, which can be inconvenient. Se você optar por usar a instalação de streaming de aplicativo, poderá especificar a ordem na qual os arquivos do aplicativo serão baixados.If you choose to use app streaming install, you can specify the order in which your app's files are downloaded. Ao dizer à loja que faça o download de arquivos essenciais primeiro, o usuário poderá se envolver com seu aplicativo mais cedo, enquanto outros arquivos não essenciais serão baixados em segundo plano.By telling the Store to download essential files first, the user will be able to engage with your app sooner while other non-essential files are downloaded in the background.

Observação

Usar a instalação do streaming de aplicativos depende muito da organização de arquivos do seu aplicativo.Using app streaming install heavily relies on your app's file organization. É recomendável que você pense no layout do conteúdo do aplicativo em relação à instalação do streaming de aplicativos assim que possível para tornar o segmento dos arquivos do aplicativo mais simples.It's recommended that you think about your app's content layout with respect to app streaming install as soon as possible to make segmenting your app's files simpler.

Primeiro, vamos criar um arquivo SourceAppxContentGroupMap.xml.First, we'll create a SourceAppxContentGroupMap.xml file.

Antes de entrarmos em detalhes, veja aqui um exemplo de um arquivo simples e completo SourceAppxContentGroupMap.xml:Before we get in to the details, here's an example of a simple, complete SourceAppxContentGroupMap.xml file:

<?xml version="1.0" encoding="utf-8"?>  
<ContentGroupMap xmlns="http://schemas.microsoft.com/appx/2016/sourcecontentgroupmap" 
                 xmlns:s="http://schemas.microsoft.com/appx/2016/sourcecontentgroupmap"> 
    <Required>
        <ContentGroup Name="Required">
            <File Name="StreamingTestApp.exe"/>
        </ContentGroup>
    </Required>
    <Automatic>
        <ContentGroup Name="Level2">
            <File Name="Assets\Level2\*"/>
        </ContentGroup>
        <ContentGroup Name="Level3">
            <File Name="Assets\Level3\*"/>
        </ContentGroup>
    </Automatic>
</ContentGroupMap>

Há dois componentes principais para um mapa de grupos de conteúdo: a seção necessária , que contém o grupo de conteúdo necessário e a seção automática , que pode conter vários grupos de conteúdo automáticos.There are two main components to a content group map: the required section, which contains the required content group, and the automatic section, which can contain multiple automatic content groups.

Grupo de conteúdo necessárioRequired content group

O grupo de conteúdo necessário é um único grupo de conteúdo dentro do elemento <Required> do SourceAppxContentGroupMap.xml.The required content group is a single content group within the <Required> element of the SourceAppxContentGroupMap.xml. Um grupo de conteúdo exigido deve conter todos os arquivos essenciais necessários para iniciar o aplicativo com a experiência mínima do usuário.A required content group should contain all of the essential files necessary to launch the app with the minimal user experience. Devido à compilação nativa do .NET, todo o código (o executável do aplicativo) deve ser parte do grupo necessário, deixando ativos e outros arquivos para os grupos automáticos.Due to .NET Native compilation, all code (the application executable) must be part of the required group, leaving assets and other files for the automatic groups.

Por exemplo, se o seu aplicativo for um jogo, o grupo necessário pode incluir arquivos usados no menu principal ou na tela inicial do jogo.For example, if your app is a game, the required group may include files used in the main menu or game home screen.

Veja o trecho do nosso arquivo de exemplo original SourceAppxContentGroupMap.xml:Here's the snippet from our original SourceAppxContentGroupMap.xml example file:

<Required>
    <ContentGroup Name="Required">
        <File Name="StreamingTestApp.exe"/>
    </ContentGroup>
</Required>

Há algumas coisas importantes a serem observadas aqui:There are a few important things to notice here:

  • O <ContentGroup> dentro do elemento <Required>deve ser nomeado para "Necessário."The <ContentGroup> within the <Required> element must be named "Required." Este nome é reservado apenas para o grupo de conteúdo necessário e não pode ser usado com nenhum outro<ContentGroup> no mapa do grupo de conteúdo final.This name is reserved for the required content group only, and cannot be used with any other <ContentGroup> in the final content group map.
  • Há apenas um <ContentGroup>.There's only one <ContentGroup>. Isso é intencional, uma vez que deve haver apenas um grupo de arquivos essenciais.This is intentional, since there should be only one group of essential files.
  • O arquivo neste exemplo é um único arquivo .exe.The file in this example is a single .exe file. Um grupo de conteúdo necessário não está restrito a um arquivo, pode haver vários.A required content group isn't restricted to one file, there can be several.

Uma maneira fácil de começar a escrever este arquivo é abrir uma nova página em seu editor de texto favorito, clicar rapidamente a função "Salvar como" do seu arquivo na pasta do projeto do seu aplicativo e nomear o arquivo recém-criado: SourceAppxContentGroupMap.xml.An easy way to get started writing this file is to open up a new page in your favorite text editor, do a quick "Save As" of your file to your app's project folder, and name your newly created file: SourceAppxContentGroupMap.xml.

Importante

Se você estiver desenvolvendo um aplicativo C++, precisará ajustar as propriedades do arquivo do seu SourceAppxContentGroupMap.xml .If you are developing a C++ app, you will need to adjust the file properties of your SourceAppxContentGroupMap.xml. Defina a propriedade Content para verdadeiro e a propriedade File Type para arquivo XML.Set the Content property to true and the File Type property to XML File.

Quando você estiver criando o SourceAppxContentGroupMap.xml, é útil tirar proveito do uso de curingas em nomes de arquivo, para obter mais informações, consulte a seção Dicas e truques para o uso de curingas.When you're creating the SourceAppxContentGroupMap.xml, it's helpful to take advantage of using wildcards in file names, for more info, see the Tips and tricks for using wildcards section.

Se você desenvolveu seu aplicativo usando o Visual Studio, recomenda-se que você inclua isso no seu grupo de conteúdo necessário:If you developed your app using Visual Studio, it's recommended that you include this in your required content group:

<File Name="*"/>
<File Name="WinMetadata\*"/>
<File Name="Properties\*"/>
<File Name="Assets\*Logo*"/>
<File Name="Assets\*SplashScreen*"/>

Adicionar o nome do arquivo curinga simples incluirá arquivos adicionados ao diretório do projeto do Visual Studio, como o executável do aplicativo ou DLLs.Adding the single wildcard file name will include files added to the project directory from Visual Studio, such as the app executable or DLLs. As pastas WinMetadata e Propriedades devem incluir as outras pastas que o Visual Studio gera.The WinMetadata and Properties folders are to include the other folders Visual Studio generates. Os curingas dos ativos são para selecionar as imagens de Logo e SplashScreen necessárias para que o aplicativo seja instalado.The Assets wildcards are to select the Logo and SplashScreen images that are necessary for the app to be installed.

Note que você não pode usar o curinga duplo "**", na raiz da estrutura do arquivo para incluir todos os arquivos no projeto, pois isso irá falhar ao tentar converter SourceAppxContentGroupMap.xml para o AppxContentGroupMap.xml final.Note that you cannot use the double wild card, "**", at the root of the file structure to include every file in the project since this will fail when attempting to convert SourceAppxContentGroupMap.xml to the final AppxContentGroupMap.xml.

Também é importante observar que os arquivos de pegada (AppxManifest.xml, AppxSignature.p7x, resources.pri, etc.) não devem ser incluídos no mapa do grupo de conteúdo.It's also important to note that footprint files (AppxManifest.xml, AppxSignature.p7x, resources.pri, etc.) should not be included in the content group map. Se os arquivos de pegada estiverem incluídos dentro de um dos nomes de arquivo curinga que você especificar, eles serão ignorados.If footprint files are included within one of the wildcard file names you specify, they will be ignored.

Grupos de conteúdo automáticosAutomatic content groups

Grupos de conteúdo automáticos são os recursos que são baixados em segundo plano enquanto o usuário está interagindo com os grupos de conteúdo já baixados.Automatic content groups are the assets that are downloaded in the background while the user is interacting with the already downloaded content groups. Estes contêm quaisquer arquivos adicionais que não são essenciais para o lançamento do aplicativo.These contain any additional files that are not essential to launching the app. Por exemplo, você pode dividir grupos de conteúdo automáticos em diferentes níveis, definindo cada nível como um grupo de conteúdo separado.For example, you could break up automatic content groups in to different levels, defining each level as a separate content group. Conforme observado na seção do grupo de conteúdo necessário: devido à compilação .NET Native, todo o código (o executável do aplicativo) deve fazer parte do grupo desejado, deixando ativos e outros arquivos para os grupos automáticos.As noted in the required content group section: due to .NET Native compilation, all code (the application executable) must be part of the required group, leaving assets and other files for the automatic groups.

Vamos dar uma olhada no grupo de conteúdo automático do nosso exemplo SourceAppxContentGroupMap.xml:Let's take a closer look at the automatic content group from our SourceAppxContentGroupMap.xml example:

<Automatic>
    <ContentGroup Name="Level2">
        <File Name="Assets\Level2\*"/>
    </ContentGroup>
    <ContentGroup Name="Level3">
        <File Name="Assets\Level3\*"/>
    </ContentGroup>
</Automatic>

O layout do grupo automático é bastante semelhante ao grupo necessário, com poucas exceções:The layout of the automatic group is pretty similar to the required group, with a few exceptions:

  • Existem vários grupos de conteúdo.There are multiple content groups.
  • Grupos de conteúdo automáticos podem ter nomes exclusivos, exceto o nome "Necessário", que está reservado para o grupo de conteúdo desejado.Automatic content groups can have unique names except for the name "Required" which is reserved for the required content group.
  • Os grupos de conteúdo automático não podem conter qualquer arquivo do grupo de conteúdo necessário.Automatic content groups cannot contain any files from the required content group.
  • Um grupo de conteúdo automático pode conter arquivos que também estão em outros grupos de conteúdo automático.An automatic content group can contain files that are also in other automatic content groups. Os arquivos serão baixados apenas uma vez, e serão baixados com o primeiro grupo de conteúdo automático que os contém.The files will be downloaded only once, and will be downloaded with the first automatic content group that contains them.

Dicas e truques para o uso de curingasTips and tricks for using wildcards

O layout do arquivo para os mapas de grupos de conteúdo é sempre relativo à sua pasta raiz do projeto.The file layout for content group maps is always relative to your project root folder.

No nosso exemplo, curingas são usados em ambos elementos <ContentGroup> para recuperar todos os arquivos dentro do nível de um arquivo de "Assets\Level2" ou "Assets\Level3".In our example, wildcards are used within both <ContentGroup> elements to retrieve all files within one file level of "Assets\Level2" or "Assets\Level3." Se você estiver usando uma estrutura de pastas mais profunda, você pode usar o curinga duplo:If you're using a deeper folder structure, you can use the double wildcard:

<ContentGroup Name="Level2">
    <File Name="Assets\Level2\**"/>
</ContentGroup>

Você também pode usar curingas com texto para nomes de arquivos.You can also use wildcards with text for file names. Por exemplo, se você deseja incluir todos os arquivos em sua pasta "Ativos" com um nome de arquivo que contenha "Nível 2", você pode usar algo assim:For example, if you want to include every file in your "Assets" folder with a file name that contains "Level2" you can use something like this:

<ContentGroup Name="Level2">
    <File Name="Assets\*Level2*"/>
</ContentGroup>

Converter SourceAppxContentGroupMap.xml em AppxContentGroupMap.xmlConvert SourceAppxContentGroupMap.xml to AppxContentGroupMap.xml

Para converter o SourceAppxContentGroupMap.xml para a versão final, AppxContentGroupMap.xml, você pode usar o Visual Studio 2017 ou a ferramenta MakeAppx.exe de linha de comando.To convert the SourceAppxContentGroupMap.xml to the final version, AppxContentGroupMap.xml, you can use Visual Studio 2017 or the MakeAppx.exe command line tool.

Para usar o Visual Studio para converter seu mapa de grupo de conteúdo:To use Visual Studio to convert your content group map:

  1. Adicione o SourceAppxContentGroupMap.xmlpara sua pasta do projetoAdd the SourceAppxContentGroupMap.xml to your project folder
  2. Alterar a ação de compilação do SourceAppxContentGroupMap.xml para "AppxSourceContentGroupMap" na janela PropriedadesChange the Build Action of the SourceAppxContentGroupMap.xmlto "AppxSourceContentGroupMap" in the Properties window
  3. Clique com o botão direito do mouse no projeto no explorador de soluçãoRight click the project in the solution explorer
  4. Navegue até a Loja -> Converter Arquivo do Mapa de Grupo de ConteúdoNavigate to Store -> Convert Content Group Map File

Se você não desenvolveu seu aplicativo no Visual Studio, ou se você preferir usar a linha de comando, use a ferramenta MakeAppx.exe para converter seu SourceAppxContentGroupMap.xml.If you didn't develop your app in Visual Studio, or if you just prefer using the command line, use the MakeAppx.exe tool to convert your SourceAppxContentGroupMap.xml.

Um simples comando MakeAppx.exe pode parecer com isto:A simple MakeAppx.exe command might look something like this:

MakeAppx convertCGM /s MyApp\SourceAppxContentGroupMap.xml /f MyApp\AppxContentGroupMap.xml /d MyApp\

A opção /s especifica o caminho para o SourceAppxContentGroupMap.xml, e /f especifica o caminho para o AppxContentGroupMap.xml.The /s option specifies the path to the SourceAppxContentGroupMap.xml, and /f specifies the path to the AppxContentGroupMap.xml. A opção final, /d, especifica qual diretório deve ser usado para expandir caracteres de nome de arquivo, neste caso, é o diretório do projeto do aplicativo.The final option, /d, specifies which directory should be used for expanding file name wildcards, in this case, its the app project directory.

Para obter mais informações sobre as opções que você pode usar com o MakeAppx.exe, abra um prompt de comando, navegue até MakeAppx.exe e digite:For more information about options you can use with MakeAppx.exe, open a command prompt, navigate to MakeAppx.exe and enter:

MakeAppx convertCGM /?

Isso é tudo o que você precisa para deixar seu AppxContentGroupMap.xml final pronto para seu aplicativo!That's all you'll need to get your final AppxContentGroupMap.xml ready for your app! Ainda há mais a fazer para que seu aplicativo esteja totalmente pronto para o Microsoft Store.There's still more to do before your app is fully ready for the Microsoft Store. Para obter mais informações sobre o processo completo de adição de instalação de streaming ao seu aplicativo, confira esta postagem no blog.For more information on the complete process of adding streaming install to your app, check out this blog post.