리소스 패키지Resource Packages

리소스 패키지는 언어를 조각화 하거나 특정 자산의 크기를 사용자 컴퓨터 구성에 따라 Windows에서 자동으로 다운로드 되는 별도의 패키지로 확장 하 여 사용자 디스크 공간을 줄이는 데 유용한 방법을 제공 합니다.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. 사용자가 지역 & 언어 설정에서 os 언어 목록에 새 언어를 추가 하거나 자동 스토어 업데이트를 통해 표시 구성을 변경 하는 경우 os는 장치에 설치 된 모든 앱에 대해 적용 가능한 리소스 패키지를 가져옵니다.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.

Windows SDK 10.0.17095.0 ADDRESOURCEPACKAGEASYNC API 를 통해 개발자는 주문형 앱에 대 한 리소스 패키지를 설치할 수 있습니다.In Windows SDK 10.0.17095.0 AddResourcePackageAsync API allows developers to install a resource package for an app on demand.

AddResourcePackageAsync API를 사용 하는 방법How to use the AddResourcePackageAsync API

  • AddResourcePackageAsync는 응용 프로그램의 PackageFamilyName 다운로드를 시도 하는 리소스 패키지를 고유 하 게 식별 하는 리소스 ID를 사용 합니다.AddResourcePackageAsync takes the PackageFamilyName of the application and the resource ID that uniquely identifies the resource package that is trying to download. 리소스 ID는 리소스 패키지 AppxManifest.xmlResourceId 요소에 해당 합니다.The resource ID corresponds to the ResourceId element in the AppxManifest.xml of the resource package.

  • 응용 프로그램에서 사용할 수 있는 모든 리소스의 병합 된 보기를 가져오려면 응용 프로그램을 다시 시작 해야 합니다.The application must restart to get a merged view of all resources that are available to the application. API는 응용 프로그램을 다시 시작 하기 위해에 전달할 수 있는 ForceTargetApplicationShutdown 옵션을 제공 합니다.The API offers the ForceTargetApplicationShutdown option that can pass to restart the application.

  • 리소스 패키지가 다운로드 될 때 응용 프로그램에 사용할 수 있는 업데이트가 있으면 이전 버전의 앱을 더 이상 사용할 수 없으므로 API가 실패 합니다.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. Applyupdateifavailable 플래그를 전달 하 여 API가 앱을 업데이트 하 고 요청 된 리소스 패키지를 동일한 다운로드의 일부로 가져옵니다.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.

  • API는 응용 프로그램에 표시 될 수 있는 다운로드 진행률을 반환 합니다.The API returns a progress for the download that can display in the application. 또한 스토어에 게시 된 앱의 경우 Microsoft Store 다운로드 및 업데이트 페이지에 리소스 패키지 획득이 표시 되 고 응용 프로그램에 대 한 업데이트로 표시 됩니다.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. 최종 사용자는 Microsoft Store에서 리소스 패키지 다운로드를 일시 중지 하거나 취소 하도록 선택할 수 있습니다.The end user can choose to pause or cancel the download of the resource package from the Microsoft Store.

예제Example

 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
        }
}

유효성 검사Validation

로컬 유효성 검사의 경우 개발자는. msixbundle 또는 .appxbundle를 만들어 로컬 드라이브, 네트워크 공유 또는 웹 서버에서 설치할 수 있습니다.For local validation, developers can create an .msixbundle or .appxbundle and install from your local drive, network share or webserver. 앱에서 AddResourcePackageAsync API를 호출 하면 Windows는 원래 응용 프로그램이 설치 된 위치에서 리소스 패키지를 가져옵니다.When the app calls the AddResourcePackageAsync API, Windows will acquire the resource package from the location where the original application was installed. 이렇게 하면 유효성 검사를 간단 하 게 수행할 수 있습니다.This makes the validation simple. 이 작업을 수행 하면 앱을 배포할 준비가 된 것입니다.Once this works, the app is ready to be deployed.

리소스 패키지 제거Removing resource packages

앱은 REMOVERESOURCEPACKAGEASYNC API를 통해 다운로드 한 리소스 패키지를 제거 하도록 선택할 수 있습니다.The app can choose to remove to remove the resource package(s) it downloaded via the RemoveResourcePackageAsync API. 그러나 사용자 또는 장치 전체에 적용 되는 리소스 패키지는 제거할 수 없습니다.However, Resource packages that are applicable for the user or the device as a whole cannot be uninstalled.

예제Example

 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
    }
}