PocketMagic

PocketMagic

Où la Technologie rencontre la magie

PocketMagic RSS Nourriture
 

L'Androïde C le développement natal – prend le contrôle total!

Par Radu Motisan Posté le 12 mai 2009

Un projet récent j'ai travaillé sur Bluetooth exigé programmant sur l'Androïde.
En ayant un regard rapide sur le 1.5 dernier Androïde SDK, je pourrais voir que le soutien de bluetooth manquait. La recherche dernière a montré que Google a exclu de façon expressive Bluetooth APIs blâmant le manque de temps.

D'autre part, je ne suis pas un grand fan de Java, pour dire le moindre. Je trouve Java inamicale et je n'aime pas le regard et le sens de Java apps. Désolé, je préfère C/C ++ comme il fournit le meilleur contrôle et la flexibilité. Donc cela est temps de commencer à faire C/C ++ les applications natales pour l'Androïde 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.

Comment dirigé un programme C sur l'Androïde Google ?
La première chose que je montrerai ici, doit compiler un programme C simple pour l'Androïde.


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

Sauvez ce programme comme test.c. Dans les pas suivants nous compilerons cet échantillon pour l'Androïde Google en utilisant gcc.

Les outils

1. Téléchargez Linux ubuntu. J'utilise actuellement l'édition 9.04 de Bureau dans une machine virtuelle.
Attention : Vous aurez besoin d'installer Ubuntu sur une machine avec le Bélier d'au moins 1.5 gigaoctets, 10 gigaoctets ext2 la partition et la partition d'Échange de 2 gigaoctets ou vous ne serez pas capables d'utiliser les informations de cette classe de travaux dirigés (moins alors les exigences minimales auront pour résultat l'impossibilité de compiler le Code d'Androïde et nous en avons besoin pour les bibliothèques).

2. Dès qu'Ubuntu est installé, téléchargez le Code source d'Androïde. Sur votre Linux la boîte installent des paquets supplémentaires :
$ 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

Celui-ci est seulement pour les utilisateurs Intrépides Ubuntu :

$ sudo apt-get install lib32readline5-dev

3. Installez Repo
Créez un ~ / mettent à la poubelle l'annuaire dans votre répertoire personnel et la vérification pour être sûr que cet annuaire de boîte est dans votre sentier :

$ cd ~
$ mkdir bin
$ echo $PATH

Pour l'ajouter au Sentier, vous pouvez utiliser :

$ PATH=$PATH:~/bin/

Téléchargez le script repo et assurez-vous que c'est exécutable :

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

4. Le fait d'initialiser un client Repo
Créez un annuaire vide pour tenir vos dossiers de travail :

$ mkdir mydroid
$ cd mydroid

Repo dirigé init pour renverser la dernière version de Repo avec tous ses pétrins d'insecte les plus récents. Vous devez spécifier un URL pour le manifeste :

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

Quand provoqué, configurez Repo avec votre nom réel et adresse de courrier électronique. Si vous projetez de soumettre le code, utilisez une adresse de courrier électronique qui est associée à un compte de Google.
Une initialisation réussie mettra fin avec un message à tel que

repo initialized in /mydroid

Votre annuaire de client devrait contenir maintenant un annuaire.repo où les dossiers tels que le manifeste seront gardés.

5. Le fait de recevoir les dossiers
Pour baisser des dossiers à votre annuaire de travail des dépôts comme spécifié dans le manifeste implicite, courir

$ repo sync

Pour plus de la synchronisation de repo et d'autres commandes de Repo, voir l'Utilisation Repo et Conard.
Les dossiers source d'Androïde seront localisés dans votre annuaire de travail sous leurs noms du projet.

6. Le fait de vérifier des Étiquettes de Conard
Chargez la clé publique suivante dans votre base de données clée GnuPG. La clé est utilisée pour signer des étiquettes annotées qui représentent des libérations.

$ gpg --import

collez alors la clé (s) ci-dessous et le Contrôle-D de presse pour mettre fin à la contribution et traiter les clés.

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/TZmPewS 4m782ndtw7
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
-----METTEZ FIN AU BLOC CLÉ PUBLIC PGP-----

Après avoir importé les clés, vous pouvez vérifier n'importe quelle étiquette avec

$ git tag -v tagname

