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.
![]() |
|
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













Le 24 mai 2009 à 18h48
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 ?
Le 8 juin 2009 à 10h59
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 ?
Le 8 juin 2009 à 11h01
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.
Le 11 juin 2009 à 10h28
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
Le 17 juin 2009 à 8h48
Grand. travaux comme un charme.
@Dorian : merci de la correction.
Le 2 septembre 2009 à 10h15
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 ?
Le 15 octobre 2009 à 23h58
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.
Le 16 octobre 2009 à 20h50
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.”
Le 27 octobre 2009 à 2h24
[...] 關資料 : Link1、Link2、Link3 [...]
Le 14 décembre 2009 à 10h38
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.
Le 14 décembre 2009 à 23h51
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
Le 15 décembre 2009 à 5h34
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.
Le 19 février 2010 à 21h12
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
Le 20 février 2010 à 1h20
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.
Le 16 mars 2010 à 9h49
J'aime l'idée, fraîche!
Le 30 mars 2010 à 0h38
Explication très agréable! vous avez économisé mon temps. Tous dans une solution d'endroit! Merci! All in one place solution! Thanks!
Le 30 mars 2010 à 11h53
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.
Le 31 mars 2010 à 17h36
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?
Le 20 avril 2010 à 14h28
Merci de prendre du temps pour fournir ces renseignements
C'est le plus utile
Le 20 avril 2010 à 15h10
De rien, a.
Le 21 avril 2010 à 22h52
Pouvez-vous écrire que le même script agcc pour mips a basé le système ?
Le 21 avril 2010 à 22h54
Peux-je demander, quel matériel d'androïde MIPS avez-vous ?
Le 21 avril 2010 à 22h56
J'ai la planche Maltaise MIPS avec MIPSr2
Le 21 avril 2010 à 23h14
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
Le mai 2ème, 2010 à 15h12
Peut, t installer des paquets supplémentaires d'androïde dans ubuntu 10.4
Le 17 mai 2010 à 23h16
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 ?>. < >.<
Le 19 mai 2010 à 11h19
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 :
Relocations in generic ELF (EM: 
Relocations in generic ELF (EM: 
/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 :
/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.
Le 19 mai 2010 à 11h20
/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
Le 20 mai 2010 à 14h34
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
Le 21 mai 2010 à 0h49
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)
Le 21 mai 2010 à 23h03
bonjour, faites s'il vous plaît, je crois que cela aidera la communauté.
Le 21 mai 2010 à 23h04
mavci, vous pouvez utiliser l'application terminale pour l'androïde.
Le 21 mai 2010 à 23h30
merci Radu!
J'écrirai tout explainations demain.
Le 23 mai 2010 à 14h36
Ok, alors je peux les ajouter à ce poste, donc d'autres peuvent l'utiliser aussi.
Le 26 mai 2010 à 23h17
c'est ainsi le dope. Je peux compiler toutes les sortes de programmes de console maintenant!
Le type, vous vous balancez!
Le 26 mai 2010 à 23h19
@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
Le 28 mai 2010 à 8h47
content vous l'aimez, Quincy.
Le 8 juin 2010 à 22h43
Ne peut pas sembler finir par le gpg - la section d'importation travailler. Comment exactement collez-vous la clé dans ?
Le 15 juin 2010 à 14h19
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
Le 1 juillet 2010 à 23h50
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 ++
Le 2 juillet 2010 à 10h28
Bonjour Anup, merci pour votre contribution!
Le 7 juillet 2010 à 21h35
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.
Le 28 juillet 2010 à 22h51
[...] l'Androïde C le développement natal – prend le contrôle total! [...]