Форум программистов, компьютерный форум, киберфорум
8Observer8
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

SDL3 на Android: Сборка C/C++ проекта из консоли

Запись от 8Observer8 размещена 14.08.2025 в 19:44. Обновил(-а) 8Observer8 01.04.2026 в 14:31
Показов 9582 Комментарии 3

Содержание блога

Если у вас не установлены Android SDK, NDK, JDK, и т.д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т.д.

Сборка примера



  • Скачайте этот пример (с SDL3 Renderer API, который показывает квадраты при касании экрана на месте касаний) или этот пример (с OpenGL ES 2.0, который рисует простой треугольник) с GitHub. Распакуйте архив в удобную директорию (например, E:\Projects). Вы можете скачать эти zip-файлы одним кликом:
  • Скачайте SDL3-devel-3.4.0-android.zip. Извлеките файл SDL3-3.4.0.aar и поместите его в папку "app\libs"
  • Откройте файл app/build.gradle. Выберите, какой ABI вы хотите использовать. Например, "arm64-v8a" — для новых устройств, "armeabi-v7a" — для старых, "x86" и "x86_64" — для Android-эмулятора. Раскомментируйте строку abiFilters 'arm64-v8a' вот так:
    Code
    1
    2
    3
    4
    5
    
    cmake {
        arguments '-DANDROID_STL=c++_shared', '-DWITH_IMAGE=OFF', '-DWITH_MIXER=OFF'
        // abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
        abiFilters 'arm64-v8a'
    }
  • Замените версию SDL в файле app/build.gradle вот так:
    • До:
      Code
      1
      2
      3
      4
      
      dependencies {
          implementation files('libs/SDL3-3.1.3.aar')
          implementation 'androidx.appcompat:appcompat:1.5.1'
      }
    • После:
      Code
      1
      2
      3
      4
      
      dependencies {
          implementation files('libs/SDL3-3.4.0.aar')
          implementation 'androidx.appcompat:appcompat:1.5.1'
      }
  • Откройте терминал командной строки в корневой папке примера
  • Скопируйте и вставьте в CMD следующую команду:
    Bash
    1
    
    gradlew assembleDebug
  • Первая сборка у меня проходит за 20 секунд. В следующий раз, когда вы измените код, например, в src/main.c (или main.cpp), сборка будет очень быстрой - от менее секунды, до нескольких секунд
  • Вы найдёте APK-файл (app-debug.apk) в папке: app\build\outputs\apk\debug
  • Вы можете загрузить этот APK на Google Drive с ПК, чтобы установить его на Android-устройство
  • Либо вы можете установить APK к компьютера если подключите телефон USB-кабелем. Нужно будет активировать режим разработчика - спросите у ИИ как активировать режим разработчика и нужно активировать опцию должна быть активирована опция "Install via USB". Потом введите команду для проверки для установки APK из папки с файлом app-debug.apk:
    Bash
    1
    
    adb install -r app-debug.apk
  • Примечание. Для проверки подключения телефона можно ввести команду:
    Bash
    1
    
    adb devices
  • Результат команды "adb devices" примерно следующий:
    Performing Streamed Install
    Success
  • У меня приложение заняло 7.84 MB, а сам APK весит 4.21 MB
  • Попробуйте теперь что-то изменить в программе src/main.c и снова выполнить команды сборки:
    Bash
    1
    
    gradlew assembleDebug
  • И установки. Лучше открыть вторую консоль в папке app\build\outputs\apk\debug и выполнить команду:
    Bash
    1
    
    adb install -r app-debug.apk
  • Сборка и установка приложения займёт несколько секунд
  • Запускайте приложение на телефоне и смотрите на результат изменений в программе

Использование SDL3-callbacks вместо функции main



Инструкция находится здесь: Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly

Результаты запуска на телефоне



Пример SDLCross с рисованием квадратов месте касаний:



Пример на чистом OpenGL ES 2.0, который рисует треугольник зелёного цвета:



