jueves, 15 de diciembre de 2011

Programando C para Android

Para empezar, necesitamos un Cross Toolchain, que serian las herramientas necesarias para poder compilar un programa escrito en C, en una máquina con otra arquitectura distinta a ARM, en mi caso es Fedora y la arquitecutra i686. Y el móvil es un HTC, que como la mayoria de los smartphones, lleva un procesador ARM.

Primero, descargamos el Cross toolchain.
# cd /etc/yum.repos.d/
# wget http://ftp.linux.org.uk/pub/linux/arm/fedora/cross/cross.repo
# yum install armv5tel-redhat-linux-gnueabi-gcc


Ahora ya tenemos el compilador que vamos a usar para compilar nuestro código en C, que posteriormente ejecutaremos en el móvil.

(Este es el código que vamos a compilar)


#include "stdio.h"

int main (int argc, char* argv[])
{
printf("Hello World\n");
return 0;
}


Compilamos:

$ armv5tel-redhat-linux-gnueabi-gcc -static helloworld.c -o hola
$ file hello

(Nos saldrá esto: hello: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, for GNU/Linux 2.6.14, not stripped)

Ahora vamos a pasarlo al aparato en el que lo vamos a ejecutar, en este caso es un smartphone, que tiene android. Así que instalamos Android Tools desde los repositorios de fedora.

$ sudo yum install android-tools


Ahora podremos entrar al terminal escribiendo.

$ adb shell
$ cd sdcard
$ mkdir ProgramasC
$ exit
$ adb push hola /sdcard/ProgramasC/hola

(Aquí teneis que poner la ruta donde querais tener el ejecutable)

ahora podeis comprobar si lo podeis ejecutar.

$ adb shell
$ cd sdcard/ProgramasC
$ chmod 777 hola
$ ./hola


(Si no lo podemos ejecutar, comprobaremos con mount, a ver si tiene puesta la opción de noexec)
$ mount | grep -i sdcard

Si tiene noexec, tendremos que hacer un remount poniendola en exec.
$mount -o remount,exec -t vfat /dev/block/vold/179:1 /mnt/sdcard





(Aquí tendreis que poner el lugar donde este montada vuestra tarjeta SD)
Una vez hecho esto, ya podreis ejecutar vuestro código escrito en C en vuestro ARM :)


1 comentario: