PocketMagic

PocketMagic

Dove la Tecnologia incontra la magia

PocketMagic RSS Pasto
 

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.


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

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

Da Radu Motisan

43 Risposte a “Androide C lo sviluppo nativo – prendono il controllo pieno!

  1. 1
    Anders:

    Grande. Grazie per le istruzioni.
    Qualche idea come avviano il Suo programma C quando il sistema carica, o dopo che questo carica?

  2. 2
    Ash09:

    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?

  3. 3
    Radu Motisan:

    Questo è solo per utenti intrepidi ubuntu.

    Lei non gli avrà bisogno in 9.04 desktop.

    Ho modificato il posto per riflettere questo pure.

  4. 4
    Dorico:

    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

  5. 5
    Stephan:

    Grande. lavori come un fascino.
    @Dorian: grazie per la correzione.

  6. 6
    Anupam:

    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 ?

  7. 7
    marius:

    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.

  8. 8
    Radu Motisan:

    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.

  9. 9
    Costruire l'ambiente per sviluppare l'Androide per freerunner | allenc.tw:

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

  10. 10
    Perumal:

    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.

  11. 11
    Radu Motisan:

    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

  12. 12
    Perumal:

    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.

  13. 13
    Tayefeh:

    Ehi, questo è veramente grande! Soltanto verificato questo e questo azionarono … adesso posso portare tutto il mio C antico ad armacollo programms ad androide lol

  14. 14
    Radu Motisan:

    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.

  15. 15
    mbt:

    Mi piace l'idea, fresca!

  16. 16
    prato:

    Spiegazione molto bella! Lei risparmiò il mio tempo. Tutti in una soluzione per posto! Grazie! All in one place solution! Thanks!

  17. 17
    Radu Motisan:

    Sono contento che Le piace questo. Si assicuri che Lei legge su JNI pure: questo provvede ancora alcune scelte. it provides some more options.

  18. 18
    prato:

    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?

  19. 19
    a:

    Grazie per volere il tempo per provvedere quest'informazione è;-) il più utile

  20. 20
    Radu Motisan:

    Lei è gradito, a.

  21. 21
    Kaushik:

    Può Lei scrivere che lo stesso copione agcc per mips basò il sistema?

  22. 22
    Radu Motisan:

    Posso chiedere, quale hardware d'androide MIPS ha Lei?

  23. 23
    Kaushik:

    Ho l'asse della Malta MIPS con MIPSr2

  24. 24
    Kaushik:

    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

  25. 25
    sabin:

    Può, il t installare pacchi supplementari d'androide in ubuntu 10.4

  26. 26
    Tanis:

    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?>. < >.<

  27. 27
    Suhas:

    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: 8) 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: 8) Relocations in generic ELF (EM:
    /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.

  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: 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

  29. 29
    mavci:

    sabin
    Installai in ubuntu 10.04 e adesso posso compilare file c per androide donut 1.6
    se Lei vuole posso spiegare

  30. 30
    mavci:

    Compilai un test.c per e sono corso su granata di adb, ma come funzionare al mio telefono d'androide? (DSTL1)

  31. 31
    Radu Motisan:

    ciao, per favore faccia, penso che questo aiuterà la comunità.

  32. 32
    Radu Motisan:

    il mavci, Lei può usare l'applicazione terminale per androide.

  33. 33
    mavci:

    grazie Radu!
    Scriverò tutto l'explainations domani.

  34. 34
    Radu Motisan:

    Ok, allora posso aggiungerli a questo posto, allora gli altri possono usarlo anche.

  35. 35
    quincy:

    questo è così la droga. Posso compilare tutti i generi di programmi di console adesso!

    Lo zerbinotto, Lei dondola!

  36. 36
    quincy:

    @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

  37. 37
    Radu Motisan:

    felice Le piace questo, Quincy.

  38. 38
    Chris:

    Non può sembrare di fare il gpg - la sezione d'importazione lavorare. Come esattamente incolla Lei la chiave in?

  39. 39
    qds:

    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

  40. 40
    Anup:

    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 ++

  41. 41
    Radu Motisan:

    Ciao Anup, Grazie per il Suo contributo!

  42. 42
    Telefono d'androide:

    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.

  43. 43
    l'inganno d'androide sfrutta per radice:

    [...] l'Androide C lo sviluppo nativo – prende il controllo pieno! [...]

Lasci una Risposta

Per favore copi lo spago oqevkL al campo sotto:

Scelte di Blog

Traduttore

English flagFrench flagGerman flagItalian flagPortuguese flagRussian flagSpanish flag
By N2H

Categorie

Archivi

Etichette

Collegamenti Sponsorizzati

Si abboni!

Riceva più seguaci

I nostri Sponsor