Acceder

Ver la Versión Completa : [ CONSULTA ] Complejidad de las aplicaciones NDK


rhada
03/05/14, 07:18:15
Hola tengo una duda sobre NDK.
En la página de Android se lee la siguiente advertencia:

"Notably, using native code on Android generally does not result in a noticable performance improvement, but it always increases your app complexity. In general, you should only use the NDK if it is essential to your app—never because you simply prefer to program in C/C++."

Y mi pregunta es: ¿A qué se refiere exactamente con complejidad?
A mi se me ocurren 2 cosas:
1) Un mayor esfuerzo para el procesador y mayor demanda de RAM.
2) Dificultad en la escritura y mantenimiento del programa.

En concreto quiero saber si hay riesgos de "sobre-esfuerzo" o desgaste extra para el hardware.
Saludos desde Argentina y un Gracias anticipado. :-)

P/D: La principal razón para usar NDK es adaptar una parte de un programa q ya estuve desarrollando en c++.
Además, no quiero aprender Java.

ctkd17
03/05/14, 10:04:01
Muy buenas,

Yo me imagino que la complegidad viene del NO uso de la JVM de Android. Android esta basado en esa JVM y todas las API's que se pueden usar terminan en la maquina virtual.

Si te pasas a NDK estarás programando directamente en el micro lo que conlleva a que tengas que tener en cuenta la gestión de memoria o cosas similares.

El NDK se usa para implementar funciones a bajo nivel pero en paralelo a la JVM de manera que se incremente la funcionalidad de Android. Realmente la idea es añadir librerias que luego uses en java.

Aqui te dejo una imagen de lo que me refiero:
http://3.bp.blogspot.com/-5olcmkhQge4/T_-TfW2kDiI/AAAAAAAAAMM/Zeg0gh7XOzU/s1600/EstructuraAndroid.png
y aqui una explicación:
http://developing.frogtek.org/2011/11/16/aprendiendo-ndk-frogtek/

kriogeN
03/05/14, 10:04:06
Se refiere al 2, dificultad de escritura y mantenimiento del programa.

Técnicamente es posible hacer una aplicación 100% en NDK, sobre todo desde que se introdujo el NativeActivity en Gingerbread, pero tal y como dice Google no es nada recomendable. En el caso de que quieras hacerlo espero que tengas muy controlado el OpenGL 2.0, porque es la única forma de poder hacer una aplicación 100% en C++.

rhada
17/05/14, 05:01:54
Muchicimas Gracias x las aclaraciones!! ctkd17 y KriogeN
La verdad m sorprendió la rapidez :aplausos:
Voy a leer con atención esos enlaces y volveré... a comentar :)
Saludos!!!

rhada
25/05/14, 09:19:05
ctkd17:
Si ya había entrado a ese blog. También hay una explicación detallada del uso de NDK en:
http://universo.emergya.es/espacios/jialvarez/conectar-programas-cc-con-aplicaciones-android
Saludos y gracias.

rhada
25/05/14, 09:20:07
Kriogen:
Me decis q la segunda, bue entonces m quedo tranquilo, porque no peligra el hardware. Mi pregunta iba x ahí: el sentido de la palabra "complexity" en la advertencia ...el único riesgo, entonces, es q yo quede rendido y frustrado si el proyecto excede mis capacidades... Jej aunque, de todas formas me imagino q en el peor de los casos una mala implementación provocará inestabilidad y reinicios inesperados. No es para andar jugando tampoco :P eso está claro. Saludos y gracias.

P/D: te iba a hacer una pregunta sobre sdl, pero para mantener el orden mejor hago otra consulta

kriogeN
25/05/14, 09:42:29
Técnicamente requiere muchos más recursos una aplicación en Java que en C++, de hecho, cuando una aplicación tiene que hacer una tarea con un consumo muy alto (por ejemplo los motores 3D de los juegos, o aplicar filtros gráficos a una imagen directamente desde la cámara, o comprimir vídeo, etc) se hace siempre en C++, porque en Java funciona lento y muy inestable, terminando dando en el 90% de las ocasiones el famosísimo OutOfMemoryError, cosa que con C++ no pasa.

Pero como ya te he dicho antes, no es recomendable hacer la aplicación 100% en NDK, deberías hacerla en Java y las partes "gordas" programarlas mediante funciones en C++, si es que realmente necesitas algo que requiera tanta potencia, que salvo los casos que te he puesto anteriormente pocas cosas necesitan del NDK.