Pacotes de recursosResource Packages

Os pacotes de recursos oferecem uma ótima maneira de reduzir a superfície de disco dos usuários ao segmentar a linguagem ou o ativo específico de escala em pacotes separados que são baixados automaticamente pelo Windows, dependendo da configuração do computador dos usuários.Resource packages offers a great way to reduce users disk footprint by segmenting language or scale specific asset into separate packages that are downloaded automatically by Windows depending on the users machine configuration. Se o usuário adicionar um novo idioma à lista de idiomas do sistema operacional na região & configurações de idioma ou alterar a configuração de exibição, em uma atualização de repositório automática, o sistema operacional buscará pacotes de recursos aplicáveis para todos os aplicativos instalados no dispositivo.If the user adds a new language to their list of OS languages in Region & language settings or changes the display configuration, across an automatic store update, the OS will fetch applicable resource packages for all installed apps on the device.

Na API SDK do Windows 10.0.17095.0 AddResourcePackageAsync permite que os desenvolvedores instalem um pacote de recursos para um aplicativo sob demanda.In Windows SDK 10.0.17095.0 AddResourcePackageAsync API allows developers to install a resource package for an app on demand.

Como usar a API AddResourcePackageAsyncHow to use the AddResourcePackageAsync API

  • AddResourcePackageAsync usa o PackageFamilyName do aplicativo e a ID do recurso que identifica exclusivamente o pacote de recursos que está tentando baixar.AddResourcePackageAsync takes the PackageFamilyName of the application and the resource ID that uniquely identifies the resource package that is trying to download. A ID do recurso corresponde ao elemento ResourceId na AppxManifest.xml do pacote de recursos.The resource ID corresponds to the ResourceId element in the AppxManifest.xml of the resource package.

  • O aplicativo deve ser reiniciado para obter uma exibição mesclada de todos os recursos que estão disponíveis para o aplicativo.The application must restart to get a merged view of all resources that are available to the application. A API oferece a opção ForceTargetApplicationShutdown que pode passar para reiniciar o aplicativo.The API offers the ForceTargetApplicationShutdown option that can pass to restart the application.

  • Se houver uma atualização disponível para o aplicativo quando o pacote de recursos estiver sendo baixado, a API falhará, pois a versão mais antiga do aplicativo não estará mais disponível.If there is an update available for the application when the resource package is being downloaded, the API will fail as the older version of the app is no longer available. Ao passar o sinalizador ApplyUpdateIfAvailable , a API atualizará o aplicativo, bem como obterá o pacote de recursos solicitado como parte do mesmo download.By passing in the ApplyUpdateIfAvailable flag, the API will update the app as well as get the requested resource package as part of the same download.

  • A API retorna um progresso para o download que pode ser exibido no aplicativo.The API returns a progress for the download that can display in the application. Observe também que, para aplicativos publicados na loja, a aquisição do pacote de recursos aparece na página Microsoft Store downloads e atualizações e aparece como uma atualização para seu aplicativo.Also note that for apps published to the store, the resource package acquisition shows up in the Microsoft Store downloads and updates page and shows up as an update to your application. O usuário final pode optar por pausar ou cancelar o download do pacote de recursos do Microsoft Store.The end user can choose to pause or cancel the download of the resource package from the Microsoft Store.

ExemploExample

 private async void DownloadGermanResourcePackage(object sender, RoutedEventArgs e)
{            
    // ResourceId that is unique to the resource package
    string resourceId = "split.language-de";
    // Warn user that application will need to restart.
    // To take update if available pass in the ApplyUpdateIfAvailable flag
    var packageCatalog = PackageCatalog.OpenForCurrentPackage();
    PackageCatalogAddResourcePackageResult result = await packageCatalog.AddResourcePackageAsync("29270depappf.CaffeMacchiato_gah1vdar1nn7a", resourceId, 
        AddResourcePackageOptions.ApplyUpdateIfAvailable | AddResourcePackageOptions.ForceTargetApplicationShutdown)
        .AsTask<PackageCatalogAddResourcePackageResult, PackageInstallProgress>(new Progress
        (progress =>;
        {
                // Draw progress
        }));

        if (result.ExtendedError != null)
        {
                //Display error or retry if needed
        }
}

ValidaçãoValidation

Para a validação local, os desenvolvedores podem criar um. msixbundle ou. appxbundle e instalar a partir da unidade local, do compartilhamento de rede ou do servidor da Web.For local validation, developers can create an .msixbundle or .appxbundle and install from your local drive, network share or webserver. Quando o aplicativo chamar a API AddResourcePackageAsync, o Windows adquirirá o pacote de recursos do local onde o aplicativo original foi instalado.When the app calls the AddResourcePackageAsync API, Windows will acquire the resource package from the location where the original application was installed. Isso torna a validação simples.This makes the validation simple. Quando isso funcionar, o aplicativo estará pronto para ser implantado.Once this works, the app is ready to be deployed.

Removendo pacotes de recursosRemoving resource packages

O aplicativo pode optar por remover para remover os pacotes de recursos baixados por meio da API RemoveResourcePackageAsync.The app can choose to remove to remove the resource package(s) it downloaded via the RemoveResourcePackageAsync API. No entanto, os pacotes de recursos que são aplicáveis para o usuário ou para o dispositivo como um todo não podem ser desinstalados.However, Resource packages that are applicable for the user or the device as a whole cannot be uninstalled.

ExemploExample

 private async void RemoveResourcePackage(object sender, RoutedEventArgs e)
{            
    var packageCatalog = PackageCatalog.OpenForCurrentPackage();
    List resourcePackagesToRemove = new List();
    resourcePackagesToRemove.Add("split.language-de");
    //Warn user that application will be restarted
    var removePackageResult = await packageCatalog.RemoveResourcePackagesAsync(resourcePackagesToRemove);
    if (removePackageResult.ExtendedError != null)
    {
        // display error
    }
}