L'Androide C lo sviluppo nativo – prende il controllo pieno!
Da Radu Motisan Annunciato il 12 maggio 2009
Un progetto recente stavo lavorando Bluetooth richiesto programmando sull'Androide.
Avendo un'occhiata veloce sopra il 1.5 Androide ultimo SDK, potevo vedere che il sostegno di bluetooth era assente. La ricerca successiva fece notare che Google in modo espressivo escluse Bluetooth APIs dando la colpa a mancanza di tempo.
D'altra parte, non sono un ammiratore di Giava grande, per dire minore. Trovo la Giava mal disposta, e non mi piacciono l'occhiata e il tatto di Giava apps. Scusi, preferisco C/C ++ poiché provvede il controllo migliore e la flessibilità. Allora è ora di iniziare a fare C/C ++ le applicazioni native per l'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.
Come diretto un programma C su Androide Google?
La prima cosa che mostrerò qui, deve compilare un programma C semplice per l'Androide.
![]() |
|
Salvi questo programma come test.c. Nei vicini passi staremo compilando questo campione per l'Androide Google usando gcc.
Gli attrezzi
1. Scarichi ubuntu linux. Attualmente uso l'edizione Fatta col personal computer 9.04 in una macchina effettiva.
Attenzione: Lei avrà bisogno di installare Ubuntu su una macchina con Pistone di ALMENO 1.5 GIGABYTE, 10 GIGABYTE ext2 la divisione e la divisione di Scambio di 2 GIGABYTE o Lei non sarà capace di usare l'informazione di questo seminario universitario sotto la guida di un tutor (meno allora le esigenze minime avranno come conseguenza l'impossibilità di compilare il Codice d'Androide e abbiamo bisogno di questo per le biblioteche).
2. Appena Ubuntu è installato, scarichi il Codice sorgente d'Androide. Sul Suo linux la scatola installano pacchi supplementari:
$ 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
Questo è solo per utenti Intrepidi Ubuntu:
$ sudo apt-get install lib32readline5-dev
3. Installi Repo
Crei un ~ / l'elenco telefonico di bidone nella Sua cartella di partenza, e il conto per essere sicuro che quest'elenco telefonico di bidone è nel Suo sentiero:
$ cd ~
$ mkdir bin
$ echo $PATH
Per aggiungerlo al Sentiero, Lei può usare:
$ PATH=$PATH:~/bin/
Scarichi il copione repo e si assicuri che è eseguibile:
$ curl http://android.git.kernel.org/repo >~/bin/repo
$ chmod a+x ~/bin/repo
4. Inizializzare di un cliente Repo
Crei un elenco telefonico vuoto per tenere i Suoi file feriali:
$ mkdir mydroid
$ cd mydroid
Repo diretto init per fare cadere la versione ultima di Repo con tutti i suoi pasticci d'insetto più recenti. Lei deve specificare un URL per il manifesto:
$ repo init -u git://android.git.kernel.org/platform/manifest.git
$ repo init -u git://android.git.kernel.org/platform/manifest.git -b cupcake
Quando spinto, configuri Repo con il Suo nome vero e indirizzo di posta elettronica. Se Lei progetta di presentare il codice, usi l'indirizzo di una posta elettronica che è associato con un conto di Google.
Un'inizializzazione di successo terminerà con un messaggio come
repo initialized in /mydroid
Il Suo elenco telefonico di cliente deve adesso contenere un elenco telefonico.repo dove i file come il manifesto saranno tenuti.
5. Acquisizione dei file
Per tirare giù file al Suo elenco telefonico feriale dai depositi come specificato nel manifesto d'inadempienza, correre
$ repo sync
Per più su sincronia di repo e altri comandi di Repo, vedi utilizzando Repo e Idiota.
I file di sorgente d'Androide saranno situati nel Suo elenco telefonico feriale sotto i loro nomi di progetti.
6. Verificazione d'Etichette d'Idiota
Carichi la chiave pubblica seguente nella Sua base di dati chiave GnuPG. La chiave è usata per firmare etichette annotate che rappresentano rilasci.
$ gpg --import
allora incolli la chiave (i) sotto, e il Controllo-D di stampa per concludere l'impiego e trattare le chiavi.
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
-----CONCLUDA IL BLOCCO CHIAVE PUBBLICO PGP-----
Dopo importazione delle chiavi, Lei può verificare qualsiasi etichetta con
$ git tag -v tagname
7. Edificio del codice
Il codice d'Androide contiene un insetto che non è stato risolto fino alla data di quest'articolo.
Così prima che Lei inizia a compilare il codice, Lei avrà bisogno di alcune modifiche, o il costruire fallirà (dopo consumo di un po' del Suo tempo e pazienza). L'errore è:
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
Fissare questo, prima di compilazione del codice d'androide, ~ aperto/mydroid/external/qemu/sockets.c e aggiungere
#define __USE_GNU
poco prima #include <netdb.h>
Adesso Lei può costruire i file. Diretto fanno dall'interno del Suo elenco telefonico feriale:
$ cd ~/mydroid
$ make
Sulla mia macchina effettiva funzionando ubuntu, il processo costruire prese parecchie ore. Il PC d'ospite è 2.6GHz P4.
Compili test.c con gcc per la piattaforma d'Androide
L'androide usa una versione semplificata di libc, chiamato bionico. Noi abbiamo bisogno di compilare il trasversale compilatore precostruito d'androide d'utilizzazione arm-eabi-gcc, e usare la biblioteca bionica al telefono.
La strada facile di fare questo deve usare l'agcc perl la carta. Lei può scaricare il file originale qui, e modificare
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 scarichi questa versione aggiornata direttamente.
Copi agcc alla Sua cartella di partenza, e chmod questo:
chmod +x agcc
allora metta il SENTIERO per libs bionico e la posizione agcc:
$ PATH=$PATH:~/mydroid/prebuilt/linux-x86/toolchain/arm-eabi-4.3.1/bin:~/:~/mydroid/
Adesso Lei può compilare il file test.c:
agcc test.c -o test
Prenda il programma in binario di prova risultante e lo scarichi alla Sua utilizzazione d'androide:
adb push test /data/local/test
Allora corsa questo:
adb shell
chmod 775 test
./test
Vedi i film per più dettagli:
![]() |
![]() |
![]() |
La vicina cosa da fare deve provare a controllare la funzionalità bluetooth usando il codice dell'abitante del luogo C e l'androide toolchain.
Più sull'abitante del luogo C apps per Androide qui.
La parte di quest'articolo contiene l'informazione presentata da Google su http://source.android.com/download
Migliori saluti,
Radu Motisan











Il 24 maggio 2009 alle 18:48
Grande. Grazie per le istruzioni.
Qualche idea come avviano il Suo programma C quando il sistema carica, o dopo che questo carica?
Il 8 giugno 2009 alle 10:59
Ciao
quando dirigo il seguire del mio Ubuntu 9.04:
$ i sudo appropriati - arrivano installano lib32readline5-dev
Sto ricevendo l'errore seguente:
E: Non poteva trovare il pacco lib32readline5-dev
come fece la risoluzione di u questo?
Il 8 giugno 2009 alle 11:01
Questo è solo per utenti intrepidi ubuntu.
Lei non gli avrà bisogno in 9.04 desktop.
Ho modificato il posto per riflettere questo pure.
Il 11 giugno 2009 alle 10:28
Ciao,
Grazie per le istruzioni.
Soltanto un po' di modifica, Lei ha bisogno di cambiare agcc, siccome il toolchain non è libgcc.a corretto non è più in cartella d'interlavoro, allora 2 linee hanno bisogno di esser cambiate anche.
"Lo $TOOLCHAIN/lib/gcc/arm-eabi/4,3,1/libgcc.a", su linea 117 e 132
Grazie
Il 17 giugno 2009 alle 8:48
Grande. lavori come un fascino.
@Dorian: grazie per la correzione.
Il 2 settembre 2009 alle 10:15
Ciao,
Ho l'ambiente per costruire un codice di C per androide 1.0 nella macchina ubuntu. Adesso ho scaricato l'Androide 1.5 SDK per linux e voglio compilare lo stesso codice di C per Androide 1.5. Che cambia devo fare? What changes I have to make ?
Il 15 ottobre 2009 alle 23:58
Ciao,
Sto usando l'androide X86 (preso il 10 ottobre ‘09).
Arrivo: adb: non trovato not found
Allora. Ho montato system.img avuto come conseguenza, copiato esplicito il *hello in
/system/bin e i dati/, allora ho costruiscono l'iso e lo caricano.
Posso vedere il mio ciao, ma.
#. / ciao
ciao: non trovato
#hello
ciao: non trovato
#adb
adb non trovato
La granata è muta o.
Il 16 ottobre 2009 alle 20:50
ciao marius,
quale produzione fanno Lei arriva da ls-l
?
anche, quello che fa Lei significa da “allora ho costruiscono l'iso e lo caricano.”
Il 27 ottobre 2009 alle 2:24
[...] 關資料: Link1、Link2、Link3 [...]
Il 14 dicembre 2009 alle 10:38
Feci esattamente lo stesso come menzionato qui, ma continuo a ricevere l'errore seguente:
“/mydroid/out/target/product/generic/obj/lib/crtbegin_dynamic.o: In funzione '_start':
bionic/libc/arch-arm/bionic/crtbegin_dynamic. S: (. text+0×14): riferimento indefinito a 'principale'(.text+0×14): undefined reference to `main’
collect2: il ld restituì 1 stato d'uscita”
Qualche idea come risolverlo?
Grazie in anticipo.
Il 14 dicembre 2009 alle 23:51
Si assicuri che Lei ha messo le cartelle seguenti nel sentiero:
$DROID/prebuilt/linux-x86/toolchain/arm-eabi-4,2,1
$DROID/prebuilt/linux-x86/toolchain/arm-eabi-4,3,1
Il 15 dicembre 2009 alle 5:34
Entrambe le cartelle sono nel sentiero ma sto ancora ricevendo lo stesso errore. Questo azionava bene pochi mesi indietro, ma adesso quando provai ancora una volta sto ricevendo il suddetto errore.
Il 19 febbraio 2010 alle 21:12
Ehi, questo è veramente grande! Soltanto verificato questo e questo azionarono … adesso posso portare tutto il mio C antico ad armacollo programms ad androide lol
Il 20 febbraio 2010 alla 1:20
Ehi là Tayefeh, divertente per vedere questo non è vero?
La verità è Lei può fare apps molto potente dolorante l'utilizzazione dello JNI.
Ho attuato bluetooth completo l2cap l'interfaccia per Giava usandolo. Annuncerà più presto.
Il 16 marzo 2010 alle 9:49
Mi piace l'idea, fresca!
Il 30 marzo 2010 alla 0:38
Spiegazione molto bella! Lei risparmiò il mio tempo. Tutti in una soluzione per posto! Grazie! All in one place solution! Thanks!
Il 30 marzo 2010 alle 11:53
Sono contento che Le piace questo. Si assicuri che Lei legge su JNI pure: questo provvede ancora alcune scelte. it provides some more options.
Il 31 marzo 2010 alle 17:36
Ancora una cosa – sto provando a dirigere un campione ‘ciao il ' programma mondiale usando un file.cpp invece di file.c. Il compilatore si lamenta di non trovare iostream.h. Poteva dirmi Lei come usare il Suo copione per chiamare un c ++ il file? Could you tell me how to use your script to call a c++ file?
Il 20 aprile 2010 alle 14:28
Grazie per volere il tempo per provvedere quest'informazione è
il più utile
Il 20 aprile 2010 alle 15:10
Lei è gradito, a.
Il 21 aprile 2010 alle 22:52
Può Lei scrivere che lo stesso copione agcc per mips basò il sistema?
Il 21 aprile 2010 alle 22:54
Posso chiedere, quale hardware d'androide MIPS ha Lei?
Il 21 aprile 2010 alle 22:56
Ho l'asse della Malta MIPS con MIPSr2
Il 21 aprile 2010 alle 23:14
Già ho l'androide funzionando su questo, ma il mio 3o software del partito che è generalmente usato in ambiente glic non lavorerà sotto androide basato bionico. Allora mi chiedevo può noi fare una tale carta per sistemi basati di mips.
-Kaushik
Il maggio 2o, 2010 alle 15:12
Può, il t installare pacchi supplementari d'androide in ubuntu 10.4
Il 17 maggio 2010 alle 23:16
Ciao Radu! La bella guida, ma ho un problema con il compilatore agcc:
~$ l'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: Nessun tal file o elenco telefonico No such file or directory
Questo è il mio SENTIERO:
tanisdlj@tanisdlj-andev gli $ di:~ fanno eco a $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/
Seguo la Sua guida poco a poco, ma ho questo problema. Qualche suggerimento?>. < >.<
Il 19 maggio 2010 alle 11:19
Ciao Radu
Seguii tutti i passi e nel passo finale
l'agcc hello.c-o ciao ricevo quest'errore
/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: le Riposizioni in ELFO generico (LORO:
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: le Riposizioni in ELFO generico (LORO:
/localhome/user/bin/mipsandroid/out/target/product/generic/obj/lib/crtbegin_dynamic.o: non poteva leggere simboli: File in formato sbagliato
collect2: il ld restituì 1 stato d'uscita
Ho messo il SENTIERO troppo correttamente. Con gentilezza per favore mi aiuti.
Il 19 maggio 2010 alle 11:20
/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: le Riposizioni in ELFO generico (LORO: 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: le Riposizioni in ELFO generico (LORO: 8) Relocations in generic ELF (EM: 8 )
/localhome/user/bin/mipsandroid/out/target/product/generic/obj/lib/crtbegin_dynamic.o: non poteva leggere simboli: File in formato sbagliato
collect2: il ld restituì 1 stato d'uscita
Il 20 maggio 2010 alle 14:34
sabin
Installai in ubuntu 10.04 e adesso posso compilare file c per androide donut 1.6
se Lei vuole posso spiegare
Il 21 maggio 2010 alla 0:49
Compilai un test.c per e sono corso su granata di adb, ma come funzionare al mio telefono d'androide? (DSTL1)
Il 21 maggio 2010 alle 23:03
ciao, per favore faccia, penso che questo aiuterà la comunità.
Il 21 maggio 2010 alle 23:04
il mavci, Lei può usare l'applicazione terminale per androide.
Il 21 maggio 2010 alle 23:30
grazie Radu!
Scriverò tutto l'explainations domani.
Il 23 maggio 2010 alle 14:36
Ok, allora posso aggiungerli a questo posto, allora gli altri possono usarlo anche.
Il 26 maggio 2010 alle 23:17
questo è così la droga. Posso compilare tutti i generi di programmi di console adesso!
Lo zerbinotto, Lei dondola!
Il 26 maggio 2010 alle 23:19
@Tanis: Lei misto sulle Sue versioni EABI nel Suo SENTIERO; ci sono riferimenti a 4.2.1 e 4.3.1 there are references to 4.2.1 and 4.3.1
Il 28 maggio 2010 alle 8:47
felice Le piace questo, Quincy.
Il 8 giugno 2010 alle 22:43
Non può sembrare di fare il gpg - la sezione d'importazione lavorare. Come esattamente incolla Lei la chiave in?
Il 15 giugno 2010 alle 14:19
Questo seminario universitario sotto la guida di un tutor è fresco, ma ho problemi quando provo a compilare statico
quando aggiungo - la direttiva statica ricevo l'errore: “non può trovare-lc” “collect2: il ld restituì 1 stato d'uscita” ld returned 1 exit status”
sa Lei come risolvere questo problema? Grazie
riguardi
Il 1 luglio 2010 alle 23:50
Gcc 4.3 è richiesto per costruire l'androide. 4.4 ha severo ha regole più severe allora questo è attraverso fprintf declaraion errori...
Fissare,
$ i sudo appropriati - arrivano installano gcc-4.3 g ++-4.3
$ il sudo rm/usr/bin gcc
$ il sudo rm/usr/bin g ++
$ il sudo ln-s gcc-4.3 gcc
$ il sudo ln-s g ++-4.3 g ++
Il 2 luglio 2010 alle 10:28
Ciao Anup, Grazie per il Suo contributo!
Il 7 luglio 2010 alle 21:35
Non sono affatto una persona tecnica, allora quando si tratta di comprensione di codice, questo si sente estraneo a me. Comunque, da che ho letto, Lei ha trovato una strada di includere la funzionalità di dente azzurra con C ++? Questo è veramente gentile di freschi secondo la mia opinione. Se Lei non ha bluetooth, Lei lo fa Lei stesso. That’s actually kind of cool in my opinion. If you don’t have bluetooth, you make it yourself.
Il 28 luglio 2010 alle 22:51
[...] l'Androide C lo sviluppo nativo – prende il controllo pieno! [...]