PocketMagic

PocketMagic

Donde Tecnología encuentra magia

Fuente RSS de PocketMagic
 

¡El androide C desarrollo natal – toma el control total!

Por Radu Motisan Fijado el 12 de mayo de 2009

Un proyecto reciente he estado trabajando en la programación de Bluetooth requerida en el Androide.
Teniendo un vistazo sobre el 1.5 último Androide SDK, yo podría ver que el apoyo de bluetooth fallaba. La investigación posterior indicó que Google expresivamente excluyó Bluetooth APIs inculpación de la carencia del tiempo.

Por otra parte, no soy un admirador de Java grande, por no decir más. Encuentro Java poco amistosa, y no me gustan la mirada y la sensación de Java apps. Lamentable, prefiero C/C ++ ya que proporciona el mejor control y la flexibilidad. Entonces es tiempo de comenzar a hacer C/C ++ solicitudes natales del Androide Google. Sorry, I prefer C/C++ since it provides better control and flexibility. So it's time to start doing C/C++ native applications for the Google Android.

¿Cómo dirigido un programa C en Androide Google?
Primera cosa que mostraré aquí, debe compilar un programa C simple para el Androide.


#include <stdio.h>
int main()
{
printf("Hello Google Android world!\nwww.pocketmagic.net\n");
return 1;
}

Guarde este programa como test.c. En los siguientes pasos compilaremos esta muestra para el Androide Google usando gcc.

Los instrumentos

1. Descargue ubuntu linux. Actualmente uso la edición 9.04 de Escritorio en una máquina virtual.
Atención: usted tendrá que instalar Ubuntu en una máquina con el Carnero de AL MENOS 1.5 GB, 10 GB ext2 partición y partición de Cambio de 2 GB o usted no será capaz de usar la información de este seminario (menos entonces los requisitos mínimos causarán la imposibilidad de compilar el Código de Androide y necesitamos esto para las bibliotecas).

2. Una vez que Ubuntu es instalado, descargue el Código fuente de Androide. En su caja linux instalan paquetes adicionales:
$ sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev
$ sudo apt-get install valgrind

Éste sólo es para usuarios Intrépidos Ubuntu:

$ sudo apt-get install lib32readline5-dev

3. Instale Repo
Cree un ~ / directorio de recipiente en su directorio de inicio, y compruebe para estar seguro que este directorio de recipiente está en su camino:

$ cd ~
$ mkdir bin
$ echo $PATH

Para añadirlo al Camino, usted puede usar:

$ PATH=$PATH:~/bin/

Descargue la escritura repo y asegúrese que es ejecutable:

$ curl http://android.git.kernel.org/repo >~/bin/repo
$ chmod a+x ~/bin/repo

4. Inicializar a un cliente de Repo
Cree un directorio vacío para sostener sus archivos trabajadores:

$ mkdir mydroid
$ cd mydroid

Repo dirigido init para rebajar la última versión de Repo con todos sus apuros de error de programación más recientes. Usted debe especificar un URL para la manifestación:

$ repo init -u git://android.git.kernel.org/platform/manifest.git
$ repo init -u git://android.git.kernel.org/platform/manifest.git -b cupcake

Cuando apuntado, configure Repo con su verdadero nombre y dirección de correo electrónico. Si usted planea presentar el código, use una dirección de correo electrónico que tiene que ver con una cuenta de Google.
Una inicialización acertada terminará con un mensaje tal como

repo initialized in /mydroid

Su directorio de cliente debería contener ahora un directorio.repo donde los archivos, como la manifestación serán guardados.

5. Adquisición de los archivos
Para derribar archivos a su directorio de trabajo de los depósitos como especificado en la manifestación de falta, correr

$ repo sync

Para más sobre la sincronización de repo y otras órdenes de Repo, ver Using Repo y Git.
Los archivos fuentes de Androide estarán localizados en su directorio de trabajo bajo sus nombres del proyecto.

