Criar um aplicativo OpenGL ES no Android e iOS

Você pode criar soluções e projetos do Visual Studio para aplicativos iOS e Android que compartilhem código comum. Este artigo orienta você por meio de um modelo de solução combinado. Ele cria um aplicativo iOS e um aplicativo de Atividade Nativa do Android. Os aplicativos têm código C++ em comum que usa o OpenGL ES para exibir o mesmo cubo de rotação animado em cada plataforma. O OpenGL ES (GLES [OpenGL para Sistemas Incorporados]) é uma API gráfica 2D e 3D. Ele tem suporte em muitos dispositivos móveis.

Requisitos

Importante

O suporte a OpenGL não está mais disponível. Ele foi disponibilizado pela última vez no Visual Studio 17.3.

Aqui estão os requisitos do sistema para criar um aplicativo OpenGL ES para iOS e Android. Se este não for o caso, instale a carga de trabalho do Desenvolvimento Móvel com C++ no Instalador do Visual Studio. Para obter os modelos do OpenGL ES e criar para iOS, inclua as ferramentas de desenvolvimento opcionais do IOS C++. Para criar para Android, instale as ferramentas de desenvolvimento do Android C++ e as ferramentas de terceiros necessárias: Android NDK, Apache Ant e Google Android Emulator.

Para melhorar o desempenho do emulador em plataformas Intel, uma opção é instalar o HAXM (Intel Hardware Accelerated Execution Manager). Para instruções detalhadas, confira Instalar desenvolvimento móvel multiplataforma com C++.

Para compilar e testar o aplicativo iOS, você precisará de um computador Mac. Configure-o de acordo com as instruções de instalação. Para saber mais sobre como configurar para desenvolvimento no iOS, confira Instalar e configurar ferramentas para criação usando o iOS.

Criar um projeto de aplicativo OpenGLES

Neste tutorial, primeiro você criará um novo projeto de Aplicativo OpenGL ES. Então, compile e execute o aplicativo padrão em um Android Emulator. Em seguida, você cria o aplicativo para iOS e executa o aplicativo em um dispositivo iOS.

  1. No Visual Studio, escolha Arquivo>Novo>Projeto.

  2. Na caixa de diálogo Novo Projeto, em Modelos, escolha Visual C++>Multiplataforma e, em seguida, escolha o modelo Aplicativo OpenGLES (Android, iOS).

  3. Dê ao aplicativo um nome como MyOpenGLESApp e escolha OK.

    Screenshot of the New Project dialog where the OpenGLES Application project template is selected, with MyOpenGLESApp in the Name textbox.

    O Visual Studio cria a nova solução e abre o Gerenciador de Soluções.

    Screenshot of MyOpenGLESApp in Solution Explorer.

  1. No Visual Studio, escolha Arquivo>Novo>Projeto.

  2. Na caixa de diálogo Criar um projeto, selecione o modelo Aplicativo OpenGLES (Android, iOS) e escolha Avançar.

  3. Na caixa de diálogo Configurar seu novo projeto, insira um nome como MyOpenGLESApp em Nome do projeto e escolha Criar.

    O Visual Studio cria a nova solução e abre o Gerenciador de Soluções.

    Screenshot of MyOpenGLESApp in Solution Explorer.

A nova solução de Aplicativo OpenGL ES inclui três projetos de biblioteca e dois projetos de aplicativo. A pasta Bibliotecas inclui um projeto de código compartilhado. E dois projetos específicos da plataforma que fazem referência ao código compartilhado:

  • MyOpenGLESApp.Android.NativeActivity contém as referências e o código de cola que implementa seu aplicativo como uma Atividade Nativa no Android. Os pontos de entrada do código de associação são implementados em main.cpp, que inclui o código compartilhado comum em MyOpenGLESApp.Shared. Os cabeçalhos pré-compilados estão em pch.h. Esse projeto de aplicativo de Atividade Nativa é compilado em um arquivo (.so) de biblioteca compartilhada que é obtido pelo projeto de MyOpenGLESApp.Android.Packaging.

  • MyOpenGLESApp.iOS.StaticLibrary cria um arquivo (.a) da biblioteca estática do iOS que contém o código compartilhado no MyOpenGLESApp.Shared. Ele está vinculado ao aplicativo criado pelo projeto MyOpenGLESApp.iOS.Application.

  • MyOpenGLESApp.Shared contém o código compartilhado que funciona em várias plataformas. Ele utiliza macros de pré-processador para compilação condicional do código específico da plataforma. O código compartilhado é escolhido pela referência de projeto no MyOpenGLESApp.Android.NativeActivity e no MyOpenGLESApp.iOS.StaticLibrary.

