다음을 통해 공유


Android 및 iOS에서 OpenGL ES 애플리케이션 빌드

일반 코드를 공유하는 iOS 앱과 Android 앱에 대한 Visual Studio 솔루션 및 프로젝트를 만들 수 있습니다. 이 문서에서는 결합된 솔루션 템플릿을 안내합니다. iOS 앱과 Android 네이티브 활동 앱을 모두 만듭니다. 앱에는 공통적으로 OpenGL ES를 사용하여 각 플랫폼에서 동일한 애니메이션 회전 큐브를 표시하는 C++ 코드가 있습니다. OpenGL ES(포함된 시스템 또는 GLES용 OpenGL)는 2D 및 3D 그래픽 API입니다. 많은 모바일 디바이스에서 지원됩니다.

요구 사항

Important

OpenGL 지원을 더 이상 사용할 수 없습니다. Visual Studio 17.3에서 마지막으로 사용할 수 있었습니다.

iOS 및 Android용 OpenGL ES 앱을 만들기 위한 시스템 요구 사항은 다음과 같습니다. Visual Studio 설치 관리자에서 C++를 사용한 모바일 개발 워크로드를 아직 설치하지 않았다면 설치합니다. OpenGL ES 템플릿을 가져오고 iOS용 빌드인 경우 선택적 C++ iOS 개발 도구를 포함시킵니다. Android용으로 빌드하려면 C++ Android 개발 도구와 필요한 타사 도구인 Android NDK, Apache Ant 및 Google Android Emulator를 설치합니다.

Intel 플랫폼에서 에뮬레이터 성능을 향상시키려면 한 가지 옵션은 Intel HAXM(하드웨어 가속 실행 관리자)을 설치하는 것입니다. 자세한 지침은 C++를 사용하여 플랫폼 간 모바일 개발 설치를 참조 하세요.

iOS 앱을 빌드하고 테스트하려면 Mac 컴퓨터가 필요합니다. 설치 지침에 따라 설정합니다. iOS 개발을 위해 설치하는 방법에 대한 자세한 내용은 iOS를 사용하여 빌드할 도구 설치 및 구성을 참조하세요.

새 OpenGLES 애플리케이션 프로젝트 만들기

이 자습서에서는 먼저 새 OpenGL ES 애플리케이션 프로젝트를 만듭니다. 그런 다음 Android 에뮬레이터에서 기본 앱을 빌드하고 실행합니다. 그런 다음 iOS용 앱을 빌드하고 iOS 디바이스에서 앱을 실행합니다.

  1. Visual Studio에서 파일>새로 만들기>프로젝트를 선택합니다.

  2. 새 프로젝트 대화 상자의 템플릿에서 Visual C++>플랫폼 간을 선택한 후 OpenGLES 애플리케이션(Android, iOS) 템플릿을 선택합니다.

  3. 앱의 이름을 MyOpenGLESApp과 같이 지정하고 확인을 선택합니다.

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

    새 솔루션이 만들어지고 솔루션 탐색기가 열립니다.

    Screenshot of MyOpenGLESApp in Solution Explorer.

  1. Visual Studio에서 파일>새로 만들기>프로젝트를 선택합니다.

  2. 새 프로젝트 만들기 대화 상자에서 OpenGLES 애플리케이션(Android, iOS) 템플릿을 선택한 후 다음을 선택합니다.

  3. 새 프로젝트 구성 대화 상자의 프로젝트 이름MyOpenGLESApp과 같은 이름을 입력한 후 만들기를 선택합니다.

    새 솔루션이 만들어지고 솔루션 탐색기가 열립니다.

    Screenshot of MyOpenGLESApp in Solution Explorer.

