Skip to content

cochachyLE-Dev/NDK-ImGui

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NDK ImGui Instrumentación

NDK ImGui Instrumentación es una aplicación Android nativa que demuestra cómo construir interfaces de depuración y herramientas de instrumentación in-app combinando Android NDK, Dear ImGui y OpenGL ES 3 sobre NativeActivity. El proyecto integra, en un solo binario, los principales subsistemas que suelen requerirse en aplicaciones móviles avanzadas (cámara, audio, sensores, red, almacenamiento, GPS, notificaciones y diagnóstico) y los expone a través de paneles ImGui interactivos. Está pensado como base de trabajo para prototipos, herramientas internas, motores ligeros y aplicaciones que necesiten control directo sobre el hardware del dispositivo.

El nombre técnico del módulo Gradle sigue siendo NdkImguiPmv (carpeta ndk-imgui-pmv/) por compatibilidad con la base de código existente; NDK ImGui Instrumentación es la marca/identidad pública del proyecto.

Galería y demostración

Haz clic sobre cualquier captura para abrirla en tamaño completo.

Capturas destacadas

Captura destacada 1 Captura destacada 2

Captura destacada 3 Captura destacada 4 Captura destacada 5

Galería completa de paneles

Panel 01 Panel 02 Panel 03 Panel 04

Panel 05 Panel 06 Panel 07 Panel 08

Panel 09 Panel 10 Panel 11 Panel 12

Panel 13 Panel 14 Panel 15 Panel 16

Panel 17 Panel 18 Panel 19 Panel 20

Panel 21 Panel 22

Características clave

  • UI nativa con Dear ImGui sobre OpenGL ES 3 / EGL, renderizada por NativeActivity (sin layouts XML).
  • Backend gráfico propio (graphics_egl.cpp) con inicialización de contexto EGL, swap-buffers y manejo de superficie.
  • Cámara2 NDK completa (camera_ndk.cpp, camera_preview_renderer.cpp, camera_gl_external.cpp):
    • Enumeración de cámaras y metadatos (lens-facing, orientación del sensor).
    • Camino CPU (lectura de planos YUV/RAW) y camino GPU (interop vía AHardwareBuffer + EGLImage + textura externa OES).
    • Sesión de captura con request repetitivo, vista previa con corrección de aspecto, rotación y flip automáticos.
    • Persistencia de configuración de cámara (camera_config_ndk.cpp).
  • Audio AAudio (audio_ndk.cpp) con stream de salida (tono sintetizado configurable en frecuencia/ganancia) y stream de entrada con medición de pico.
  • Sensores NDK (sensors_ndk.cpp): acelerómetro, giroscopio, magnetómetro y rotation-vector con bombeo de eventos en el looper principal.
  • Red TCP/sockets (network_ndk.cpp) con prueba de conectividad host:puerto y timeout configurable.
  • Almacenamiento interno y assets (files_ndk.cpp, assets_ndk.cpp) con lectura/escritura de archivos y consumo del assets/config.json.
  • Configuración persistente (config_ndk.cpp) con perfiles guardables.
  • Puente Kotlin <-> NDK (AndroidBridgeActivity.kt + android_bridge_jni.cpp) que expone desde la JVM:
    • Solicitud y snapshot de permisos en runtime (cámara, audio, ubicación, notificaciones, BATTERY_STATS).
    • GPS en vivo (GPS_PROVIDER + NETWORK_PROVIDER) con eventos hacia C++.
    • Notificaciones de prueba con creación de canal en Android 8+.
    • Diagnóstico del dispositivo (batería, conectividad WiFi/celular, validación de red, rotación de display).
  • Sistema de logging unificado (app_log.cpp) visible en un panel ImGui dedicado, además de __android_log_print.
  • Multi-vista con paneles para System, Files, Assets, Network, Config, Logs, Audio, Sensors, Diagnostics, Android Bridge, Android Product y Camera.

Stack técnico