A solução tem dois projetos para compilar aplicativos para as plataformas Android e iOS:

  • MyOpenGLESApp.Android.Packaging cria o arquivo .apk para implantação em um emulador ou dispositivo Android. Esse arquivo contém os recursos e o arquivo AndroidManifest.xml no qual as propriedades do manifesto são definidas. Também contém o arquivo build.xml que controla o processo de build Ant. Ele é definido como o projeto de inicialização por padrão, para que possa ser implantado e executado diretamente no Visual Studio.

  • MyOpenGLESApp.iOS.Application contém os recursos e o código de associação Objective-C para criar um aplicativo iOS vinculado ao código de biblioteca estática C++ em MyOpenGLESApp.iOS.StaticLibrary. Esse projeto cria um pacote de build que é transferido para seu Mac pelo Visual Studio e pelo agente remoto. Quando você compila este projeto, o Visual Studio envia os arquivos e os comandos para compilar e implantar seu aplicativo no Mac.

Criar e executar o aplicativo Android

A solução criada pelo modelo define o aplicativo Android como o projeto padrão. Você pode compilar e executar esse aplicativo para verificar sua instalação e configuração. Para um teste inicial, execute o aplicativo em um dos perfis de dispositivo instalados pelo emulador para Android. Se você preferir testar seu aplicativo em outro destino, poderá carregar o emulador de destino. Ou conecte um dispositivo ao computador.

Para compilar e executar o aplicativo de Atividade Nativa Android

  1. Se ainda não estiver selecionado, escolha x86 na lista suspensa Plataformas da Solução.

    Screenshot of the Solution Platform dropdown with x86 highlighted.

    Use x86 para ter o emulador como destino. Para ter um dispositivo como destino, escolha a plataforma de solução com base no processador do dispositivo. Se a lista Plataformas da Solução não for exibida, escolha Plataformas da Solução na lista Adicionar/Remover Botões e, em seguida, escolha sua plataforma.

  2. No Gerenciador de Soluções, abra o menu de atalho do projeto MyOpenGLESApp.Android.Packaging e, em seguida, escolha Compilar.

    Screenshot of the Solution Explorer window with the shortcut menu for the Android Packaging Project showing the Build command.

    A janela Saída exibe a saída do processo de build para a biblioteca compartilhado Android e o aplicativo Android.

    Screenshot of Build Output for Android projects.

  3. Escolha um dos perfis de dispositivos Android emulados como seu destino de implantação.

    Choose deployment target.

    Você pode ter instalado outros emuladores ou conectado um dispositivo Android. Você pode escolhê-los na lista suspensa de destino de implantação. Para executar o aplicativo, a Plataforma de Solução compilada deverá corresponder à plataforma do dispositivo de destino.

  4. Pressione F5 para iniciar a depuração ou Shift+F5 para iniciar sem depuração.

    O Visual Studio inicia o emulador, que leva vários segundos para carregar e implantar o código. Confira aqui como o aplicativo aparece no emulador:

    Screenshot of the app running in an Android Emulator.

    Quando o aplicativo tiver sido iniciado, você poderá definir pontos de interrupção e usar o depurador para executar o código em etapas, examinar os locais e inspecionar os valores.

  5. Pressione Shift+F5 para parar a depuração.

    O emulador é um processo separado que continua sendo executado. É possível editar, compilar e implantar o código várias vezes no mesmo emulador. Seu aplicativo aparece na coleção de aplicativo no emulador e pode ser iniciado diretamente de lá.

    Os projetos de biblioteca e o aplicativo de Atividade Nativa do Android gerados colocam o código C++ compartilhados em uma biblioteca dinâmica. Ele inclui código de "cola" para interface com a plataforma Android. A maioria do código de aplicativo está na biblioteca. O manifesto, os recursos e as instruções de build estão no projeto de empacotamento. O código compartilhado é chamado de main.cpp no projeto NativeActivity. Para obter mais informações sobre como programar uma Atividade Nativa do Android, consulte a página Conceitos do NDK do Android Developer.

    O Visual Studio compila projetos de Atividade Nativa do Android usando o NDK do Android. Ele usa Clang como o conjunto de ferramentas da plataforma. O Visual Studio mapeia as propriedades do projeto para os comandos compile, link e debug na plataforma de destino. Para obter detalhes, abra a caixa de diálogo Páginas de Propriedade para o projeto MyOpenGLESApp.Android.NativeActivity. Para saber mais sobre as opções de linha de comando, consulte o Manual do usuário do compilador Clang.