7. Construction du code
Le code d'Androïde contient un insecte qui n'a pas été résolu jusqu'à la date de cet article.
Ainsi avant que vous commencez à compiler le code, vous aurez besoin de quelques modifications, ou le fait de construire échouera (après avoir consommé un peu de votre temps et patience). L'erreur est :

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

Le fixer, avant de compiler le code d'androïde, ~ ouvert/mydroid/external/qemu/sockets.c et ajouter

#define __USE_GNU

juste avant le #include <netdb.h>

Maintenant vous pouvez construire les dossiers. Dirigé font de l'intérieur votre annuaire de travail :

$ cd ~/mydroid
$ make

Sur ma machine virtuelle courant ubuntu, le processus construire a pris plusieurs heures. L'ordinateur d'hôte est un 2.6GHz P4.

Compilez test.c avec gcc pour la plate-forme d'Androïde
L'androïde utilise une version simplifiée de libc, appelé bionique. Nous avons besoin de compiler le trans-compilateur préconstruit d'Androïde d'utilisation arm-eabi-gcc et utiliser la bibliothèque bionique au téléphone.
Le moyen facile pour faire cela doit utiliser l'agcc perl l'emballage. Vous pouvez télécharger le dossier original ici et modifier

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

à

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

Ou téléchargez cette version actualisée directement.

Copiez agcc à votre répertoire personnel et chmod cela :

chmod +x agcc

montrez alors le SENTIER à libs bionique et l'endroit agcc :

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

Maintenant vous pouvez compiler le dossier test.c :

agcc test.c -o test

Prenez l'épreuve résultante binaire et téléversez-la à votre utilisation d'androïde :

adb push test /data/local/test

Alors course cela :

adb shell
chmod 775 test
./test

Voir les photos pour plus de détails :

La chose suivante à faire est d'essayer de contrôler la fonctionnalité bluetooth en utilisant le code d'indigène C et l'androïde toolchain.

Plus sur l'indigène C apps pour l'Androïde ici.

La partie de cet article contient des renseignements présentés par Google sur http://source.android.com/download

Salutations distinguées,
Radu Motisan

Par Radu Motisan