새 OpenGL ES 애플리케이션 솔루션에 라이브러리 프로젝트 3개와 애플리케이션 프로젝트 2개가 포함됩니다. 라이브러리 폴더에는 공유 코드 프로젝트가 포함됩니다. 또한 공유 코드를 참조하는 두 개의 플랫폼별 프로젝트:

  • MyOpenGLESApp.Android.NativeActivity에는 Android에서 앱을 Native Activity로 구현하는 참조 및 글루 코드가 포함되어 있습니다. 글루 코드에서의 진입점은 MyOpenGLESApp.Shared의 공용 공유 코드를 포함하는 main.cpp에서 구현됩니다. 미리 컴파일된 헤더는 pch.h에 있습니다. 이 Native Activity 앱 프로젝트는 공유 라이브러리 .so 파일로 컴파일되며 MyOpenGLESApp.Android.Packaging 프로젝트에서 이 라이브러리를 선택합니다.

  • MyOpenGLESApp.iOS.StaticLibraryMyOpenGLESApp.Shared의 공유 코드를 포함하는 iOS 정적 라이브러리(.a) 파일을 만듭니다. MyOpenGLESApp.iOS.Application 프로젝트에서 만든 앱에 연결되어 있습니다.

  • MyOpenGLESApp.Shared에는 플랫폼 간에 작동하는 공유 코드가 포함됩니다. 플랫폼별 코드의 조건부 컴파일에 전처리기 매크로를 사용합니다. 공유 코드는 MyOpenGLESApp.Android.NativeActivityMyOpenGLESApp.iOS.StaticLibrary에서 모두 프로젝트 참조에 의해 선택됩니다.

솔루션에는 Android 및 iOS 플랫폼용 앱을 빌드하는 두 프로젝트가 있습니다.

  • MyOpenGLESApp.Android.Packaging은 Android 디바이스 또는 에뮬레이터에서 배포하기 위한 .apk 파일을 만듭니다. 이 파일에는 리소스와 매니페스트 속성을 설정하는 AndroidManifest.xml 파일이 포함되어 있습니다. Ant 빌드 프로세스를 제어하는 build.xml 파일도 포함되어 있습니다. 이 프로젝트는 기본적으로 시작 프로젝트로 설정되므로 Visual Studio에서 직접 배포 및 실행할 수 있습니다.

  • MyOpenGLESApp.iOS.Application에는 MyOpenGLESApp.iOS.StaticLibrary의 C++ 정적 라이브러리 코드에 연결되는 iOS 앱을 만들기 위한 리소스와 Objective-C 붙이기 코드가 포함됩니다. 이 프로젝트는 Visual Studio 및 원격 에이전트에서 Mac으로 전송되는 빌드 패키지를 만듭니다. 이 프로젝트를 빌드하면 Visual Studio가 Mac에서 앱을 빌드하고 배포하기 위한 파일과 명령을 보냅니다.

Android 앱 빌드 및 실행

템플릿에서 만든 솔루션은 Android 앱을 기본 프로젝트로 설정합니다. 이 앱을 빌드 및 실행하여 설치 및 설정을 확인할 수 있습니다. 초기 테스트의 경우 Android용 에뮬레이터에 의해 설치된 디바이스 프로필 중 하나에서 앱을 실행합니다. 다른 대상에서 앱을 테스트하려는 경우 대상 에뮬레이터를 로드할 수 있습니다. 또는 디바이스를 컴퓨터에 연결합니다.

Android Native Activity 앱을 빌드 및 실행하려면

  1. 아직 선택하지 않은 경우 솔루션 플랫폼 드롭다운 목록에서 x86을 선택합니다.

    Screenshot of the Solution Platform dropdown with x86 highlighted.

    X86을 사용하여 에뮬레이터를 대상으로 지정합니다. 디바이스를 대상으로 지정하려면 디바이스 프로세서에 따라 솔루션 플랫폼을 선택합니다. 솔루션 플랫폼 목록이 표시되지 않는 경우 단추 추가/제거 목록에서 솔루션 플랫폼을 선택한 후 플랫폼을 선택합니다.

  2. 솔루션 탐색기에서 MyOpenGLESApp.Android.Packaging 프로젝트의 바로 가기 메뉴를 열고 빌드를 선택합니다.

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

    출력 창에 솔루션의 Android 공유 라이브러리 및 Android 앱에 대한 빌드 프로세스 출력이 표시됩니다.

    Screenshot of Build Output for Android projects.

  3. 배포 대상으로 에뮬레이트된 Android 디바이스 프로필 중 하나를 선택합니다.

    Choose deployment target.

    다른 에뮬레이터를 설치했거나 Android 디바이스를 연결했을 수 있습니다. 배포 대상 드롭다운 목록에서 선택할 수 있습니다. 앱을 실행하려면 빌드된 솔루션 플랫폼이 대상 디바이스의 플랫폼과 일치해야 합니다.

  4. F5 키를 눌러 디버깅을 시작하거나 Shift+F5를 눌러 디버깅하지 않고 시작합니다.

    에뮬레이터가 시작됩니다. 코드를 로드하고 배포하는 데 몇 초 정도 걸릴 수 있습니다. 에뮬레이터에서 앱이 표시되는 방법은 다음과 같습니다.

    Screenshot of the app running in an Android Emulator.

    앱이 시작되면 중단점을 설정하고 디버거를 사용하여 코드를 단계별로 실행하고 지역을 검토하고 값을 조사할 수 있습니다.

  5. Shift+F5를 눌러 디버깅을 중지합니다.

    에뮬레이터는 별도의 프로세스로 계속 실행됩니다. 코드를 편집 및 컴파일하여 동일한 에뮬레이터에 여러 번 배포할 수 있습니다. 앱이 에뮬레이터의 앱 컬렉션에 표시되고, 여기서 직접 시작할 수 있습니다.

    생성된 Android 네이티브 활동 앱 및 라이브러리 프로젝트는 C++ 공유 코드를 동적 라이브러리에 배치합니다. Android 플랫폼과 인터페이스하는 "glue" 코드가 포함되어 있습니다. 대부분의 앱 코드는 라이브러리에 있습니다. 매니페스트, 리소스 및 빌드 지침은 패키징 프로젝트에 있습니다. 공유 코드는 NativeActivity 프로젝트의 main.cpp에서 호출됩니다. Android NativeActivity를 프로그래밍하는 방법에 대한 자세한 내용은 Android 개발자 NDK 개념 페이지를 참조하세요.

    Visual Studio는 Android NDK를 사용하여 Android 네이티브 활동 프로젝트를 빌드합니다. Clang를 플랫폼 도구 집합으로 사용합니다. Visual Studio는 프로젝트의 속성을 대상 플랫폼의 컴파일, 링크 및 디버그 명령에 매핑합니다. 자세한 내용을 보려면 MyOpenGLESApp.Android.NativeActivity 프로젝트에 대한 속성 페이지 대화 상자를 엽니다. 명령줄 스위치에 대한 자세한 내용은 Clang 컴파일러 사용자 설명서를 참조하세요.

iOS 디바이스에서 iOS 앱 빌드 및 실행

Visual Studio에서 iOS 앱 프로젝트를 만들고 편집합니다. 라이선스 제한으로 인해 Mac에서 빌드 및 배포해야 합니다. Visual Studio는 Mac에서 실행되는 원격 에이전트와 통신하여 프로젝트 파일을 전송하고 빌드, 배포 및 디버깅 명령을 실행합니다. iOS 앱을 빌드하려면 먼저 Mac 및 Visual Studio를 통신하도록 설정 및 구성합니다. 자세한 내용은 iOS를 사용하여 빌드할 도구 설치 및 구성을 참조하세요. Mac에서 원격 에이전트를 실행하고 Visual Studio와 페어링합니다. 그런 다음 iOS 앱을 빌드하고 실행하여 설치 및 설정을 확인할 수 있습니다.

iOS 디바이스에 앱을 배포하려면 먼저 Xcode에서 자동 서명을 설정합니다. 자동 서명은 앱 빌드에 서명하는 프로비저닝 프로필을 만듭니다.

