在 Android 和 iOS 上建置 OpenGL ES 應用程式

您可以針對共用通用程式碼的 iOS 應用程式與 Android 應用程式,建立 Visual Studio 方案和專案。 本文會引導您完成合併的解決方案範本。 它會建立 iOS 應用程式和 Android Native Activity 應用程式。 這兩個應用程式有通用的 C++ 程式碼,該程式碼使用 OpenGL ES 在每個平台上顯示相同的動畫旋轉立方體。 OpenGL ES (OpenGL for Embedded Systems 或 GLES) 是 2D 和 3D 圖形 API。 在許多行動裝置上都支援它。

需求

重要

OpenGL 支援已不再提供。 它最後一次可在 Visual Studio 17.3 中使用。

以下是為 iOS 和 Android 建立 OpenGL ES 應用程式的系統需求。 否則,請安裝 Visual Studio Installer 中的「使用 C++ 進行行動開發」工作負載。 若要取得 OpenGL ES 範本,以及為 iOS 建置,請包含選用的 C++ iOS 開發工具。 若要建置 Android,請安裝 C++ Android 開發工具和必要的協力廠商工具:Android NDK、Apache Ant 和 Google Android 模擬器。

為了提升 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.

    Visual Studio 會建立新的方案,並開啟方案總管。

    Screenshot of MyOpenGLESApp in Solution Explorer.

  1. 在 Visual Studio 中,選擇 [檔案]>[新增]>[專案]

  2. 在 [ 建立新專案 ] 對話方塊中,選取 OpenGLES 應用程式 (Android, iOS) 範本,然後選擇 [ 下一步 ]。

  3. 在 [ 設定新專案] 對話方塊中,在 [專案 名稱 ] 中 輸入 MyOpenGLESApp 之類的 名稱,然後選擇 [ 建立 ]。

    Visual Studio 會建立新的方案,並開啟方案總管。

    Screenshot of MyOpenGLESApp in Solution Explorer.

新的 OpenGL ES 應用程式方案包含三個程式庫專案和兩個應用程式專案。 Library 資料夾包含共用程式碼專案。 而且,參考共用程式碼的兩個平臺特定專案:

  • MyOpenGLESApp.Android.NativeActivity 包含參考和黏附程式碼,可讓您的應用程式當作 Native Activity 在 Android 上實作。 黏附程式碼的進入點是在 main.cpp 中實作的,其中包含 MyOpenGLESApp.Shared 中共用的通用程式碼。 先行編譯標頭檔位於 pch.h 中。 這個 Native Activity 應用程式專案會編譯至 MyOpenGLESApp.Android.Packaging 專案所挑選的共用程式庫 (.so) 檔案中。

  • MyOpenGLESApp.iOS.StaticLibrary 會建立 iOS 靜態程式庫 (.a) 檔案,其中包含 MyOpenGLESApp.Shared中的共用程式碼。 它會連結到由 MyOpenGLESApp.iOS.Application 專案所建立的應用程式。

  • MyOpenGLESApp.Shared 包含可跨平台運作的共用程式碼。 它使用前置處理器巨集來進行平台專屬程式碼的條件式編譯。 共用程式碼會由 MyOpenGLESApp.Android.NativeActivityMyOpenGLESApp.iOS.StaticLibrary 中的專案參考挑選。

該方案包含兩個專案,分別為 Android 和 iOS 平台建置應用程式:

  • MyOpenGLESApp.Android.Packaging 會建立部署在 Android 裝置或模擬器上時所使用的 .apk 檔案。 此檔案中包含資源以及您設定資訊清單屬性所在的 AndroidManifest.xml 檔案。 其中也包含用來控制建置流程的 build.xml 檔案。 根據預設,它會設定為啟始專案,以便直接從 Visual Studio 部署及執行。

  • MyOpenGLESApp.iOS.Application 包含資源和 Objective-C glue 程式碼,以建立 iOS 應用程式,以連結至 中的 MyOpenGLESApp.iOS.StaticLibrary 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 啟動而不偵錯。

    Visual Studio 會啟動模擬器,這需要幾秒的時間來載入及部署您的程式碼。 以下是應用程式出現在模擬器中的方式:

    Screenshot of the app running in an Android Emulator.

    在您的應用程式啟動之後,您可以設定中斷點,並使用偵錯工具,以逐步執行程式碼、檢查區域變數及監看值。

  5. Shift+F5 停止偵錯。

    模擬器是分開的程序,會繼續執行。 您可以將程式碼多次編輯、編譯及部署至相同的模擬器。 您的應用程式會出現在模擬器的應用程式集合中,並可由此直接啟動。

    產生的 Android Native Activity 應用程式和程式庫專案會將 C++ 共用程式碼放在動態連結程式庫中。 其中包含與 Android 平臺介面的「黏附」程式碼。 大部分的應用程式程式碼都位於程式庫中。 資訊清單、資源和建置指示位於封裝專案中。 共用程式碼會從 NativeActivity 專案中的 main.cpp 呼叫。 如需如何對 Android Native Activity 進行程式設計的詳細資訊,請參閱 Android 開發人員 NDK 的 概念 頁面。

    Visual Studio 會使用 Android NDK 建置 Android 原生活動專案。 它會使用 Clang 作為平臺工具組。 Visual Studio 會將專案的屬性對應至目標平臺上的編譯、連結和偵錯命令。 如需詳細資料,請開啟 MyOpenGLESApp.Android.NativeActivity 專案的 [屬性頁] 對話方塊。 如需有關命令列參數的詳細資訊,請參閱 Clang Compiler 使用者手冊

在 iOS 裝置上建置並執行 iOS 應用程式

您可以在 Visual Studio 中建立和編輯 iOS 應用程式專案。 由於授許可權制,必須從 Mac 建置及部署它。 Visual Studio 會與 Mac 上所執行的遠端代理程式通訊,以傳輸專案檔,並執行建置、部署和偵錯命令。 安裝並設定 Mac 和 Visual Studio 以進行通訊,才能建置 iOS 應用程式。 如需詳細指示,請參閱安裝和設定工具以使用 iOS 進行建置。 在 Mac 上執行遠端代理程式,並將它與 Visual Studio 配對。 然後,您可以建置並執行 iOS 應用程式,以確認您的安裝和設定。

若要將應用程式部署至 iOS 裝置,請先在 Xcode 中設定自動登入。 自動簽署會建立布建設定檔來簽署應用程式的組建。

若要在 Xcode 上設定自動簽署

  1. 如果您尚未安裝,請在 Mac 上安裝 Xcode

  2. 在 Mac 上開啟 Xcode 應用程式。

  3. 建立一個新的單一檢視應用程式 Xcode 專案。 在專案建立期間填寫必填欄位。 這些值可以是任意的,因為專案僅用於建立稍後用來簽署應用程式組建的佈建設定檔。

  4. 將您在 Apple Developer Program 帳戶中註冊的 Apple ID 加入到 Xcode 中。 您的 Apple ID 會當作簽署應用程式的簽署身分識別使用。 若要在 Xcode 中新增簽署身分識別,請開啟 [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 的值。 移至 [組建設定],並將滑鼠指標停留在您的開發小組名稱上,以顯示工具提示。 工具提示會顯示您的小組識別碼。

    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 電腦上,系統可能會提示您允許 Codesign 存取您的 Keychain。 選擇 [允許] 繼續進行。

  8. 在工具列上選擇您的 iOS 裝置,以便在連接到 Mac 的裝置上執行應用程式。 如果應用程式未啟動,請確認裝置是否授予已部署的應用程式在裝置上執行的權限。 您可以前往裝置上的 [設定]>[一般]>[裝置管理] 來設定此權限。 選取您的開發人員應用程式帳戶、信任您的帳戶,然後驗證應用程式。 再次嘗試從 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 使用 Xcode 平台工具組,該工具組需要與 Mac 上所執行的遠端用戶端進行通訊。

    Visual Studio 會將專案檔傳輸至遠端用戶端。 然後它會傳送命令,以使用 Xcode 建置應用程式。 遠端用戶端會將組建狀態資訊傳回 Visual Studio。 成功建置應用程式時,Visual Studio 可以傳送命令來執行和偵錯應用程式。 Visual Studio 中的偵錯工具可控制在連接至 Mac 的 iOS 裝置上所執行的應用程式。 Visual Studio 會將專案屬性對應至目標 iOS 平臺上用來編譯、連結和偵錯的選項。 如需編譯器命令列選項詳細資料,請開啟 MyOpenGLESApp.iOS.StaticLibrary 專案的 [屬性頁] 對話方塊。

自訂您的應用程式

您可以修改共用的 C++ 程式碼,加入或變更一般常見功能。 將 和 專案中共用程式碼 MyOpenGLESApp.Android.NativeActivityMyOpenGLESApp.iOS.Application 的呼叫變更為相符。 您可以使用前置處理器巨集,來指定通用程式碼中的平台專屬區段。 當您針對 Android 建置時,系統會預先定義前置處理器巨集 __ANDROID__ 。 當您針對 iOS 建置時,系統會預先定義前置處理器巨集 __APPLE__

若要查看特定專案平臺的 IntelliSense,請選擇內容切換器下拉式清單中的專案。 它位於編輯器視窗頂端的導覽列中。

Screenshot of the Project Context Switcher dropdown in the Editor.

目前專案所使用之程式碼中的 IntelliSense 問題會以紅色波浪線標示。 其他專案中的紫色波浪線標記問題。 Visual Studio 不支援 Java 或 Objective-C 檔案的程式碼顏色標示或 IntelliSense。 不過,您仍然可以修改來源檔案和資源。 使用它們來設定您的應用程式名稱、圖示和其他實作詳細資料。