43 Réponses à "l'androïde C le développement natal – prennent le contrôle total!

  1. 1
    Anders :

    Grand. Merci pour les instructions.
    N'importe quelle idée comment le début votre programme C quand le système amorce, ou après qu'il amorce ?

  2. 2
    Ash09 :

    Salut
    quand je dirige le fait de suivre mon Ubuntu 9.04 :
    Les $ sudo apte - arrivent installent lib32readline5-dev
    Je reçois l'erreur suivante :
    E: Ne pouvait pas trouver le paquet lib32readline5-dev
    comment a fait la détermination d'u cela ?

  3. 3
    Radu Motisan :

    C'est seulement pour les utilisateurs intrépides ubuntu.

    Vous n'en aurez pas besoin dans 9.04 bureau.

    J'ai modifié le poste pour le refléter aussi.

  4. 4
    Dorien :

    Salut,

    Merci pour les instructions.
    Juste un peu de modification, vous avez besoin de changer agcc, puisque le toolchain n'est pas libgcc.a correct n'est plus dans la chemise d'intertravail, donc 2 lignes ont besoin d'être changées aussi.

    "le $TOOLCHAIN/lib/gcc/arm-eabi/4,3,1/libgcc.a", sur la ligne 117 et 132
    Merci

  5. 5
    Stephan :

    Grand. travaux comme un charme.
    @Dorian : merci de la correction.

  6. 6
    Anupam :

    Salut,
    J'ai l'environnement pour construire un code de C pour l'androïde 1.0 dans la machine ubuntu. Maintenant j'ai téléchargé l'Androïde 1.5 SDK pour Linux et veux compiler le même code de C pour l'Androïde 1.5. Ce qui change je dois faire ? What changes I have to make ?

  7. 7
    marius :

    Salut,
    J'utilise l'androïde X86 (pris le 10 octobre ‘09).
    J'arrive : adb : non trouvé not found

    Alors. Je suis monté system.img résulté, copié explicite le *hello dans
    /system/bin et les données/, alors j'ai construisent l'iso et l'amorcent.
    Je peux voir mon bonjour, mais.

    #./hello
    bonjours: non trouvé

    #hello
    bonjours: non trouvé

    #adb
    adb non trouvé

    La coquille est muette ou.

  8. 8
    Radu Motisan :

    salut marius,
    quelle production font vous arrivez de ls-l
    ?
    aussi, ce qui fait vous voulez dire par “alors j'ai construisent l'iso et l'amorcent.

  9. 9
    Construire l'environnement pour développer l'Androïde pour freerunner | allenc.tw :

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

  10. 10
    Perumal :

    J'ai fait exactement le même comme mentionné ici, mais continue de recevoir l'erreur suivante :

    “/mydroid/out/target/product/generic/obj/lib/crtbegin_dynamic.o : Dans la fonction `_start’ :
    bionic/libc/arch-arm/bionic/crtbegin_dynamic. S : (. text+0×14) : référence non définie à `principal'(.text+0×14): undefined reference to `main’
    collect2 : ld a rendu 1 statut de sortie”

    Une idée comment le résoudre ?

    Merci à l'avance.

  11. 11
    Radu Motisan :

    Assurez-vous que vous avez mis les chemises suivantes dans le sentier :

    $DROID/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1

    $DROID/prebuilt/linux-x86/toolchain/arm-eabi-4.3.1

  12. 12
    Perumal :

    Les deux chemises sont dans le sentier mais je reçois encore la même erreur. Il travaillait bien quelques mois en arrière, mais maintenant quand j'ai essayé de nouveau je reçois la susdite erreur.

  13. 13
    Tayefeh :

    Hé, c'est vraiment grand! Juste vérifié il et cela ont travaillé … maintenant je peux transporter tous mes programmes C anciens à l'androïde lol

  14. 14
    Radu Motisan :

    Hé là Tayefeh, drôle pour le voir n'est-ce pas ?
    La vérité est vous peut rendre apps très puissant douloureux l'utilisation du JNI.
    J'ai exécuté bluetooth complet l2cap l'interface pour Java en l'utilisant. Voyagera par la poste plus bientôt.

  15. 15
    mbt :

    J'aime l'idée, fraîche!

  16. 16
    pré :

    Explication très agréable! vous avez économisé mon temps. Tous dans une solution d'endroit! Merci! All in one place solution! Thanks!

  17. 17
    Radu Motisan :

    Je suis heureux que vous l'aimiez. Assurez-vous que vous lisez de JNI aussi : il fournit un peu plus d'options. it provides some more options.

  18. 18
    pré :

    Encore une chose – j'essaie de diriger un échantillon ‘bonjour le ' programme mondial en utilisant un dossier.cpp au lieu du dossier.c. Le compilateur se plaint de ne pas trouver iostream.h. Pourriez-vous me dire comment utiliser votre script pour appeler un c ++ le dossier ? Could you tell me how to use your script to call a c++ file?

  19. 19
    a:

    Merci de prendre du temps pour fournir ces renseignements;-) C'est le plus utile

  20. 20
    Radu Motisan :

    De rien, a.

  21. 21
    Kaushik :

    Pouvez-vous écrire que le même script agcc pour mips a basé le système ?

  22. 22
    Radu Motisan :

    Peux-je demander, quel matériel d'androïde MIPS avez-vous ?

  23. 23
    Kaushik :

    J'ai la planche Maltaise MIPS avec MIPSr2

  24. 24
    Kaushik :

    J'ai déjà l'androïde y courant, mais mon 3ème logiciel du parti qui est généralement utilisé dans l'environnement glic ne travaillera pas sous l'androïde fondé bionique. Donc je me demandais peut nous faire un tel emballage pour les systèmes basés de mips.

    -Kaushik

  25. 25
    sabin :

    Peut, t installer des paquets supplémentaires d'androïde dans ubuntu 10.4

  26. 26
    Tanis :

    Salut Radu! Le guide agréable, mais j'ai un problème avec le compilateur agcc :

    ~ le $ 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 : Aucun tel dossier ou annuaire No such file or directory

    C'est mon SENTIER :

    tanisdlj@tanisdlj-andev les $ de :~ répercutent le $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/ games:/home/tanisdlj/bin/:/home/tanisdlj/mydroid/prebuilt/linux-x86/toolchain/arm-eabi-4.3.1/bin:/home/tanisdlj/:/home/tanisdlj/mydroid/

    Je suis votre guide point par point, mais j'ai ce problème. Une suggestion ?>. < >.<

  27. 27
    Suhas :

    Salut Radu

    J'ai suivi tous les pas et dans le pas final
    agcc hello.c-o bonjour je reçois cette erreur

    /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 : les Délocalisations dans l'ELFE générique (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 : les Délocalisations dans l'ELFE générique (EM : 8) Relocations in generic ELF (EM: 8)
    /localhome/user/bin/mipsandroid/out/target/product/generic/obj/lib/crtbegin_dynamic.o : ne pouvait pas lire des symboles : Dossier dans le format faux
    collect2 : ld a rendu 1 statut de sortie

    J'ai mis le SENTIER trop correctement. Aidez-moi gentiment s'il vous plaît.

  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 : les Délocalisations dans l'ELFE générique (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 : les Délocalisations dans l'ELFE générique (EM : 8) Relocations in generic ELF (EM: 8 )
    /localhome/user/bin/mipsandroid/out/target/product/generic/obj/lib/crtbegin_dynamic.o : ne pouvait pas lire des symboles : Dossier dans le format faux
    collect2 : ld a rendu 1 statut de sortie

  29. 29
    mavci :

    sabin
    J'ai installé dans ubuntu 10.04 et maintenant je peux compiler c demande l'androïde donut 1.6
    si vous voulez je peux expliquer

  30. 30
    mavci :

    J'ai compilé un test.c pour et ai couru sur la coquille d'adb, mais comment courir à mon téléphone d'androïde ? (DSTL1)

  31. 31
    Radu Motisan :

    bonjour, faites s'il vous plaît, je crois que cela aidera la communauté.

  32. 32
    Radu Motisan :

    mavci, vous pouvez utiliser l'application terminale pour l'androïde.

  33. 33
    mavci :

    merci Radu!
    J'écrirai tout explainations demain.

  34. 34
    Radu Motisan :

    Ok, alors je peux les ajouter à ce poste, donc d'autres peuvent l'utiliser aussi.

  35. 35
    quincy :

    c'est ainsi le dope. Je peux compiler toutes les sortes de programmes de console maintenant!

    Le type, vous vous balancez!

  36. 36
    quincy :

    @Tanis : vous mélangé en haut vos versions EABI dans votre SENTIER; il y a des références à 4.2.1 et 4.3.1 there are references to 4.2.1 and 4.3.1

  37. 37
    Radu Motisan :

    content vous l'aimez, Quincy.

  38. 38
    Chris :

    Ne peut pas sembler finir par le gpg - la section d'importation travailler. Comment exactement collez-vous la clé dans ?

  39. 39
    qds :

    Cette classe de travaux dirigés est fraîche, mais j'ai des problèmes quand j'essaie de compiler statique

    quand j'ajoute - la directive statique je reçois l'erreur : “ne peut pas trouver-lc” “collect2 : ld a rendu 1 statut de sortie” ld returned 1 exit status”

    savez-vous comment résoudre ce problème ? Merci

    égards

  40. 40
    Anup :

    Gcc 4.3 est exigé pour construire l'androïde. 4.4 a strict a des règles plus strictes donc il va par fprintf declaraion des erreurs..

    Fixer,

    Les $ sudo apte - arrivent installent gcc-4.3 g ++-4.3
    Le $ sudo rm/usr/bin gcc
    Le $ sudo rm/usr/bin g ++
    Le $ sudo ln-s gcc-4.3 gcc
    Le $ sudo ln-s g ++-4.3 g ++

  41. 41
    Radu Motisan :

    Bonjour Anup, merci pour votre contribution!

  42. 42
    Téléphone d'androïde :

    Je ne suis pas du tout une personne technique, ainsi quand il vient à la compréhension du code, cela se sent étranger à moi. Cependant, de ce que j'ai lu, vous avez trouvé une façon d'inclure la fonctionnalité de dent bleue avec C ++ ? C'est frais en fait presque à mon opinion. Si vous n'avez pas bluetooth, vous le faites vous-même. That’s actually kind of cool in my opinion. If you don’t have bluetooth, you make it yourself.

  43. 43
    la ruse d'androïde exploite pour la racine :

    [...] l'Androïde C le développement natal – prend le contrôle total! [...]

Quittez une Réponse

Copiez s'il vous plaît la ficelle KHYzYA au champ ci-dessous :

Options de blog

Traducteur

English flagFrench flagGerman flagItalian flagPortuguese flagRussian flagSpanish flag
By N2H

Catégories

Archives

Étiquettes

Liens parrainés

Souscrivez!

Recevez plus de disciples

Nos Sponsors