Xcode에서 자동 서명을 설정하려면

  1. 아직 설치하지 않은 경우 Xcode를 Mac에 설치합니다.

  2. Mac에서 Xcode 앱을 엽니다.

  3. 단일 뷰 애플리케이션 Xcode 프로젝트를 만듭니다. 프로젝트를 만드는 동안 필수 필드를 입력합니다. 프로젝트는 나중에 앱의 빌드에 서명하는 데 사용되는 프로비전 프로필을 만드는 데만 사용되므로 값은 임의의 값이 될 수 있습니다.

  4. Apple 개발자 프로그램 계정에 등록된 Apple ID를 Xcode에 추가합니다. Apple ID는 앱을 서명하기 위한 서명 ID로 사용됩니다. Xcode에서 서명 ID를 추가하려면 Xcode 메뉴를 열고 기본 설정을 선택합니다. 계정을 선택하고 추가 단추(+)를 클릭하여 Apple ID를 추가합니다. 자세한 지침은 Apple ID 계정 추가를 참조하세요.

  5. Xcode 프로젝트의 “일반” 설정에서 번들 식별자의 값을 com.<NameOfVSProject>로 변경합니다. 여기서 <NameOfVSProject>는 Visual Studio 솔루션 프로젝트의 이름으로 만들었던 이름과 같습니다. 예를 들어 Visual Studio에서 MyOpenGLESApp이라는 프로젝트를 만들었다면 번들 식별자com.MyOpenGLESApp으로 설정합니다.

    Screenshot of the Xcode bundle identifier.

  6. 자동 서명을 사용하도록 설정하려면 확인합니다. 자동으로 서명 관리**.

    Screenshot of Xcode automatic signing value.

  7. 추가한 Apple ID의 팀 이름을 개발 으로 선택합니다.

    Screenshot of the Xcode team value.

iOS 디바이스에서 iOS 앱을 빌드 및 실행하려면

  1. Mac에서 원격 에이전트를 실행하고 Visual Studio가 원격 에이전트와 쌍으로 연결되었는지 확인합니다. 원격 에이전트를 시작하려면 터미널 앱 창을 열고 vcremote를 참조하세요. 자세한 내용은 Visual Studio에서 원격 에이전트 구성을 참조하세요.

    Mac Terminal window running vcremote.

  2. iOS 디바이스를 Mac에 첨부합니다. 컴퓨터에 처음으로 디바이스를 첨부한 경우 디바이스에 액세스하는 컴퓨터를 신뢰할 수 있는지 묻는 경고 메시지가 나타납니다. Mac 컴퓨터를 신뢰하도록 디바이스를 설정합니다.

  3. Visual Studio에서 아직 선택하지 않은 경우 디바이스 프로세서에 따라 나타나는 솔루션 플랫폼 드롭다운 목록에서 솔루션 플랫폼을 선택합니다. 이 예제에서는 ARM64 프로세서입니다.

    Screenshot of setting the Solution Platform to ARM64.

  4. 솔루션 탐색기에서 MyOpenGLESApp.iOS.Application 프로젝트의 바로 가기 메뉴를 열고 프로젝트 언로드를 선택하여 프로젝트를 언로드합니다.

  5. 언로드된 MyOpenGLESApp.iOS.Application 프로젝트의 바로 가기 메뉴를 다시 열고 project.pbxproj 편집을 선택하여 프로젝트 파일을 편집합니다. project.pbxproj 파일에서 buildSettings 특성을 찾고 Apple Team ID를 사용하여 DEVELOPMENT_TEAM을 추가합니다. 아래 스크린샷은 Apple Team ID의 123456ABC 예제 값을 보여 줍니다. Xcode에서 Apple Team ID의 값을 찾을 수 있습니다. 설정 빌드로 이동하여 개발 팀 이름 위에 마우스 단추를 놓으면 도구 설명이 표시됩니다. 도구 설명에 팀 ID가 나타납니다.

    Screenshot of setting the development team.

  6. project.pbxproj 파일을 닫고 언로드된 MyOpenGLESApp.iOS.Application 프로젝트의 바로 가기 메뉴를 연 다음 프로젝트 다시 로드를 선택하여 프로젝트를 다시 로드합니다.

  7. 이제 프로젝트의 바로 가기 메뉴를 열고 빌드를 선택하여 MyOpenGLESApp.iOS.Application 프로젝트를 빌드합니다.

    Using the shortcut menu to build the iOS Application project.

    출력 창에는 빌드 프로세스의 출력이 표시됩니다. iOS 정적 라이브러리 및 iOS 앱에 대한 결과를 표시합니다. Mac에서 원격 에이전트를 실행하는 터미널 창에 명령 및 파일 전송 작업이 표시됩니다.

    Mac 컴퓨터에서 키체인에 액세스하기 위해 코드 서명을 허용할지 묻는 메시지가 표시될 수 있습니다. 계속하려면 허용을 선택합니다.

  8. Mac에 첨부된 디바이스에서 앱을 실행하려면 도구 모음에서 iOS 장치를 선택합니다. 앱이 시작되지 않으면 배포된 애플리케이션을 디바이스에서 실행할 수 있는 권한이 있는지 확인합니다. 이 권한은 디바이스에서 설정>일반>디바이스 관리로 이동하여 설정할 수 있습니다. 개발자 앱 계정을 선택하고 계정을 신뢰하도록 설정한 후 앱을 확인합니다. Visual Studio에서 앱을 다시 실행해 봅니다.

    Screenshot of the iOS app on an iOS device.

    앱이 시작되면 중단점을 설정하고 Visual Studio 디버거를 사용하여 지역을 검사하고, 호출 스택을 확인하고, 값을 조사할 수 있습니다.

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

  9. Shift+F5를 눌러 디버깅을 중지합니다.

    생성된 iOS 앱 및 라이브러리 프로젝트는 공유 코드만 구현하는 C++ 코드를 정적 라이브러리에 넣습니다. 대부분의 애플리케이션 코드는 Application 프로젝트에 있습니다. 이 템플릿 프로젝트의 공유 라이브러리 코드 호출은 GameViewController.m 파일에서 수행됩니다. iOS 앱을 빌드하기 위해 Visual Studio는 Mac에서 실행되는 원격 클라이언트와 통신해야 하는 Xcode 플랫폼 도구 집합을 사용합니다.

    Visual Studio는 프로젝트 파일을 원격 클라이언트로 전송합니다. 그런 다음 Xcode를 사용하여 앱을 빌드하는 명령을 보냅니다. 원격 클라이언트는 빌드 상태 정보를 Visual Studio로 다시 보냅니다. 앱이 성공적으로 빌드되면 Visual Studio에서 앱을 실행하고 디버그하는 명령을 보낼 수 있습니다. Visual Studio의 디버거는 Mac에 첨부된 iOS 디바이스에서 실행되는 앱을 제어합니다. Visual Studio는 프로젝트 속성을 대상 iOS 플랫폼에서 컴파일, 연결 및 디버그하는 데 사용되는 옵션에 매핑합니다. 컴파일러 명령줄 옵션에 대한 자세한 내용을 보려면 MyOpenGLESApp.iOS.StaticLibrary 프로젝트에 대한 속성 페이지 대화 상자를 엽니다.