6. Verifying Git Tags
Cargue la clave pública siguiente en su base de datos de llave de GnuPG. La llave es usada para firmar etiquetas anotadas que representan liberaciones.

$ gpg --import

entonces pegue la llave (s) abajo, y control-de-la-prensa-D para terminar la entrada y tratar las llaves.

key 9AB10E78: "The Android Open Source Project <initial-contribution@android.com>"
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.2.2 (GNU/Linux)

mQGiBEnnWD4RBACt9/h4v9xnnGDou13y3dvOx6/t43LPPIxeJ8eX9WB+8LLuROSV
lFhpHawsVAcFlmi7f7jdSRF+OvtZL9ShPKdLfwBJMNkU66/TZmPewS4m782ndtw7
8tR1cXb197Ob8kOfQB3A9yk2XZ4ei4ZC3i6wVdqHLRxABdncwu5hOF9KXwCgkxMD
u4PVgChaAJzTYJ1EG+UYBIUEAJmfearb0qRAN7dEoff0FeXsEaUA6U90sEoVks0Z
wNj96SA8BL+a1OoEUUfpMhiHyLuQSftxisJxTh+2QclzDviDyaTrkANjdYY7p2cq
/HMdOY7LJlHaqtXmZxXjjtw5Uc2QG8UY8aziU3IE9nTjSwCXeJnuyvoizl9/I1S5
jU5SA/9WwIps4SC84ielIXiGWEqq6i6/sk4I9q1YemZF2XVVKnmI1F4iCMtNKsR4
MGSa1gA8s4iQbsKNWPgp7M3a51JCVCu6l/8zTpA+uUGapw4tWCp4o0dpIvDPBEa9
b/aF/ygcR8mh5hgUfpF9IpXdknOsbKCvM9lSSfRciETykZc4wrRCVGhlIEFuZHJv
aWQgT3BlbiBTb3VyY2UgUHJvamVjdCA8aW5pdGlhbC1jb250cmlidXRpb25AYW5k
cm9pZC5jb20+iGAEExECACAFAknnWD4CGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIX
gAAKCRDorT+BmrEOeNr+AJ42Xy6tEW7r3KzrJxnRX8mij9z8tgCdFfQYiHpYngkI
2t09Ed+9Bm4gmEO5Ag0ESedYRBAIAKVW1JcMBWvV/0Bo9WiByJ9WJ5swMN36/vAl
QN4mWRhfzDOk/Rosdb0csAO/l8Kz0gKQPOfObtyYjvI8JMC3rmi+LIvSUT9806Up
hisyEmmHv6U8gUb/xHLIanXGxwhYzjgeuAXVCsv+EvoPIHbY4L/KvP5x+oCJIDbk
C2b1TvVk9PryzmE4BPIQL/NtgR1oLWm/uWR9zRUFtBnE411aMAN3qnAHBBMZzKMX
LWBGWE0znfRrnczI5p49i2YZJAjyX1P2WzmScK49CV82dzLo71MnrF6fj+Udtb5 +
OgTg7Cow+8PRaTkJEW5Y2JIZpnRUq0CYxAmHYX79EMKHDSThf/8AAwUIAJPWsB/M
pK+KMs/s3r6nJrnYLTfdZhtmQXimpoDMJg1zxmL8UfNUKiQZ6esoAWtDgpqt7Y7s
KZ8laHRARonte394hidZzM5nb6hQvpPjt2OlPRsyqVxw4c/KsjADtAuKW9/d8phb
N8bTyOJo856qg4oOEzKG9eeF7oaZTYBy33BTL0408sEBxiMior6b8LrZrAhkqDjA
vUXRwm/fFKgpsOysxC6xi553CxBUCH2omNV6Ka1LNMwzSp9ILz8jEGqmUtkBszwo
G1S8fXgE0Lq3cdDM/GJ4QXP/p6LiwNF99faDMTV3+2SAOGvytOX6KjKVzKOSsfJQ
hN0DlsIw8hqJc0WISQQYEQIACQUCSedYRAIbDAAKCRDorT+BmrEOeCUOAJ9qmR0l
EXzeoxcdoafxqf6gZlJZlACgkWF7wi2YLW3Oa+jv2QSTlrx4KLM =
=Wi5D
-----TERMINE EL BLOQUE DE CLAVE PÚBLICA PGP-----

