Cómo dibujar con framebuffer en Android?

Me gustaría escribir una aplicación para Android que muestra cosas en la pantalla usando el framebuffer. Esto se ejecutará sólo en un dispositivo de raíz específica, por lo que los permisos, etc no es un problema. La misma aplicación (versión de prueba simple de todos modos) ya está funcionando bien en PC / Linux.

Las preguntas:

  1. ¿Cómo evitar que el sistema operativo Android acceda al framebuffer? Me gustaría, mientras mi aplicación se está ejecutando, que el sistema operativo nunca toque el framebuffer, no escribe y no ioctls. ¿Qué debo hacer para obtener el uso exclusivo de la framebuffer, y luego (cuando mi aplicación se cierra) devolverlo al sistema operativo?

  2. ¿Hay alguna diferencia entre el framebuffer de Android y el framebuffer de Linux para tener en cuenta?

PS Me gustaría iniciar mi aplicación como una aplicación regular de Android (con algún código nativo), simplemente no tiene visible UI, excepto para framebuffer dibuja que asumir toda la pantalla. Sería bueno aún ser capaz de obtener eventos desde el sistema operativo.

Véase también: http://www.kandroid.org/online-pdk/guide/display_drivers.html

Hola Alex No estoy seguro de por qué / cómo detener el sistema operativo Android desde escribir a framebuffer. Siempre y cuando su aplicación Android es visible y en la parte superior tiene el control como lo que desea mostrar.

Su aplicación debe tener una actividad con un SurfaceView (es posible que desee que su aplicación oculte la barra de notificación llamar a esta función en oncreate de su actividad) requestWindowFeature(Window.FEATURE_NO_TITLE); )

Su actividad debe tener SurfaceHolder.Callback implementación para manejar las devoluciones de llamada como cuando la superficie está lista para llenarse con framebuffer. Obtener el objeto de soporte de superficie como SurfaceView.getHolder () en caso de que desee establecer los formatos de píxeles de la vista, etc

Una vez que se llame a " surfaceCreated ", se puede pasar con seguridad el objeto de superficie (pasar el ancho y la altura tal vez una buena idea también) al nativo para poder llenarlo con la clase "ANownWindow".

Compruebe el código de ejemplo NDK para ver cómo utilizar la documentación NDK de clase

SurfaceHolder.Callback documentación

Documentación de SurfaceHolder

Esencialmente usted necesita a estos (ON JB / Kitkat)

  1. Obtenga la ventana nativa (ANativeWindow) asociada con la vista de ANativeWindow_fromSurface por ANativeWindow_fromSurface .

  2. Adquiera un bloqueo en ANativeWindow por ANativeWindow_acquire .

  3. Establecer parámetros de geometría (ventana, anchura, altura, pf) para la ventana nativa por ANativeWindow_setBuffersGeometry

  4. Cargue el nativewindow con el frambuffer almacenado (aplique el rectángulo sucio si alguno aquí) por ANativeWindow_lock

  5. Paso final para desbloquear y publicar los cambios para la representación por ANativeWindow_unlockAndPost

Vaya a través de los ejemplos de ejemplo ndk en caso de que necesite código de ejemplo. Documentación NDK

  • Compartir un espacio de trabajo Eclipse entre Linux y Windows
  • El proyecto no se creó debido a "No se pudo eliminar" / tesseract-android-tools / bin / classes / com en Linux
  • EGLImages con renderbuffer como hermano de origen y textura como hermano objetivo
  • Una buena manera de identificar la sección de código en / proc / * / maps
  • Error al ejecutar HelloWorld cocos2dx
  • Ionic android build Error - Error al encontrar la variable de entorno 'ANDROID_HOME'
  • Dificultades para llamar directamente a una función NDK de Android directamente de Delphi
  • ¿Cómo escribir el programa de servidor nativo nativo (no aplicación) para dispositivos Android?
  • ¿Emulador Android se ejecutará automáticamente con aceleración de hardware si se instala KVM y se seleccionó la GPU Host de uso en el momento de la creación de AVD?
  • Android Lubuntu - error libGL: no se pudo cargar el controlador: i965
  • Adb deja de detectar mi teléfono después de un tiempo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.