Android, impresión de un chico programador para Android en C

Todo aquello que no está relacionado con Gemix Studio ni con la programación DIV en general.

Android, impresión de un chico programador para Android en C

Postby erkosone » Wed Aug 31, 2011 2:52 pm

Creo que esto puede ser interesante para muchos, lo pego directamente:


Hace poco en Codenix nos compramos un iPhone 2 y un Galaxy Tab para explorar un poco las plataformas, dada la alta y creciente demanda que hay, y el hecho de que clientes estan interesados en hacer cosas para las mismas.

Dada la cantidad enorme de codigo en C++ que tenemos, y que C++ es practicamente el unico lenguaje que permite escribir codigo para todas las plataformas (excepto web, salvo por nativeclient), me puse en campaña para portar nuestro engine (don godofredo). Como estoy con mucho laburo, lo fui haciendo de a pedacitos cuando tuve tiempo.

Dado que la mayoria conocen iPhone, me voy a enfocar en mi experiencia con Android..

Nota al margen, no pidan mucha ayuda en foros o en irc.. yo no se que le pasa por la cabeza a la gente pero asi como la mayoria de quienes programan para iPhone dicen que lo mejor para programar es Objective C, en Android la mayoria te van a decir que es al pedo usar C++ y que Java es mejor, y que usar NDK es "dirty" y no es la forma correcta de programar para Android.
Explicarle a alguien que si vas a hacer una inversion en tecnologia, y que desarrollas para clientes que publican en PC, Mac, telefonos y consolas, y obviamente vas a obviar el lenguaje nativo por mas bueno que este para elegir un lenguaje que funcione en todas las plataformas.. es inutil.

El primer intento fue hacerlo en Java+JNI, ya que parece ser lo mas comun. Esto consiste en hacer un "core" minimo de la aplicacion en Java que se comunica con el codigo en C++, que es cargado de un shared object. Este approach es similar al que hace mucho se usaba en PalmOS 5 para comunicar el codigo de m68k con el de ARM, y la verdad es que es bastante hinchapelotas. Para la parte de C++ esta el Android NDK, que se agrega al SDK y trae gcc, headers, etc para hacer la compilacion nativa. Si bien se puede, lo unico que realmente ganas es que tu aplicacion funcione en android 2.1 y 2.2.

Como mi objetivo en este momento es que funcione, y no vender nada (Todavia), y prefiero tener algo funcionando antes que pelearme con Java+JNI, decidi programar para NativeActivity, un framework nativo de C/C++que tiene practicamente toda la API relevante de Android en headers. La limitacion es que solamente funciona en telefonos con Android 2.3+, y son muy poquitos los telefonos que se venden con esa version en este momento. Bueno, supongo que cuando necesite vender algo, me esforzare un poco mas en terminar la version de JNI.

Respecto a las herramientas, hay dos opciones:
1) Haces todo comodamente desde la IDE Eclipse
2) Estas en bolas, arreglatelas como puedas

En mi caso elegi 2), porque:
a) El engine es enorme y usa un sistema de build complejo que genera un monton de archivos, maneja varias plataformas, etc. Adaptarlo al sistema pedorro de makefiles de Android/Eclipse es mas dificil que adaptar los buid-steps de Android a SCons.
b) No me gusta eclipse..

En general no fue muy dificil tener mi proyecto compilando para Android, no me llevo mas de 2 o 3 horas. Las herramientas de commandline (android y adb) son excelentes y muy intuitivas, y permiten controlar todo lo que pasa en el telefono con un par de comanditos. Ej, poner o sacar archivos, instalar cosas, ejecutar un shell remoto, ver los logs, etc. Muy util!

El problema surgio cuando, obviamente, al correr lo que hice por primera vez se colgo todo a la re [xxxx].. entonces me puse a ver como usar gdb y ahi es cuando empezaron a surgir los problemas. Para debuggear aplicaciones, hay que usar gdbserver en el telefono, y comunicarlo por un pipe shareado a traves de usb a un gdb local. Al mismo tiempo, para debugear, hay que transferir el espacio virtual del proceso al host (a la PC) para que gdb local lea el codigo y demas. Si eso ya suena complicado, hacerlo es 50 veces mas complicado.

Android es un sistema operativo basado en linux donde cada aplicacion es un usuario, de esta forma pueden muy facilmente darle un espacio virtual y limitaciones a cada aplicaccion, para que no interactue con el resto del sistema operativo. El problema es que este sandbox no permite conectar gdbserver al proceso facilmente, ya que hay que correrlo con el usuario correcto para que pueda engancharse. Para solucionarlo, hay que meter gdbserver dentro de la aplicacion, asi corre con iguales permisos y despues pedirle a adb que ejecute comandos como si fuera el usuario.

La verdad, es muy complejo y no logre hacerlo andar. Android NDK viene con un script que lo hace por vos (ndk-gdb), pero esta extremadamente mal programado y siempre falla por una boludez u otra. Me canse de atarlo con alambre y finalmente recurri a printf para arreglar los crashes.
Google definitivamente tiene que mejorar Android en ese aspecto..

Respecto al telefono y a la API en si, la API en general esta bien, pero tiene varias estupideces, especialmente en lo siguiente:

1) El contexto de OpenGL se borra cada vez que suspendes y volves de la aplicacion. Si bien te avisa, esto es una reverenda mierda. en la documentacion dice "usa este callback para subir los recursos de vuelta". Obviamente quien hizo la API jamas programo un juego en su vida y jamas se le paso por la cabeza que mucho del contenido puede estar generado o modificado en tiempo de ejcucion. (Ej: texturas generadas, esqueletos, particulas por GLSL, etc). La solucion es, lamentablemente, mantener copia de los recursos cargados en RAM, como hacen las versiones mas viejas de DirectX en Windows XP. Es un desperdicio de memoria, pero bueh..
Simplemente una idea estupida que sacrifica la calidad de las aplicaciones y dificulta enormemente el porting. Creo que es mejor que Android mate mas aplicaciones porque se quedo sin memoria a que te incremente tanto la complejidad.

2) No poes acceder al filesystem, todo tu contenido se guarda en el APK (Android Package) y se accede con una API de Google, (AssetManager). La API simula un filesystem, pero es *MUY* sencilla y limitada. Las trasnferencias del APK a memoria son lentas, y el toolchain de Android se le puede cantar comprimirte todo, sin preguntarte si asi lo desea, enlentenciendo aun mas la carga. En los foros dice que renombes tus archivos, sean lo que sean, a mp3 para que el tool no los comprima. De la misma forma, Android puede decidir subir algunos assets a memoria POR QUE SI. Podes preguntar si estan en memoria, pero que se yo.. es complicado el tema... y hay que arreglarlo metiendo buffering.

3) La documentacion de la API nativa no existe. No es exactamente la misma que la API de Java asi que hay que ir con sombrero de Indiana Jhones y probar..

Pero bueno, fuera de esos problemas, es bastante trabajable y las herramientas de commandline facilitan mucho la tarea de subir versiones nuevas y probar.. cuando tenga tiempo de hacer mas y haya mas progreso vuelvo a postear, saludos!!
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: Android, impresión de un chico programador para Android

Postby erkosone » Wed Aug 31, 2011 3:03 pm

En definitiva..

El port de Gemix a Android va a costar un par de arritmias y falta de oxigeno a CicTec, Gino y jedive jejejeje...
Parece que es un sistema estúpido, montado de una forma estúpida, en definitiva.. soberana caca..

No pensava que Android fuera tan quiskilloso... por eso es tan barato jeje.
Ahora ya se por que vale tan poco.
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: Android, impresión de un chico programador para Android

Postby caanbago » Wed Aug 31, 2011 3:40 pm

erkosone wrote:Parece que es un sistema estúpido, montado de una forma estúpida, en definitiva.. soberana caca..


Erkosone, no creo que a partir de una opinión se puedan hacer esos comentarios. Es cuestión de cada quien el usar las herramientas para lograr lo que necesita. Las limitaciones estan en los programadores y desarrolladores más que en el sistema operativo, herramientas, compiladores, etc.

erkosone wrote:No pensava que Android fuera tan quiskilloso... por eso es tan barato jeje.


Hay que recordar que no por ser Open Source sea necesariamente barato. Para que el sistema funcione bien debe te correr sobre un buen hardware.

erkosone wrote:El port de Gemix a Android va a costar un par de arritmias y falta de oxigeno a CicTec, Gino y jedive jejejeje...


Claro, habrá mucho trabajo para lograr esto.
User avatar
caanbago
 
Posts: 144
Joined: Mon Apr 13, 2009 7:03 am

Re: Android, impresión de un chico programador para Android

Postby PAMERCO » Wed Aug 31, 2011 4:02 pm

De todas formas.... como dice el mismo en el escrito.... como solo estaba haciendo pruebas de los caminos que se le iban abriendo, siempre escoge el peor.... pero sobre gustos....
reto navidad 2011 santa´s nightmare
http://www.hot-ice-enterprise.com
primer juego comercial http://www.gemixstudio.com/forums/viewtopic.php?f=128&t=4146http://www.indievania.com/games/zombie-puf
User avatar
PAMERCO
 
Posts: 1519
Joined: Wed Feb 04, 2009 11:22 am
Location: palma de mallorca

Re: Android, impresión de un chico programador para Android

Postby erkosone » Wed Aug 31, 2011 4:12 pm

Bueno si, esto es una opinión personal vaya, tienes razón.

El caso es que por lo que voy indagando sobre la programación para android, mas bien son todo trabas que ayuda, el comentario de 'caca' es una impresión ia personal vaya, lo que quería decir es que hay mucha diferencia entre programar para android que programar para ios.
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: Android, impresión de un chico programador para Android

Postby TYCO » Wed Aug 31, 2011 9:49 pm

Es que lo que tiene "free"... y es como Linux, esta mu bien.... para tocar las "pelotas"!. Suele ser así bastantes cosas open source. Pero como siempre todo es opinión de cada uno.
Todo Modo Gráfico tiene por detrás una Línea de Comandos.

Proyecto: SnowCraft Remake (100%).
Proyecto: Bomb a Bomb Remake (100%).
Proyecto: Rally Mortal (87%).

[RETO]: 20lineas - [JUEGO]: eLaberinto[CONCURSO]: EL JUEGO DEL VERANO 2011 - [JUEGO]: PlayaBall
User avatar
TYCO
 
Posts: 3591
Joined: Tue Sep 02, 2008 7:38 pm

Re: Android, impresión de un chico programador para Android

Postby erkosone » Wed Aug 31, 2011 10:02 pm

Algunas veces hay software como "Gimp" que son Open Source y están muy bien, no todos los open source son iguales vaya.. pero como norma general si, están bastante manga por hombro.
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: Android, impresión de un chico programador para Android

Postby CicTec » Tue Sep 06, 2011 10:01 pm

Mmmmmm, bueno parece que no es facil si, aunque el programador ese hizo mas que nada pruebas, otra cosa es hacer tests efectivos, etc..., aunque creo que en este aspecto sera mas dificil portar Android que iOS.
User avatar
CicTec
 
Posts: 16571
Joined: Thu Jul 31, 2008 10:18 pm


Return to Offtopic

Who is online

Users browsing this forum: No registered users and 3 guests

cron