Después de importar las llaves, usted puede verificar cualquier etiqueta con

$ git tag -v tagname

7. Construcción del código
El código de Androide contiene un error de programación que no ha sido solucionado hasta la fecha de este artículo.
Tan antes de que usted comience a compilar el código, usted necesitará unas modificaciones, o construir fallará (después consumir un poco de su tiempo y paciencia). El error es:

external/qemu/sockets.c: In function 'sock_address_init_resolve':
external/qemu/sockets.c:637: error: 'EAI_NODATA' undeclared (first use
in this function)
external/qemu/sockets.c:637: error: (Each undeclared identifier is
reported only once
external/qemu/sockets.c:637: error: for each function it appears in.)
make: *** [out/host/linux-x86/obj/EXECUTABLES/emulator_intermediates/
sockets.o] Error 1

Fijar esto, antes de compilar el código de androide, ~ abierto/mydroid/external/qemu/sockets.c y añadir

#define __USE_GNU

justo antes el #include <netdb.h>

Ahora usted puede construir los archivos. Dirigido hacen desde dentro su directorio de trabajo:

$ cd ~/mydroid
$ make

En mi máquina virtual que corre ubuntu, el proceso de construcción tomó varias horas. El ordenador personal de anfitrión es un 2.6GHz P4.

Compile test.c con gcc para la plataforma de Androide
El androide usa una versión simplificada de libc, llamado biónico. Tenemos que compilar el compilador preconstruido del Androide de utilización arm-eabi-gcc, y usar la biblioteca biónica por el teléfono.
La manera fácil de hacer esto debe usar el agcc perl envoltura. Usted puede descargar el archivo original aquí, y modificar

my $TOOLCHAIN = "$DROID/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1";

a

my $TOOLCHAIN = "$DROID/prebuilt/linux-x86/toolchain/arm-eabi-4.3.1";

O descargue esta versión actualizada directamente.

Copie agcc a su directorio de inicio, y chmod esto:

chmod +x agcc

entonces ponga el CAMINO a libs biónico y la posición agcc:

$ PATH=$PATH:~/mydroid/prebuilt/linux-x86/toolchain/arm-eabi-4.3.1/bin:~/:~/mydroid/

Ahora usted puede compilar el archivo test.c:

agcc test.c -o test

Tome el binario de prueba que resulta y cárguelo a su utilización de androide:

adb push test /data/local/test

Entonces carrera esto:

adb shell
chmod 775 test
./test

Ver las fotos para más detalles:

La siguiente cosa de hacer es tratar de controlar la funcionalidad bluetooth usando el código de C natal y el androide toolchain.

Más en C natal apps para Androide aquí.

La parte de este artículo contiene la información presentada por Google en http://source.android.com/download

Recuerdos,
Radu Motisan

Por Radu Motisan

