Cada vez que hablamos sobre programación en Android nos estamos refiriendo a la programación nativa y a Java, un lenguaje de orientación a objetos que fue elegido para desarrollar toda la API con la que contamos para hacer una app en Android.
A pesar de que podemos encontrarnos apps híbridas (que básicamente utilizan contenedores de webs para mostrar webs móviles y hacer que parezca una app), también es cierto que podemos llegar a encontrarnos apps puramente nativas que utilizan código que no es Java.
Android NDK, combinando lenguajes de programación
Para ello, Google nos pone a nuestra disposición Android NDK, una herramienta que nos permite implementar parte de nuestro código con otros lenguajes nativos como C o C++. Si bien esto nos puede servir para reutilizar código como por ejemplo el relacionado con la lógica de negocio, también podría servirnos para reutilizar librerías que hayan sido escritas en este lenguaje.
Esta librería la podemos descargar desde aquí o desde Android Studio (SDK Tools):
Android NDK, toda la información
Para empezar, uno de los puntos más interesantes es que conozcamos las arquitecturas compatibles con Android NDK:
Una vez conocidas éstas, es realmente interesante que conozcamos el funcionamiento de NDK en sí y cómo gestiona el proyecto de nuestra app:
Con esto deberíamos tener suficiente, pero incluso podríamos poder depurar nuestro código, para lo que esta información resulta clave:
Como hemos comentado anteriormente, no sólo sirve para nuestro código, sino incluso para reutilizar librerías de terceros. Para ello Google también nos da información de cómo incluirlas en nuestra app:
Android NDK para sacar el máximo rendimiento de la CPU
Normalmente NDK se suele utilizar en determinadas aplicaciones que quieren poder llevar a cabo un uso muy intenso de la CPU como por ejemplo pueden ser los motores de videojuegos o de procesamiento de señal. Este tipo de actividad requiere unas operaciones matemáticas muy costosas, las cuales podemos optimizar gracias al uso de NDK.
De hecho, uno de los aspectos más importantes es el procesamiento de alto rendimiento de audio, para el cual tenemos disponible una librería que nos permite utilizar C o C++ para implementar audio con baja latencia y alto rendimiento, así como sintetizadores, estaciones digitales de audio, karaokes…
Par ael caso del procesamiento gráfico 3D tenemos Vulkan, de la cual ya hemos hablado en alguna ocasión, para ofrecernos una API para crear gráficos en tiempo real de alta calidad de un modo más sencillo y sin minar el rendimiento de nuestro dispositivo.
Android NDK permite así ampliar las posibilidades, especialmente en los que tenemos que mejorar el rendimiento con respecto a lo que Java puede ofrecer o simplemente para reutilizar código. Es más, ¿os resultaría extraño que tengáis ya apps que utilicen NDK? No debería si tenéis apps como WhatsApp, Instagram o Skype…