lunes, 27 de febrero de 2012

NDK de Android [Lab]

Luego de instalar android, me topé con el problema de la librería, que necesitamos para realizar nuestro proyecto de la materia de móviles, ya que no se encuentra del todo disponible para android, pero encontré una forma de hacer la librería, de manera que sea compatible con el sistema, pero tenía que descargar el NDK de android, algo que nunca había escuchado y me llamó la atención, así que en esta entrada explico un poco que es el NDK (ojo, no confundir con el SDK) y para que les puede servir a mis compañeros.





El NDK [Native Development Kit] de Android son herramientas con las cuales podemos agregar ciertos componentes, que necesitan el uso de código nativo en aplicaciones de Android, por lo que con el uso del NDK podemos implementar parte de nuestras aplicaciones, usando el código nativo con los lenguajes de C y C++, proporcionando ciertos beneficions ya que puedes reutilizar el código existente y algunas veces obtener un aumento de velocidad.

Por lo tanto, con el uso del NDK por medio de las herramientas nos dan la posibilidad de generar bibliotecas, utilizando código fuenta nativo en C y C++, pudiendo integrar bibliotecas en un paquete de aplicaciones para poderlas utilizar en el dispositivo móvil con el sistema, al igual que bibliotecas nativas del sistema que se utilizan para OS posteriores del 2.3, sportando conjuntos de instrucciones ARM como ARMc5TE (Thumb-1), ARMc7-A(Thumb-2), VFPv3-D16 (NEON/VFPv3-D32), entre otros, hay que tener en cuenta que algunos de estos arquitecturas tienen restricciones dependiendo si el CPU es compatible.

El NDK nos da librerías estables, como la librería de C, la librería matemática libm, OpenGL para gráficos en 3D, interfaz JNI (Java Native Interface), entre otras.

Es claro destacar, que no es nada mas de utilizar el NDK sin tener claro para que lo vas a usar en tu aplicación, por lo que hay que saber que no beneficiará a todos las aplicaciones, por lo que debemos de saber cuales son las ventajas y desventajas de utilizar código nativo en el sistema, por lo que esto no quiere decir que utlizar este tipo de código vamos a tener un aumento automático de performance, algunas veces aumentamos la complejidad de nuestra programación, por lo que debemos de tener en cuenta que el código nativo se debe de utlizar solamente cuando es esencial para el desarrollo de la aplicación y no decir "porque quiero hacer una app de Android en C",  no, para eso no sirve.

Algunas ejemplos de cuando utilizar en NDK, sería apliacaciones autónomas de las cuales se necesitan operaciones intensivas al CPU, pero que no necesitan mucha memoria, como por ejemplo el procesamiento de señales, o si queremos realizar simulaciones de física, por lo que no nada mas el hecho de hacer un método en C va a realizar un aumento en general al rendimiento, por lo que tenemos que cuestionarnos si es necesario el desarrollar en código nativo o ver si la API de android tiene lo que necesitamos.

Tenemos dos maneras de utilizar el código nativo de Android:
  • Escribir nuestra aplicaciones usando el framework de Android y usar el JNI para accesar a las APIs que nos da el Android NDK.
  • Escribir una actividad nativa, lo cual nos permite implementar el ciclo de vida que nos sirve para saber que regresa dicha función en código nativo.

El NDK proporciona librerías de sistema para las APIs nativas, garantizando la compatibilidad de todas las versiones de Android, como por ejemplo;
  • libc (Librería de C)
  • libm (Librería de matemáticas)
  • JNI (Java native interface)
  • libz (compresión Zlib)
  • liblog (logging de Android)
  • OpenGL ES 1.1 y OpenGL ES 2.0 (Gráficas 3D)
  • libjnigraphics (Acceso al buffer de pixeles)
  • OpenSL ES (Librería para audio)

Links útiles.

2 comentarios:

  1. Buenas roberto, yo estudio en la universidad de las ciencias informáticas en Cuba. Y me gustaria saber Cómo a partir de un sistema distribuido se puede montar una aplicación escritorio en un teléfono con sistema android??
    La aplicación lo que hace es notificar al usuario.
    Te agradeceria si me contestaras al correo alinita@gmx.com
    Saludos

    ResponderEliminar