Criar e executar o aplicativo iOS em um dispositivo iOS

Você cria e edita o projeto do aplicativo iOS no Visual Studio. Devido às restrições de licenciamento, ele deve ser criado e implantado de um Mac. O Visual Studio comunica-se com um agente remoto em execução no Mac para transferir arquivos de projeto e executar comandos de build, implantação e depuração. Instale e configure seu Mac e o Visual Studio para comunicação antes de compilar o aplicativo iOS. Para obter instruções detalhadas, confira Instalar e configurar as ferramentas para compilar usando iOS. Execute o agente remoto em seu Mac e emparelhe-o com o Visual Studio. Então você pode compilar e executar o aplicativo iOS para verificar sua instalação e configuração.

Para implantar seu aplicativo em um dispositivo iOS, primeiro configure a entrada automática no Xcode. A assinatura automática cria um perfil de provisão para assinar uma compilação do aplicativo.

Para configurar a assinatura automática no Xcode

  1. Se ainda não o fez, instale o Xcode no seu Mac.

  2. Abra o aplicativo Xcode no seu Mac.

  3. Crie um novo projeto Xcode Aplicativo de Modo de Exibição Único. Preencha os campos obrigatórios durante a criação do projeto. Os valores podem ser arbitrários, pois o projeto é usado apenas para criar um perfil de provisionamento usado posteriormente para assinar uma compilação do aplicativo.

  4. Adicione sua ID da Apple que está inscrita em uma conta do Programa de Desenvolvedor da Apple no Xcode. Sua ID da Apple é usada como uma identidade de assinatura para assinar aplicativos. Para adicionar a identidade de assinatura no Xcode, abra o menu do Xcode e escolha Preferências. Selecione Contas e clique no botão Adicionar (+) para adicionar sua ID da Apple. Para obter instruções detalhadas, confira Adicionar sua conta de ID da Apple.

  5. A partir das configurações "Gerais" do projeto Xcode, altere o valor do Identificador de Pacote para com.<NameOfVSProject>, onde <NameOfVSProject> é o mesmo nome do projeto de solução do Visual Studio que você criou. Por exemplo, se você criou um projeto chamado MyOpenGLESApp no Visual Studio, configure Identificador de Pacote como com.MyOpenGLESApp.

    Screenshot of the Xcode bundle identifier.

  6. Para habilitar a assinatura automática, selecione. Gerencie a assinatura automaticamente**.

    Screenshot of Xcode automatic signing value.

  7. Selecione o nome da equipe da ID da Apple que você adicionou como a Equipe de desenvolvimento.

    Screenshot of the Xcode team value.