43 Respuestas “¡Al androide C desarrollo natal – toman el control total!

  1. 1
    Anders:

    Grande. Gracias por las instrucciones.
    ¿Cualquier idea cómo el principio su programa C cuando las botas de sistema, o después de que esto inicializa?

  2. 2
    Ash09:

    Hola
    cuando dirijo lo siguiente en mi Ubuntu 9.04:
    Los $ sudo apropiado - se ponen instalan lib32readline5-dev
    Consigo el error siguiente:
    E: No podía encontrar el paquete lib32readline5-dev
    ¿cómo hizo la resolución de u esto?

  3. 3
    Radu Motisan:

    Esto sólo es para usuarios intrépidos ubuntu.

    Usted no lo necesitará en 9.04 escritorio.

    He modificado el correo para reflejar esto también.

  4. 4
    Dorian:

    Hola,

    Gracias por las instrucciones.
    Sólo poca modificación, usted tiene que cambiar agcc, ya que el toolchain no es libgcc.a correcto no está más en la carpeta de intertrabajo, entonces 2 líneas tienen que ser cambiadas también.

    "$TOOLCHAIN/lib/gcc/arm-eabi/4,3,1/libgcc.a", en línea 117 y 132
    Gracias.

  5. 5
    Stephan:

    Grande. trabajos como un encanto.
    @Dorian: gracias por la corrección.

  6. 6
    Anupam:

    Hola,
    Tengo el ambiente para construir un código de C para el androide 1.0 en la máquina ubuntu. Ahora he descargado el Androide 1.5 SDK para linux y quiero compilar el mismo código de C para el Androide 1.5. ¿Qué cambia tengo que hacer? What changes I have to make ?

  7. 7
    marius:

    Hola,
    Uso el androide X86 (tomado el 10 de octubre ‘09).
    Me pongo: adb: no encontrado not found

    Entonces. He montado system.img resultado, copiado explícito el *hello en
    /system/bin y datos/, entonces tengo construyen el iso y lo inicializan.
    Puedo ver mi hola, pero.

    #. / hola
    ¡hola: no encontrado

    #hello
    ¡hola: no encontrado

    #adb
    adb no encontrado

    La cáscara es muda o ….

  8. 8
    Radu Motisan:

    hola marius,
    que salida hacen usted se pone de ls-l
    ?
    también, lo que hace usted quiere decir “entonces tengo construyen el iso y lo inicializan.

  9. 9
    Construir el ambiente para desarrollar Androide para freerunner | allenc.tw:

    [...] 關資料: Link1、Link2、Link3 [...]

  10. 10
    Perumal:

    Hice exactamente el mismo como mencionado aquí, pero sigo consiguiendo el error siguiente:

    “/mydroid/out/target/product/generic/obj/lib/crtbegin_dynamic.o: En función `_start’:
    bionic/libc/arch-arm/bionic/crtbegin_dynamic. S: (. text+0×14): referencia indeterminada a `principal'(.text+0×14): undefined reference to `main’
    collect2: el ld devolvió 1 estado de salida”

    ¿Cualquier idea cómo resolverlo?

    Gracias de antemano.

  11. 11
    Radu Motisan:

    Asegúrese que usted ha puesto las carpetas siguientes en el camino:

    $DROID/prebuilt/linux-x86/toolchain/arm-eabi-4,2,1

    $DROID/prebuilt/linux-x86/toolchain/arm-eabi-4,3,1

  12. 12
    Perumal:

    Las ambas carpetas están en el camino pero todavía consigo el mismo error. Esto trabajaba bien pocos meses atrás, pero ahora cuando intenté otra vez consigo el susodicho error.

  13. 13
    Tayefeh:

    ¡Oye, esto es realmente grande! Sólo comprobado esto y esto trabajaron … ahora puedo virar todos mis programas C antiguos a babor al androide lol

  14. 14
    Radu Motisan:

    ¿Oye allí Tayefeh, gracioso para ver esto no es esto?
    La verdad es usted puede hacer apps muy potente dolorido utilización del JNI.
    He puesto en práctica bluetooth completo l2cap interfaz para Java usándolo. Fijará más pronto.

  15. 15
    mbt:

    ¡Me gusta la idea, chula!

  16. 16
    prado:

    ¡Explicación muy agradable! usted ahorró mi tiempo. ¡Todos en una solución de lugar! Gracias! All in one place solution! Thanks!

  17. 17
    Radu Motisan:

    Me alegro de que le gusta esto. Asegúrese que usted lee sobre JNI también: esto proporciona algunas opciones más. it provides some more options.

  18. 18
    prado:

    Uno más cosa – trato de dirigir una muestra ‘hola’ programa mundial usando un archivo.cpp en vez del archivo.c. El compilador se queja de no encontrar iostream.h. ¿Podría usted decirme cómo usar su escritura para llamar un c ++ archivo? Could you tell me how to use your script to call a c++ file?

  19. 19
    a:

    Gracias por llevar tiempo para proporcionar esta información;-) es el más provechoso

  20. 20
    Radu Motisan:

    Usted es bienvenido, a.

  21. 21
    Kaushik:

    ¿Puede usted escribir la misma escritura agcc para el sistema basado mips?

  22. 22
    Radu Motisan:

    ¿Puedo preguntar, qué hardware de androide MIPS tiene usted?

  23. 23
    Kaushik:

    Tengo consejo de Malta MIPS con MIPSr2

  24. 24
    Kaushik:

    Ya tengo el androide que corre en ello, pero mi 3er software del partido que es generalmente usado en el ambiente glic no trabajará bajo el androide basado biónico. Entonces yo me preguntaba puede nosotros hacer tal envoltura para sistemas basados mips.

    -Kaushik

  25. 25
    sabin:

    Puede, el t instalar paquetes adicionales del androide en ubuntu 10.4

  26. 26
    Tanis:

    ¡Hola Radu! Guía agradable, pero tengo un problema con el compilador agcc:

    ~ $ agcc helloword.c-o helloword
    arm-eabi-gcc:/home/tanisdlj/mydroid/prebuilt/linux-x86/toolchain/arm-eabi-4.3.1/lib/gcc/arm-eabi/4.2.1/interwork/libgcc.a: Ningún tal archivo o carpeta No such file or directory

    Esto es mi CAMINO:

    los tanisdlj@tanisdlj-andev:~ $ repiten el $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/tanisdlj/bin/:/home/tanisdlj/mydroid/prebuilt/li nux-x86/toolchain/arm-eabi-4.3.1/bin:/home/tanisdlj/:/home/tanisdlj/mydroid/

    Sigo a su guía paso a paso, pero tengo este problema. ¿Alguna suposición?>. < >.<

  27. 27
    Suhas:

    Hola Radu

    Seguí todos los pasos y en el paso final
    agcc hello.c-o hola consigo este error

    /localhome/user/bin/mipsandroid/prebuilt/linux-x86/toolchain/arm-eabi-4.3.1/bin/../lib/gcc/arm-eabi/4.3.1/../../../../arm-eabi/bin/ld:/localhome/user/bin/mipsandroid/out/target/product/generic/obj/lib/crtbegin_dynamic.o: Traslados en ELFO genérico (EM: 8) Relocations in generic ELF (EM: 8)
    /localhome/user/bin/mipsandroid/prebuilt/linux-x86/toolchain/arm-eabi-4.3.1/bin/../lib/gcc/arm-eabi/4.3.1/../../../../arm-eabi/bin/ld:/localhome/user/bin/mipsandroid/out/target/product/generic/obj/lib/crtbegin_dynamic.o: Traslados en ELFO genérico (EM: 8) Relocations in generic ELF (EM: 8)
    /localhome/user/bin/mipsandroid/out/target/product/generic/obj/lib/crtbegin_dynamic.o: no podía leer símbolos: Archivo en formato incorrecto
    collect2: el ld devolvió 1 estado de salida

    He puesto el CAMINO demasiado correctamente. Amablemente por favor ayúdeme.

  28. 28
    Suhas:

    /localhome/user/bin/mipsandroid/prebuilt/linux-x86/toolchain/arm-eabi-4.3.1/bin/../lib/gcc/arm-eabi/4.3.1/../../../../arm-eabi/bin/ld:/localhome/user/bin/mipsandroid/out/target/product/generic/obj/lib/crtbegin_dynamic.o: Traslados en ELFO genérico (EM: 8) Relocations in generic ELF (EM: 8 )
    /localhome/user/bin/mipsandroid/prebuilt/linux-x86/toolchain/arm-eabi-4.3.1/bin/../lib/gcc/arm-eabi/4.3.1/../../../../arm-eabi/bin/ld:/localhome/user/bin/mipsandroid/out/target/product/generic/obj/lib/crtbegin_dynamic.o: Traslados en ELFO genérico (EM: 8) Relocations in generic ELF (EM: 8 )
    /localhome/user/bin/mipsandroid/out/target/product/generic/obj/lib/crtbegin_dynamic.o: no podía leer símbolos: Archivo en formato incorrecto
    collect2: el ld devolvió 1 estado de salida

  29. 29
    mavci:

    sabin
    Instalé en ubuntu 10.04 y ahora puedo compilar archivos c para el anillo de espuma de androide 1.6
    si usted quiere puedo explicar

  30. 30
    mavci:

    ¿Compilé un test.c para y corrí en la cáscara de adb, pero cómo correr por mi teléfono de androide? (DSTL1)

  31. 31
    Radu Motisan:

    hola, por favor haga, creo que esto ayudará a la comunidad.

  32. 32
    Radu Motisan:

    mavci, usted puede usar la solicitud terminal del androide.

  33. 33
    mavci:

    ¡gracias Radu!
    Escribiré todo explainations mañana.

  34. 34
    Radu Motisan:

    Okey, entonces puedo añadirlos a este correo, entonces los otros pueden usarlo también.

  35. 35
    quincy:

    esto es así la droga. ¡Puedo compilar todas las clases de programas de consola ahora!

    ¡Ciudadano, usted se mece!

  36. 36
    quincy:

    @Tanis: usted revuelto sus versiones EABI en su CAMINO; hay referencias a 4.2.1 y 4.3.1 there are references to 4.2.1 and 4.3.1

  37. 37
    Radu Motisan:

    alegre le gusta esto, Quincy.

  38. 38
    Chris:

    No puede parecer conseguir que el gpg - sección de importación trabaje. ¿Cómo exactamente pega usted la llave en?

  39. 39
    qds:

    Este seminario es chulo, pero tengo problemas cuando trato de compilar estático

    cuando añado - directiva estática consigo el error: “no puede encontrar-lc” “collect2: el ld devolvió 1 estado de salida” ld returned 1 exit status”

    ¿sabe usted cómo solucionar este problema? Gracias.

    respetos

  40. 40
    Anup:

    Gcc 4.3 se requiere para construir el androide. 4.4 tiene estricto tiene reglas más estrictas entonces esto va por fprintf declaraion errores..

    Fijar,

    Los $ sudo apropiado - se ponen instalan gcc-4.3 g ++-4.3
    $ sudo rm/usr/bin gcc
    $ sudo rm/usr/bin g ++
    $ sudo ln-s gcc-4.3 gcc
    $ sudo ln-s g ++-4.3 g ++

  41. 41
    Radu Motisan:

    ¡Hola Anup, Gracias por su contribución!

  42. 42
    Teléfono de androide:

    No soy en absoluto una persona técnica, tan cuando esto viene al entendimiento del código, esto se siente ajeno para mí. ¿Sin embargo, de qué he leído, usted ha encontrado una manera de incluir la funcionalidad de Bluetooth con C ++? Esto es realmente amable del chulo en mi opinión. Si usted no tiene bluetooth, usted lo hace usted mismo. That’s actually kind of cool in my opinion. If you don’t have bluetooth, you make it yourself.

  43. 43
    el engaño de androide explota para la raíz:

    ¡[...] el Androide C desarrollo natal – toma el control total! [...]

Deje una Respuesta

Por favor copie la cuerda wwFmlV al campo abajo:

Opciones de blog

Traductor

English flagFrench flagGerman flagItalian flagPortuguese flagRussian flagSpanish flag
By N2H

Categorías

Archivos

Etiquetas

Enlaces patrocinados

¡Suscríbase!

Consiga a más seguidores

Nuestros Patrocinadores