Capa Tecnología
Lenguajes C++17, Kotlin
UI Dear ImGui (backends imgui_impl_android + imgui_impl_opengl3)
Gráficos OpenGL ES 3 + EGL
Build Gradle (AGP 8.13.2), Kotlin 2.2.20, CMake 3.22.1
Plataforma Android NDK, NativeActivity, native_app_glue
Cámara Camera2 NDK (camera2ndk, mediandk) + AHardwareBuffer + EGLImage
Audio AAudio (aaudio)
ABI arm64-v8a
compileSdk / targetSdk / minSdk 35 / 35 / 26

Estructura del proyecto

ndk-imgui-pmv/
├── build.gradle                        # Configuración raíz (AGP + Kotlin)
├── settings.gradle                     # rootProject.name = "NdkImguiPmv"
└── app/
    ├── build.gradle                    # Configuración del módulo app + CMake + NDK ABI
    └── src/main/
        ├── AndroidManifest.xml         # Permisos y NativeActivity
        ├── assets/
        │   └── config.json             # Configuración de modulos
        ├── java/com/example/ndkimguipmv/
        │   └── AndroidBridgeActivity.kt# Puente Kotlin con JNI (permisos, GPS, etc.)
        └── cpp/
            ├── CMakeLists.txt          # Compilación nativa + ImGui
            ├── main.cpp                # Punto de entrada android_main + bucle principal
            ├── app_state.h             # Estado global de la app
            ├── graphics_egl.*          # Inicialización EGL/GLES3
            ├── ui_imgui.*              # Capa Dear ImGui (init, frame, paneles)
            ├── camera_ndk.*            # Camera2 NDK (sesion, captura, planos)
            ├── camera_gl_external.*    # Interop GPU (HardwareBuffer/EGLImage/OES)
            ├── camera_preview_renderer.* # Vista previa con corrección/rotación/flip
            ├── camera_config_ndk.*     # Persistencia de configuración de cámara
            ├── audio_ndk.*             # Streams AAudio in/out
            ├── sensors_ndk.*           # Sensores NDK
            ├── network_ndk.*           # Pruebas de red TCP
            ├── files_ndk.*             # I/O en almacenamiento interno
            ├── assets_ndk.*            # Lectura del AssetManager
            ├── config_ndk.*            # Persistencia de perfiles
            ├── android_bridge_jni.*    # Implementacion JNI (callbacks desde Kotlin)
            ├── app_log.*               # Logging unificado (UI + logcat)
            ├── platform_log.h          # Macros LOGI/LOGE
            └── imgui/                  # Fuentes de Dear ImGui (debes proveerlas)

Nota sobre Dear ImGui: las fuentes de Dear ImGui (imgui.cpp, imgui_draw.cpp, imgui_tables.cpp, imgui_widgets.cpp, imgui_demo.cpp y los backends imgui_impl_android.cpp / imgui_impl_opengl3.cpp) deben colocarse en app/src/main/cpp/imgui/ (con la subcarpeta backends/). Puedes copiarlas o agregarlas como submódulo desde el repositorio oficial de ocornut/imgui.

Permisos declarados

INTERNET, ACCESS_NETWORK_STATE, CAMERA, RECORD_AUDIO, ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION, POST_NOTIFICATIONS y BATTERY_STATS (este último se reporta como NOT_REQUESTABLE y se gestiona vía settings del sistema).

Requisitos

  • Android Studio (recomendado: Hedgehog/Iguana o superior).
  • Android NDK y CMake 3.22.1+ instalados desde el SDK Manager.
  • Un dispositivo o emulador arm64-v8a con Android 8.0 (API 26) o superior.
  • Soporte de OpenGL ES 3.0.
  • (Opcional) Permisos de cámara, micrófono y ubicación concedidos para probar los paneles correspondientes.

Compilación y ejecución

  1. Clona el repositorio:

    git clone <url-del-repo>
    cd ndk-imgui-pmv
  2. Coloca las fuentes de Dear ImGui en app/src/main/cpp/imgui/ (incluyendo el directorio backends/).

  3. Ajusta local.properties con la ruta de tu Android SDK:

    sdk.dir=C:/Users/<tu-usuario>/AppData/Local/Android/Sdk
  4. Compila e instala con Gradle:

    ./gradlew :app:installDebug

    O abre el proyecto en Android Studio y ejecútalo con Run > Run 'app'.

  5. Concede los permisos en el primer arranque desde el panel Android Bridge.

Configuración (assets/config.json)

Permite habilitar/deshabilitar módulos al inicializar:

{
  "app": "NDK ImGui PMV",
  "sprint": "2.1",
  "modules": {
    "internal_files": true,
    "assets": true,
    "network": false,
    "audio": false,
    "camera": false
  }
}

Casos de uso

  • Herramientas internas y de QA para apps Android que requieran depuración avanzada del hardware.
  • Prototipos de visión por computadora / AR que necesiten acceso de baja latencia a la cámara con interop GPU.
  • Aplicaciones de telemetría móvil (sensores, GPS, batería, red) con UI rica y bajo overhead.
  • Motores ligeros y demos gráficas que ya usan ImGui en escritorio y quieran portar su panel de control a Android.
  • Bases para aplicaciones IoT móviles que combinen sensores, audio y red sobre NDK.
  • Material educativo sobre integración Kotlin-JNI-NDK y arquitectura con NativeActivity.

Estado actual: [work in progress]

Autor

Servicios y consultoría

¿Necesitas asesoría, guía técnica o la elaboración de productos personalizados (personales o comerciales) sobre Android NDK, Dear ImGui, integración de Camera2/AAudio/sensores, arquitecturas C++/Kotlin/JNI o aplicaciones nativas de alto rendimiento? No dudes en ponerte en contacto.

También recibo con gusto:

  • Invitaciones para evaluar la factibilidad técnica de proyectos (descubrimiento, análisis de viabilidad, estimaciones, proof of concept).
  • Invitaciones para participar en licitaciones públicas o privadas y concursos de empresas, ya sea como contratista principal, subcontratista, consultor técnico o miembro de equipo evaluador.
  • Proyectos personales, medianos y complejos — desde prototipos y MVPs hasta sistemas de mediana y alta complejidad, integraciones multi-plataforma y desarrollos a medida.

Canales de contacto:

Estoy disponible para colaboraciones, mentorías, freelance, contratos por proyecto y desarrollos a medida.

☕ Invítame un café

¡Hola! Si disfrutas del proyecto y te gustaría apoyarlo de una manera diferente, puedes invitarme un café ☕ haciendo una donación. Esto me ayuda a seguir dedicando mi tiempo a mejorar el código y crear nuevas funcionalidades.

Soy un apasionado del desarrollo de software y siempre estoy buscando nuevas formas de aprender y compartir mis conocimientos. Cada contribución, por pequeña que sea, significa mucho para mí y me motiva a seguir adelante.

Puedes invitarme un café a través de Paypal: https://www.paypal.com/paypalme/luiscochachichamorro

¡Gracias por tu apoyo! 🚀

Licencia

Copyright (C) 2024 Luis Eduardo Cochachi Chamorro

Este proyecto se distribuye bajo la licencia GNU General Public License versión 3 o cualquier versión posterior (GPLv3), con la excepción de vinculación comercial. Esto significa que puedes utilizar, modificar y distribuir este código libremente, incluso con fines comerciales, pero cualquier aplicación que combine este código con otros componentes debe ser liberada bajo la GPLv3.

About

Plataforma demostrativa de instrumentación Android (NDK + Dear ImGui + OpenGL ES 3) con paneles interactivos para cámara, audio, sensores, GPS, red y diagnóstico — base para herramientas internas, prototipos AR/CV y aplicaciones de telemetría móvil.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Contributors