Visual Studio, Android, Native activity, C++, OpenGL ES
“Родные” языки для Андроида – это Java и Kotlin.
Native activity же позволит писать код для Android-а на C++. Кроме того, Visual Studio’s Native activity шаблон включает инициализацию OpenGL ES-а.
1. Запускаем Visual Studio. Выбираем “Create a new project“. В меню шаблонов выбираем Android, потом “Native Activity Application (Android)”:
Затем – Next.
2. Следующий экран – Configure your new project:
- Project name – p_android (“p” – for “platform”),
- Location неправильный. Поменяем (browse) на “C:\CPP\a999hello”,
- Place solution in the same directory (просто чтоб знать, где его потом искать):
Затем – Create.
Выглядит так:
Как видите, под “p_android” solution/каталогом создалось ДВА проекта – “p_android.NativeActivity” и “p_android.Packaging”.
3. ВАЖНО: Default platform (в верхнем меню) – ARM. Надо поменять на ARM64.
Google уже объявил, что 32 bit поддерживаться НЕ будет, так что работаем с 64.
4. Поскольку мы планируем использовать OpenGL ES 3.2, нам понадобится более высокий API level (в моем случае по умолчанию был 21).
Right-click на p_android.NativeActivity проект -> Properties (внизу),
Поменяем Configuration на All Configurations, Platform: ARM64,
Идем в General -> Target API Level, меняем на 27 (этого достаточно):
Затем – Apply, Ok.
5. Также надо поменять minSdkVersion в AndroidManifest-е на 24 (минимум для ES 3.2) и targetSdkVersion на 27 (как решили выше):
Еще, давайте поменям android:label с “@string/app_name” на “OurProject“.
Затем – Save All:
6. Теперь можно переключиться с заданного OpenGL ES 1.0 на желаемый OpenGL ES 3.2. Ссылка – в файле pch.h под p_android.NativeActivity проектом. Поменяем соотвествующую строку на “GLES3\gl32.h”:
Снова, Save All.
7. И надо поменять подключенную библиотеку. Right-click на “p_android.NativeActivity” проект -> Properties, All Configurations, ARM64, Linker -> Input, открываем Library Dependencies -> Edit.
Вручную меняем GLESv1_CM на GLESv3
Ok, Apply, Ok.
Чтобы проверить не сломали ли чего-нибудь, попробуем скомпилировать и запустить нашу программу на реальном Андроиде.
Для этого надо разрешить “USB debugging” в Settings -> Developer options на устройстве.
На всякий случай: на моем Samsung S20 телефоне “Developer Options” в Settings нЕ было. Нужно было пройти в Settings -> About phone -> Software information и кликнуть 7 раз на Build number. После этого Developer options должны появиться в списке, и тогда можно вернуться в Settings -> Developer options и разрешить-таки USB debugging.
8. Теперь включаем и разблокируем телефон и подключаем к PC USB кабелем. Телефон спросит “Allow USB debugging?” – allow (разрешить). После этого телефон должен появиться в списке доступных устройств:
Жмем зеленую стрелку для запуска программы (Configuration: Debug / ARM64):
Как и ожидалось – ошибки.
9. Игнорируем poll.h “errors”. Важно – 2 “undefined identifiers”: GL_PERSPECTIVE_CORRECTION_HINT и GL_SMOOTH в main.cpp. Строки 111 и 113 (это для GLES 1.0).
Double-click на ошибку чтобы перейти в исходный код. Просто закомментируем эти 2 строки:
Запускаем снова (зеленая стрелка) – работает! На моем S20 это выглядит как мигающий зеленый экран:
Теперь давайте отложим Андроид в сторону, и перейдем к PC.