Criar e executar o aplicativo iOS em um dispositivo iOS

  1. Execute o agente remoto no seu Mac e verifique se o Visual Studio está emparelhado com o agente remoto. Para iniciar o agente remoto, abra uma janela do aplicativo Terminal e digite vcremote. Para obter mais informações, consulte Configurar o agente remoto no Visual Studio.

    Mac Terminal window running vcremote.

  2. Anexe um dispositivo iOS ao seu Mac. Quando você conecta seu dispositivo a um computador pela primeira vez, um alerta pergunta se você confia no computador para acessar seu dispositivo. Habilite o dispositivo para confiar no computador Mac.

  3. No Visual Studio, se ainda não estiver selecionado, escolha a plataforma de solução na lista suspensa Plataformas de Solução com base no processador do dispositivo. Neste exemplo, é um processador ARM64.

    Screenshot of setting the Solution Platform to ARM64.

  4. No Gerenciador de Soluções, abra o menu de atalho para o projeto MyOpenGLESApp.iOS.Application e escolha Descarregar Projeto para descarregar o projeto.

  5. Novamente, abra o menu de atalho para o projeto MyOpenGLESApp.iOS.Application descarregado e escolha Editar project.pbxproj para editar o arquivo do projeto. No arquivo project.pbxproj, procure o atributo buildSettings e adicione DEVELOPMENT_TEAM usando sua ID de equipe da Apple. A captura de tela abaixo mostra um valor de exemplo de 123456ABC para a ID de equipe da Apple. Você pode encontrar o valor da sua ID de equipe da Apple no Xcode. Vá para Configurações da Compilação e passe o mouse sobre o nome da equipe de desenvolvimento para mostrar uma dica de ferramenta. A dica de ferramenta mostra a ID da equipe.

    Screenshot of setting the development team.

  6. Feche o arquivo project.pbxproj, abra o menu de atalho para o projeto MyOpenGLESApp.iOS.Application e escolha Recarregar Projeto para recarregar o projeto.

  7. Agora crie o projeto MyOpenGLESApp.iOS.Application abrindo o menu de atalho do projeto e escolhendo Compilar.

    Using the shortcut menu to build the iOS Application project.

    A janela de Saída exibe a saída do processo de build. Ele mostra os resultados da biblioteca estática do iOS e do aplicativo iOS. No Mac, a janela Terminal executando o agente remoto mostra a atividade de comando e transferência de arquivo.

    No seu computador Mac, você pode ser solicitado a permitir que o codesign acesse seu conjunto de chaves. Escolha Permitir para continuar.

  8. Escolha o seu dispositivo iOS na barra de ferramentas para executar o aplicativo no seu dispositivo conectado ao seu Mac. Se o aplicativo não iniciar, verifique se o dispositivo dá permissão para que o aplicativo implantado seja executado no dispositivo. Essa permissão pode ser definida acessando Configurações>Geral>Gerenciamento de Dispositivo no dispositivo. Selecione sua conta de Aplicativo de Desenvolvedor, insira sua conta e verifique o aplicativo. Tente executar o aplicativo novamente no Visual Studio.

    Screenshot of the iOS app on an iOS device.

    Quando seu aplicativo tiver sido iniciado, você poderá definir pontos de interrupção e usar o depurador do Visual Studio para examinar locais, consultar a pilha de chamadas e inspecionar os valores.

    Screenshot of the Debugger at a breakpoint in the iOS app.

  9. Pressione Shift+F5 para parar a depuração.

    Os projetos de aplicativo e biblioteca do iOS gerados colocam o código C++ em uma biblioteca estática que implementa somente o código compartilhado. A maior parte do código do aplicativo esta no projeto de Application. As chamadas para o código de biblioteca compartilhada neste projeto de modelo são feitas no arquivo GameViewController.m. Para compilar seu aplicativo iOS, o Visual Studio usa o conjunto de ferramentas de plataforma do Xcode, que exige a comunicação com um cliente remoto em execução em um Mac.

    O Visual Studio transfere os arquivos de projeto para o cliente remoto. Em seguida, ele envia comandos para criar o aplicativo usando o Xcode. O cliente remoto envia informações de status de build de volta ao Visual Studio. Quando o aplicativo tiver sido compilado com êxito, use o Visual Studio para enviar comandos para executar e depurar o aplicativo. O depurador no Visual Studio controla o aplicativo em execução no seu dispositivo iOS conectado ao seu Mac. O Visual Studio mapeia as propriedades do projeto para as opções usadas para compilar, vincular e depurar na plataforma de destino iOS. Para obter detalhes de opção de linha de comando do compilador, abra a caixa de diálogo Páginas de Propriedade para o projeto MyOpenGLESApp.iOS.StaticLibrary.

Personalizar seus aplicativos

Você pode modificar o código C++ compartilhado para adicionar ou alterar funcionalidade comum. Altera as chamadas para o código compartilhado para corresponder aos projetos MyOpenGLESApp.Android.NativeActivity e MyOpenGLESApp.iOS.Application. Você pode usar macros de pré-processador para especificar seções específicas de plataforma no seu código comum. A macro do pré-processador __ANDROID__ é predefinida ao compilar para Android. A macro do pré-processador __APPLE__ é predefinida ao compilar para iOS.

Para ver o IntelliSense para uma plataforma de projeto específica, escolha o projeto na lista suspensa do seletor de contexto. Ele está na barra de navegação na parte superior da janela do editor.

Screenshot of the Project Context Switcher dropdown in the Editor.

Problemas do IntelliSense no código que é usado pelo projeto atual são marcados com uma linha ondulada vermelha. Uma linha ondulada roxa marca o problema em outros projetos. O Visual Studio não dá suporte à coloração de código nem a arquivos IntelliSense para Java ou Objective-C. Porém, ainda é possível modificar os arquivos de origem e os recursos. Use-os para definir o nome do aplicativo, o ícone e outros detalhes da implementação.