앱 사용자 지정

공유 C++ 코드를 수정하여 공통 기능을 추가하거나 변경할 수 있습니다. 일치시킬 프로젝트 및 MyOpenGLESApp.iOS.Application 프로젝트의 공유 코드에 MyOpenGLESApp.Android.NativeActivity 대한 호출을 변경합니다. 전처리기 매크로를 사용하여 공통 코드에서 플랫폼별 섹션을 지정할 수 있습니다. 전처리기 매크로 __ANDROID__ 는 Android용으로 빌드할 때 미리 정의됩니다. 전처리기 매크로 __APPLE__ 는 iOS용으로 빌드할 때 미리 정의됩니다.

특정 프로젝트 플랫폼에 대한 IntelliSense를 보려면 컨텍스트 전환기 드롭다운에서 프로젝트를 선택합니다. 편집기 창의 맨 위에 있는 탐색 모음에 있습니다.

Screenshot of the Project Context Switcher dropdown in the Editor.

현재 프로젝트에 사용되는 코드의 IntelliSense 문제는 빨간색 물결선으로 표시됩니다. 다른 프로젝트에서는 자주색 물결선 표시 문제가 발생합니다. Visual Studio는 Java 또는 Objective-C 파일에 대해 코드 색 지정 또는 IntelliSense를 지원하지 않습니다. 그러나 원본 파일 및 리소스는 여전히 수정할 수 있습니다. 애플리케이션 이름, 아이콘 및 기타 구현 세부 정보를 설정하는 데 사용합니다.