Экран телефон можно выводить на компьютере с помощью программы https://github.com/Genymobile/scrcpy через USB-кабель
Миниатюры
Нажмите на изображение для увеличения
Название: sdlcross-SDL3-Aug-14-2025.gif
Просмотров: 2786
Размер:	112.0 Кб
ID:	11049   Нажмите на изображение для увеличения
Название: 63888209f1b343c5ad007f4030afd622a7f763f3.png
Просмотров: 2763
Размер:	7.7 Кб
ID:	11051  
Вложения
Тип файла: zip sdlcross.zip (108.4 Кб, 625 просмотров)
Тип файла: zip simple-triangle-android-opengles20-sdl3-cpp.zip (110.5 Кб, 362 просмотров)
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 3
Комментарии
  1. Старый комментарий
    Инструкция для Си-проекта для Android выше базируется на этом примере одного из ключевых разработчиков SDL с ником madebr. Это достаточно простой, но базовый пример, который запускается на Android без проблем. Пример показывает, как работать с некоторыми базовыми вещам:
    • обработка касаний нескольких пальцев
    • рисование квадратов разных цветов в месте касаний
    • воспроизведение звуков при касании с помощью отдельной библиотеки SDL3_mixer
    • использование четырёх callback-функций SDL3 вместо main(), таких как: SDL_AppInit(), SDL_AppEvent(), SDL_AppIterate(), SDL_AppQuit(), как показано в базовых примерах из репозитория SDL3, например: examples/renderer/01-clear/clear.c, что позволяет использовать один и тот же код проекта для запуска на разных платформах, например: Android, Desktop, Web и т.д.
    • подключение библиотеки физики Box2D v3, написанной на Си, для определения коллизий, движения объектов и т.д.
    • использование механизма Box2D для отображения коллайдеров (физических объектов Box2D), то есть рисование прямоугольников и колец с помощью линий на SDL3

    У меня появилась идея написать инструкцию, как воссоздать подобный пример с нуля из консоли без использования IDE, а для написания кода использовать Sublime Text 4 и какой-то другой редактор. В качестве начала можно использовать команду:

    Code
    1
    
    gradle init --type java-application
    Которая создаёт консольное Desktop-приложение Java из консоли с помощью Gradle. Детальная инструкция по созданию приложения Java с нуля:
    • Скачиваем и устанавливаем JDK 17 или более новую версию
    • Скачиваем архив с Gradle 8.5 и перемещаем папку "gradle-8.5", например, на диск С.
    • Добавляем путь к Gradle (C:\gradle-8.5\bin) в переменную окружения PATH
    • Создаём новую папку для Java-проекта и запускаем CMD в этой папке
    • Набираем команду создания нового проекта в CMD:
      Bash
      1
      
      gradle init --type java-application
    • Gradle в консоли предоставит выбор: "Select build script DSL". Нажимаем клавишу 2, чтобы выбрать Groovy
    • Gradle в консоли предоставит выбор: "Select test framework". Нажмите клавишу 1, чтобы выбрать JUnit4 (это сейчас неважно)
    • Gradle в консоли спросит об имени проекта: Project name (default: my-example). Нажмите Enter
    • Gradle в консоли спросит об имени пакета: Source package (default: my.example). Нажмите Enter
    • Gradle в консоли спросит о версии JDK: Enter target version of Java (min. 7) (default: 17). Нажмите Enter
    • Gradle в консоли спросит об использовании нового API: Generate build using new APIs and behavior (some features may change in the next minor release)? (default: no) [yes, no]. Нажмите Enter
    • Проект создат. Gradle покажет сообщение "BUILD SUCCESSFUL"
    • Для запуска проекта нужно ввести команду: gradle run

    После этой команды создаётся набор папок и файлов, например: app/build.gradle, то есть это уже близко к базовому примеру на Си для Android. Остальные файлы и изменения в файлах нужно добавлять вручную из базового примера: https://github.com/madebr/sdlcross или из моего упрощённого: https://github.com/ivan-enzhae... -example-c
    Запись от 8Observer8 размещена 08.12.2025 в 14:59 8Observer8 вне форума
    Обновил(-а) 8Observer8 29.07.2026 в 18:19
  2. Старый комментарий
    Обновил самую первую инструкцию до текущей на данным момент версии SDL 3.4.0
    Запись от 8Observer8 размещена 24.01.2026 в 05:34 8Observer8 вне форума
    Обновил(-а) 8Observer8 24.01.2026 в 06:27
  3. Старый комментарий
    Запись от 8Observer8 размещена 24.01.2026 в 19:56 8Observer8 вне форума
 
Новые блоги и статьи
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru