Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Cada versão do SDK do Windows 10 adiciona novas funcionalidades entusiasmantes que vais querer aproveitar. No entanto, nem todos os seus clientes vão atualizar os seus dispositivos para a versão mais recente do Windows 10 ao mesmo tempo, e deve garantir que a sua aplicação funciona na maior variedade possível de dispositivos. Aqui, mostramos-lhe como desenhar a sua aplicação para que funcione em versões anteriores do Windows 10, mas também aproveite novas funcionalidades sempre que a sua aplicação corre num dispositivo com a atualização mais recente instalada.
Existem 3 passos a seguir para garantir que a sua aplicação suporta a maior variedade possível de dispositivos com Windows 10.
- Primeiro, configure o seu projeto Visual Studio para direcionar as APIs mais recentes. Isto afeta o que acontece quando compilas a tua aplicação.
- Em segundo lugar, faça verificações em tempo de execução para garantir que só chama as APIs presentes no dispositivo onde a sua aplicação está a correr.
- Em terceiro lugar, teste a sua aplicação na Versão Mínima e na Versão Alvo do Windows 10.
Configure o seu projeto Visual Studio
O primeiro passo para suportar múltiplas versões do Windows 10 é especificar as versões suportadas Target e Minimum no seu projeto do Visual Studio.
- Target: A versão do SDK que o Visual Studio utiliza para compilar o código da sua aplicação e executar todas as ferramentas associadas. Todas as APIs e recursos desta versão do SDK estão disponíveis no código da sua aplicação no momento da compilação.
- Minimum: A versão do SDK que suporta a versão mais antiga do sistema operativo em que a sua aplicação pode correr (e para onde será implementada pela loja) e a versão contra a qual Visual Studio compila o código de marcação da sua aplicação.
Durante o tempo de execução, a sua aplicação irá correr contra a versão do sistema operativo onde foi implementada, por isso a sua aplicação lançará exceções se usar recursos ou chamar APIs que não estejam disponíveis nessa versão. Mostramos-lhe como usar verificações em tempo de execução para chamar as APIs corretas mais adiante neste artigo.
As definições de Alvo e Mínimo especificam os limites de um intervalo de versões do SO/SDK. No entanto, se testares a tua aplicação na versão mínima, podes ter a certeza de que ela correrá em qualquer versão entre o Mínimo e o Destino.
Sugestão
O Visual Studio não avisa sobre a compatibilidade da API. É sua responsabilidade testar e garantir que a sua aplicação funciona conforme esperado em todas as versões do sistema operativo entre e incluindo o Mínimo e o Alvo.
Quando cria um novo projeto no Visual Studio 2015, Atualização 2 ou posterior, é solicitado a definir as versões Target e Minimum que a sua aplicação suporta. Por defeito, a Versão Alvo é a versão do SDK mais instalada, e a Versão Mínima é a versão do SDK mais baixa instalada. Podes escolher Target e Minimum apenas nas versões SDK instaladas na tua máquina.
Normalmente recomendamos que mantenha os valores padrão. No entanto, se tiver uma versão Preview do SDK instalada e estiver a escrever código de produção, deve alterar a Versão Alvo do SDK Preview para a versão oficial mais recente do SDK.
Para alterar a versão Mínima e Alvo de um projeto que já foi criado no Visual Studio, vá para Project -> Propriedades -> separador Aplicação -> Segmentação.
Para referência, a tabela seguinte mostra os números de compilação para cada SDK.
| Nome amigável | Versão | Compilação do OS/SDK |
|---|---|---|
| RTM | 1507 | 10240 |
| Atualização de novembro | 1511 | 10586 |
| Atualização do Aniversário | 1607 | 14393 |
| Atualização dos Criadores | 1703 | 15063 |
| Atualização para Criadores do Fall | 1709 | 16299 |
| Atualização de abril de 2018 | 1803 | 17134 |
| Atualização de outubro de 2018 | 1809 | 17763 |
| Atualização de maio de 2019 | 1903 | 18362 |
Pode descarregar qualquer versão publicada do SDK a partir do arquivo de SDKs e emuladores do Windows. Pode descarregar o mais recente SDK Windows Insider Preview a partir da secção de programadores do site Windows Insider.
Para mais informações sobre Windows 10 atualizações, consulte Windows 10 informações de lançamento. Para informações importantes sobre o ciclo de vida do suporte Windows 10, consulte a ficha informativa do ciclo de vida Windows.
Realizar verificações de API
A chave para aplicações adaptativas de versão é a combinação de contratos API e a classe ApiInformation . Esta classe permite-lhe detetar se existe um contrato, tipo ou membro de API especificado, para que possa fazer chamadas de API em segurança em vários dispositivos e versões do sistema operativo.
Contratos API
O conjunto de APIs dentro de uma família de dispositivos é dividido em subdivisões conhecidas como contratos de API. Pode usar o método ApiInformation.IsApiContractPresent para testar a presença de um contrato API. Isto é útil se quiser testar a presença de muitas APIs que existem todas na mesma versão de um contrato de API.
bool isScannerDeviceContract_1_Present =
Windows.Foundation.Metadata.ApiInformation.IsApiContractPresent
("Windows.Devices.Scanners.ScannerDeviceContract", 1);
O que é um contrato de API? Essencialmente, um contrato de API representa uma funcionalidade – um conjunto de APIs relacionadas que, em conjunto, entregam uma funcionalidade específica. Um contrato hipotético de API poderia representar um conjunto de APIs contendo duas classes, cinco interfaces, uma estrutura, dois enums, e assim sucessivamente.
Tipos logicamente relacionados são agrupados num contrato de API e, a partir do Windows 10, cada API do Windows Runtime é membro de algum contrato de API. Com os Contratos de API, está a verificar a disponibilidade de uma funcionalidade ou API específica no dispositivo, verificando efetivamente as capacidades do dispositivo em vez de verificar um dispositivo ou sistema operativo específico. Uma plataforma que implemente qualquer API num contrato API é obrigada a implementar todas as APIs desse contrato API. Isto significa que pode testar se o sistema operativo em execução suporta um determinado contrato de API e, se sim, chamar qualquer uma das APIs desse contrato sem verificar cada uma individualmente.
O maior e mais utilizado contrato API é o Windows. Foundation.UniversalApiContract. Contém a maioria das APIs da Universal Windows Platform. A documentação dos SDKs de extensão da família de dispositivos e dos contratos de API descreve a variedade de contratos de API disponíveis. Verás que a maioria representa um conjunto de APIs funcionalmente relacionadas.
Observação
Se tiver instalado um preview Windows Software Development Kit (SDK) que ainda não está documentado, pode também encontrar informações sobre suporte a contratos de API no ficheiro 'Platform.xml' localizado na pasta de instalação do SDK em '(Program Files (x86))\Windows Kits\10\Platforms<platform><SDK versão>\Platform.xml'.
Código adaptativo de versão e XAML condicional
Em todas as versões do Windows 10, pode usar a classe ApiInformation numa condição do seu código para testar a presença da API que pretende chamar. No seu código adaptativo, pode usar vários métodos da classe, como IsTypePresent, IsEventPresent, IsMethodPresent e IsPropertyPresent, para testar APIs com a granularidade necessária.
Para mais informações e exemplos, veja Código adaptativo de versão.
Se a versão mínima da tua aplicação for build 15063 (Creators Update) ou posterior, podes usar XAML condicional para definir propriedades e instanciar objetos em marcação sem precisares de usar código por trás. O XAML condicional fornece uma forma de usar o método ApiInformation.IsApiContractPresent em marcação.
Para mais informações e exemplos, veja Conditional XAML.
APIs carregadas por atraso
A função QueryOptionalDelayLoadedAPI permite que as aplicações da Loja (que não são autorizadas pela política a chamar LoadLibrary) detetem se a sua função carregada em atraso foi de facto encontrada.
#include <windows.h>
#include <commdlg.h>
#include <libloaderapi2.h>
#include <stdio.h>
EXTERN_C IMAGE_DOS_HEADER __ImageBase;
#define HMODULE_THISCOMPONENT reinterpret_cast<HMODULE>(&__ImageBase)
int __cdecl main(int argc, char** argv)
{
if (QueryOptionalDelayLoadedAPI(HMODULE_THISCOMPONENT,
"comdlg32.dll", "GetOpenFileNameW", 0))
{
printf("GetOpenFileNameW can be called!\n");
}
return 0;
}
Teste a sua aplicação adaptativa de versão
Quando usas código adaptativo de versão ou XAML condicional para escrever uma aplicação adaptativa de versão, precisas de testá-la num dispositivo que execute a Versão Mínima e num dispositivo que execute a Versão Alvo do Windows 10.
Não podes testar todos os caminhos de código condicional num único dispositivo. Para garantir que todos os caminhos de código são testados, precisa de implementar e testar a sua aplicação num dispositivo remoto (ou máquina virtual) que execute a versão mínima suportada do sistema operativo. Para mais informações sobre depuração remota, veja Implementação e depuração de apps UWP.