Home Tecnica Programmazione Compilare un programma C per Android

In evidenza

SMAU a Bologna con Research to Business

SMAU a Bologna con Research to Business

Il 6 e 7 giugno il Roadshow Smau Business torna a far tappa al Padiglione 33 della Fiera di Bologna e...
Gli articolisti del Portale

Gli articolisti del Portale

Abbiamo deciso di dare più visibilità a tutti coloro che hanno pubblicato articoli per noi, questo perché...
SMAU festeggia il suo quinto anno nel NordEst a Padova

SMAU festeggia il suo quinto anno nel NordEst a Padova

Il 18 e 19 aprile al padiglione 5 di Padova Fiere si terrà la prossima tappa di SMAU Business Roadshow. All'evento...
SMAU risale l’Italia e arriva a Roma

SMAU risale l’Italia e arriva a Roma

Il 21 e 22 marzo nella Nuova Fiera di Roma si terrà la prossima tappa di SMAU Business Roadshow. L'evento...

Bandi di Concorso

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

Avviso per incarico ad ingegnere informatico alla Provincia di Bergamo

Nell'ambito del progetto denominato "SOS badanti: la rete provinciale di sportelli per assistenti e collaboratori familiari” nell'ambito del programma "SAP - Servizi alla Persona" è stato pubblicato la Provincia di Bergamo ha pubblicato l'avviso per il reclutamento di una unità per incarico di...

21 Mag 2012 - Letture:1

Esperto di servizi e tecnologie cloud al Digit PA

Procedura comparativa per il conferimento di un incarico di collaborazione coordinata e continuativa per un profilo senior di “Esperto di servizi e tecnologie cloud”, nell’ambito del progetto europeo “Open Dai” presso l' Ente nazionale per la digitalizzazione della Pubblica Amministrazione...

18 Apr 2012 - Letture:34

Selezione per addetto servizi informatici all'Autorità Portuale di Brindisi

Avviso di selezione pubblica per titoli e prova orale per l’assunzione di n. 1 “addetto ai servizi informatici”, a tempo pieno ed determinato triennale, previo periodo di prova, da inquadrare nell’Area Amministrativa. (Inquadramento al III Livello del C.C.N.L. dei Lavoratori...

12 Feb 2012 - Letture:435

Concorso pubblico per informatico alla Corte dei Conti

E' indetto un concorso pubblico, per   esami,   per   il reclutamento di tre unità di informatici da inquadrare nella III area, fascia retributiva F1, da destinare agli Uffici della Corte dei Conti con sede in Roma. Requisiti: laurea triennale in scienze e...

05 Feb 2012 - Letture:306

Istruttore informatico L.68/1999 al Comune di Potenza

Concorso pubblico, per esami, per la copertura di n. 2 posti di Istruttore Informatico, categoria C, posizione economica C1, a tempo pieno e indeterminato, con riserva assoluta alle categorie dilavoratori di cui all'art. 1 della legge n. 68/1999 (norme per...

21 Gen 2012 - Letture:244

Senior Business Consultant presso Lombardia Informatica

Selezione per figura Senior Business Consultant presso Lombardia Informatica. Il collaboratore dovrà fornire consulenza strategica e di business sulle tematiche verticali della Socio-Sanità. Requisiti di ammissione: Laurea in Ingegneria, Economia e Commercio o Scienze dell’Informazione; Percorsi di formazione professionale in ambito sanitario e socio-sanitario, su...

11 Gen 2012 - Letture:284

Bando progetto TAG (Toscana Area Giovani) per giovani talenti digitali

UPI Toscana ha indetto un avviso pubblico per la selezione di 20 giovani (2 per ciascuna delle 10 province della Toscana), da impiegare come formatori all'interno del Progetto TAG (Toscana Area Giovani). Il bando è finalizzato a valorizzare al meglio i...

03 Gen 2012 - Letture:271

I più attivi

Dati e punteggi dell'ultimo anno

Giovanna Casamassima Giovanna Casamassima
47 articoli
16,501 punti totali
Rodolfo Giometti Rodolfo Giometti
49 articoli
5,153 punti totali
Vittorio D'Aversa Vittorio D'Aversa
33 articoli
3,445 punti totali
Fulvio Lucchetti Fulvio Lucchetti
9 articoli
0,279 punti totali
Luigi Carbone Luigi Carbone
10 articoli
0,262 punti totali

Ci hanno visitato

Oggi:1289
Ieri:2110
Totali (14/04/09):1170464

I nostri numeri

Articoli pubblicati: 552
Iscritti al portale: 768
Iscritti all'Elenco: 184
Iscritti ML Discussioni: 351
Iscritti ML Articoli: 30
Iscritti ML Lavoro: 166
 

Google +1: il «nemico» del «mi piace» di Facebook

Il tanto atteso nemico del "mi piace" targato Facebook è arrivato, il colosso de...

Cifratura wireless: TKIP vs AES

Una delle domande più frequenti di chi intende implementare una rete Wireless è...

Git in Eclipse

Chi mi conosce sa la mia avversione (del tutto personale, ci tengo a sottolinear...

Nvidia 295.33, ecco i nuovi driver per linux versione 3.3

L'annuncio è di qualche giorno fa, Nvidia rilascia i nuovi driver 295.33 con sup...

Perché cross compilare quando si può compilare nativamente?

Lavorando con architetture diverse mi trovo spesso a dover utilzzare uno stesso ...

Come saltare il proxy «blocca-tutto» aziendale

Mi capita spesso, ma non sempre, di andare da dei miei clienti e non potermi con...

SUN Wiki Publisher: scrivere facilmente su Wikipedia

Personalmente uso parecchio Mediawiki (il motore di Wikipedia); lo ritengo un ot...

SL4A e il drone parla più lingue

Chi come me non ama Java si sentirà a disagio volendo programmare una qualsiasi ...

Aggiungere programmi all'N900 con Maemo SDK

Abbiamo già visto come sia facile installare nuove applicazioni sul Nokia N900, ...

Boot from SAN

Intendiamoci, non è l’ultima briciola tecnologica caduta da un banchetto alla NA...

Implementare una LIM con Linux

Come promesso rieccomi qui per illustrare come realizzare una LIM (che ricordo s...

Mageia 1 alpha1 è tra noi

Finalmente è stata rilasciata la tanto attesa versione alpha1 principalmente riv...

Verificare spazio su disco su UNIX

Nella gestione si sistemi informativi capita spesso di accedere a postazioni ser...

Sicurezza informatica: safety, dependability, security

La sempre maggiore diffusione delle tecnologie ha profondamente rivoluzionato la...

Compilare un programma C per Android

Essendo un programmatore C (uso anche altri linguaggi, ma il C e quello che uso ...

Grep e Strings due giganti di Linux

Il tempo libero serve anche a sperimentare e quando si ha la passione per la com...

Socat: quando i dati passano via rete

Lavorando coi sistemi embedded molte volte mi capita di dovermi arrangiare su di...

Controllare MAME con Wiimote su N900!

Ecco un'altra dimostrazione delle potenzialità di questo telefono (se vogliamo c...

Android: se non hai il telefono usa l'emulatore!

In questi giorni sto valutando di comprare un cellulare basato su Linux. Inizial...

AVG Live CD Rescue: l'antivirus live!

Qualche giorno fa mi sono reso conto che in azienda sta per scadere la licenza d...

IPhone recupero file: un gioco di squadra!

Un giorno l'amico Armando Buzzanca mi chiama perchè deve recuperare una no...

WODE, l'emulatore DVD per la Wii

Qualche giorno fa mi è capitato di sfidare mio cognato ad una partitella a tenni...

Sabayon Linux 5.4 (32 e 64 bit)

E' stata rilasciata online la nuova versione 5.4 di Sabayon Linux, una tra ...

Architettura di una trading room

La trading room o sala mercati è il luogo dove vengono effettuate le operazioni ...

Maemo extras: ancora più applicazioni per l'N900

Finalmente, grazie a Nokia, abbiamo a disposizione un esemplare dell'N900 su c...

Demolinux: l'automazione industriale con Linux

Qualche tempo fa il mio ex istituto superiore mi aveva chiesto di fare una picco...

Server Linux: tutti i trucchi per farlo al meglio

Volete fare un server Linux per la vostra impresa, ufficio o semplicemente per c...

AccessPoint: la scelta ottimale del canale di trasmissione

Realizzare una rete Wireless outdoor (ma anche indoor) pone il problema della sc...

Linaro, la no-profit che produce distribuzioni Linux/ARM

Il progetto Linaro presentato nel 2010 da colossi del calibro di Freescale Semic...

Generare un file da 10GB in 2 millisecondi!

Chi ha a che fare con le macchine virtuali o deve generare delle immagini di fil...

Installazioni di Linux su sistemi non convenzionali

Un'ottica convenzionale vede l'informatica come un insieme di applicazioni e sis...

Gimp, OpenOffice & C. su N900? Semplice con Debian!

Che Maemo fosse versatile me ne sono accorto subito, ma l'idea di poter installa...

Virtualizzazione di Windows XP o altri SO su Ubuntu con Qemu

I pc odierni sono sempre più potenti e molto spesso sotto sfruttati, la virtua...

Cloud Computing: cos'è veramente?

Da qualche tempo si sente sempre più parlare di Cloud Computing. Sembra che ques...

Geexbox: la mini distro MediaCenter Linux

Geexbox è un piccolo ma potente sistema operativo orientato alla riproduzione di...

Cluster VMWARE

In questo articolo vediamo come realizzare un cluster di macchine virtuali con u...

NBTempo: una GUI per le timeline

Svolgendo alcuni casi in cui serviva creare delle timeline per verificare l'att...

Installare Linux su una USB key: ecco come!

L’installazione  e l'avvio di una distribuzione Linux Live da un supporto U...

Tenere i servizi sotto controllo con Monit

In questi giorni mi è capitato di dover risolvere un problema per un mio cliente...

F-Droid, e il FOSS su Android è servito!

Come Software Libre Evangelist mi son spesso trovato ad incoraggiare l'uso del s...

Integrazione Webmaster Tool. Google Analytics, le ultime novità

Google non finisce mai di stupirci, ma soprattutto è inarrestabile sull'implemen...

Backup mail server: quando il mail server non è raggiungibile

Se avete il mail server in proprio potrebbe succedere che questo non sia raggiun...

LIM: la lavagna multimediale con il wiimote

LIM sta per Lavagna Interattiva Multimediale, ed è un progetto che, tramite l'...

I-Memo: le password personali sempre con te

Prodotto dalla MensTecnica, una giovane azienda della Basilicata fondata nel 200...

ASUS U36SD il notebook in soli 19mm

La concorrenza al più blasonato della “mela” si fa agguerrita specie nell'ultimo...

Universal USB Installer 1.8.04 e Ubuntu Linux 10.10

Rilasciata il 10.10(.2010) la nuova versione di Ubuntu Linux (la data corrispond...

Come gestire una presentazione con il Wiimote

Capitandomi spesso si tenere conferenze e workshop mi trovo sempre il problema d...

Forno a microonde: analisi emissioni EME

Nell'immaginario collettivo c'è una forte paura per i danni che posso generare s...

Openembedded: la distribuzione «ristretta» per Linux

Quando le risorse di un sistema sono limitate non è possibile usare una distribu...

busybox & Android: la command line facile

Nei precedenti articoli abbiamo visto due tecniche per aggiungere nuovi programm...

munin: come ti controllo il server aziendale

In questi ultimi tempi il server che mantiene il nostro portale è sottoposto ad ...

Autenticarsi con la pen drive

La pen drive è ormai diventata come il cellulare, impossibile non averla, ma sie...

Code Smells

Sempre più spesso il codice ha un cattivo odore. Sei sicuro di non scrivere cod...

Programmare in C sull'N900

In questo articolo vedremo come sia semplice programmare in C sull'N900. In part...

Snom 870: il telefono con Linux

Definirlo solo telefono è sicuramente riduttivo, infatti lo Snom 870 è sicuramen...

Kameleon: oltre i limiti della virtualizzazione

Negli ultimi anni la potenza dei computer e la loro capacità è aumentata in modo...

Clonare una macchina vera in 30 minuti con VirtualBox

Essendo uno sviluppatore mi son reso conto che la virtualizzazione di una macchi...

Installare strace su Android

Quando si programma è importante avere buoni tool di debug e uno dei più importa...

Il NAS D-Link DNS-343

Grazie alla D-Link azienda produttrice di apparecchiature di rete e non solo v...

Arduracing: come realizzare una robot-car intelligente con Arduino

Arduracing è un progetto realizzato con Arduino in collaborazione con il Lucccal...

Compilare un programma C per Android Stampa E-mail
(0 voti, media 0 di 5)
Area Tecnica - Programmazione
Scritto da Rodolfo Giometti   
Mercoledì 04 Agosto 2010 09:21
Articolo letto 3863 volte

Essendo un programmatore C (uso anche altri linguaggi, ma il C e quello che uso più spesso) sono spinto a volerlo usare dapperutto! :)

Nello scorso articolo su Android vi ho fatto vedere come si installava l'SDK e, tramite questo, come si installava un pacchetto APK sull'emulatore; ma quello era un programma scritto in Java, invece e bene sapere che con l'emulatore di Android è possibile fare ben di più, è infatti possibile  provare dei programmi scritti in C!

Purtroppo, come già detto, l'SDK di Android non ci aiuta in questo, infatti il linguaggio nativo di Android è Java e l'SDK è tutto incentrato su di esso. Esiste però un modo per compilare programmi in C, anche se non del tutto banale ed immediato...

Vediamo come.

I tool di sviluppo

Innanzi tutto occorre aver installato l'SDK come ho mostrato l'altra volta. Poi occorre che vi installiate il JDK di Java versione 5 e quindi scarichiate tutti i sorgenti di Android...

Ma andiamo con ordine, prima i sorgenti di Android: su questo sito trovate tutte il informazioni al riguardo, ma le riporto qui passo passo con la spiegazione.

Iniziamo con lo scaricare un tool per la gvestione dei sorgenti dei progetti di Android. Il tool si chiama repo ed è basato su Git:

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

Da notare che io ho una directory ad hoc (~/bin) nella mia home per gli script privati.

Poi creiamoci l'albero dei sorgenti di Android e riempiamolo con repo:

$ cd android
$ mkdir sources && cd sources/
$ mkdir platform && cd platform/
$ repo init -u git://android.git.kernel.org/platform/manifest.git
Getting repo ...
from git://android.git.kernel.org/tools/repo.git
remote: Counting objects: 1087, done.
remote: Compressing objects: 100% (483/483), done.
remote: Total 1087 (delta 684), reused 950 (delta 583)
Receiving objects: 100% (1087/1087), 309.31 KiB | 267 KiB/s, done.
Resolving deltas: 100% (684/684), done.
From git://android.git.kernel.org/tools/repo
* [new branch]      maint      -> origin/maint
* [new branch]      master     -> origin/master
* [new branch]      stable     -> origin/stable
* [new tag]         v1.6.10.2  -> v1.6.10.2
From git://android.git.kernel.org/tools/repo
* [new tag]         v1.0       -> v1.0
* [new tag]         v1.0.1     -> v1.0.1
* [new tag]         v1.0.2     -> v1.0.2
...

Una volta finito repo vi chiederà un po' di informazioni che saranno utilizzate se decidete di contribuire al progetto. Inseritele correttamente, non si sa mai...

In fine sincronizziamo i nostri repository con quelli di Android:

$ repo sync

Questa fase durerà per un bel po', vi conviene fare una pausa e prendere un caffè! :)

Scaricati i sorgenti di Android passiamo all'JDK. Andate sul sito del JDK di Java ed eseguite la procedura per scaricare quello contenuto nel file jdk-1_5_0_22-linux-i586.bin. Poi eseguitelo ed installate il tool:

$ cd /opt
$ chmod +x jdk-1_5_0_22-linux-i586.bin
$ ./jdk-1_5_0_22-linux-i586.bin

Una volta finito i file dovrebbero essere nella directory /opt/jdk1.5.0_22.

Bene, ci siamo, ora esportiamo un po' di variabili d'ambiente per semplificarci la vita coi comandi che dovremo dare da ora in poi:

$ JAVA_HOME=/opt/jdk1.5.0_22
$ export PATH=$JAVA_HOME/bin:$PATH

Poi impostiamo la variabile ANDROID_BUILD_TOP in modo che punti alla directory dove sono i sorgenti di Android ed inizializziamo l'ambiente per la compilazione:

$ export ANDROID_BUILD_TOP=~/android/sources/platform
$ cd $ANDROID_BUILD_TOP
$ source build/envsetup.sh
WARNING: Only bash is supported, use of other shell would lead to erroneous results
including device/htc/dream/vendorsetup.sh
including device/htc/passion/vendorsetup.sh
including device/htc/sapphire/vendorsetup.sh

Se tutto è andato bene provate a dare il comando help, dovreste ottenere:

$ help
Invoke ". build/envsetup.sh" from your shell to add the following functions to your environment:
- croot:   Changes directory to the top of the tree.
- m:       Makes from the top of the tree.
- mm:      Builds all of the modules in the current directory.
- mmm:     Builds all of the modules in the supplied directories.
- cgrep:   Greps on all local C/C++ files.
- jgrep:   Greps on all local Java files.
- resgrep: Greps on all local res/*.xml files.
- godir:   Go to the directory containing a file.

Look at the source to view more functions. The complete list is:
add_lunch_combo cgrep check_product check_variant choosecombo chooseproduct choosetype choosevariant cproj croot findmakefile gdbclient get_abs_build_var get_build_var getbugreports getprebuilt gettop godir help isviewserverstarted jgrep lunch m mm mmm pid print_lunch_menu printconfig resgrep runhat runtest set_java_home set_sequence_number set_stuff_for_environment setpaths settitle smoketest startviewserver stopviewserver systemstack tapas tracedmdump

Ora dobbiamo iniziare a compilare i sorgenti di Android in modo tale che lui si crei tutti i tool che ci serviranno dopo per la cross compilazione dei programmi C che andremo a scrivere. Usiamo il comando choosecombo per impostare i parametri di compilazione:

$ choosecombo
Build for the simulator or the device?
1. Device
2. Simulator

Which would you like? [1] 1


Build type choices are:
1. release
2. debug

Which would you like? [1] 1


Which product would you like? [generic]


Variant choices are:
1. user
2. userdebug
3. eng
Which would you like? [eng] eng

============================================
PLATFORM_VERSION_CODENAME=AOSP
PLATFORM_VERSION=AOSP
TARGET_PRODUCT=generic
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=false
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=OPENMASTER
============================================

Quindi diamo il mitico comando:

$ make

ed aspettiamo pazientemente che finisca...

Il programma C

Una volta che make finisce siamo pronti per compilare il nostro primo programma C su Android! Basta aggiungere una nuova directory come segue:

$ mkdir external/hello && cd external/hello

e metterci il nostro programma C; ecco il contenuto del file hello.c:

$ cat hello.c
#include

int main(int argc, char** argv) {
        char name[80];

        printf("insert your name: ");
        fflush(stdout);
        scanf("%s", name);

        printf("hello %s!\n", name);

        return 0;
}

Poi dobbiamo aggiungere il file Android.mk per definire i comandi di compilazione. Il file è fatto così:

$ cat Android.mk
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := hello
LOCAL_SRC_FILES := hello.c

include $(BUILD_EXECUTABLE)

Il file si legge da solo: la variabile LOCAL_MODULE definisce il nome del programma da generare mentre LOCAL_SRC_FILES definisce i file sorgente.

Finito.

Ora torniamo nella directory precedente e lanciamo la compilazione con il comando mmm:

$ cd -
/home/giometti/android/sources/platform
$ mmm external/hello/
============================================
PLATFORM_VERSION_CODENAME=AOSP
PLATFORM_VERSION=AOSP
TARGET_PRODUCT=generic
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=false
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=OPENMASTER
============================================
make: Entering directory `/home/giometti/android/sources/platform'
target thumb C: hello <= external/hello/hello.c
target Executable: hello (out/target/product/generic/obj/EXECUTABLES/hello_intermediates/LINKED/hello)
target Non-prelinked: hello (out/target/product/generic/symbols/system/bin/hello)
target Strip: hello (out/target/product/generic/obj/EXECUTABLES/hello_intermediates/hello)
Install: out/target/product/generic/system/bin/hello
make: Leaving directory `/home/giometti/android/sources/platform'

Se controlliamo il file out/target/product/generic/system/bin/hello vediamo che, effettivamente, questo è per il simulatore e non per il PC che ha architettura x86:

$ file out/target/product/generic/system/bin/hello
out/target/product/generic/system/bin/hello: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), stripped

La prova sull'emulatore

Ora dobbiamo provare ll nostro programmino. Ancora non ho un telefono con su Android e quindi ricorro ancora una volta alll'emulatore.

Innanzi tutto dobbiamo trovare del posto libero sulla flash dove memorizzare il programma che abbiamo appena creato. Per far questo lanciamo allora l'emulatore con il telefono di prova che abbiamo creato la volta scorsa:

$ emulator -avd my_phone

quindi con l'utility adb otteniamo una shell sul nostro telefonino:

$ adb shell
#

Vediamo come è configurata la flash con i comandi mount e df:

# mount
rootfs / rootfs ro 0 0
tmpfs /dev tmpfs rw,mode=755 0 0
devpts /dev/pts devpts rw,mode=600 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
tmpfs /sqlite_stmt_journals tmpfs rw,size=4096k 0 0
none /dev/cpuctl cgroup rw,cpu 0 0
/dev/block/mtdblock0 /system yaffs2 ro 0 0
/dev/block/mtdblock1 /data yaffs2 rw,nosuid,nodev 0 0
/dev/block/mtdblock2 /cache yaffs2 rw,nosuid,nodev 0 0
# df
/dev: 47084K total, 0K used, 47084K available (block size 4096)
/sqlite_stmt_journals: 4096K total, 0K used, 4096K available (block size 4096)
/system: 73600K total, 73600K used, 0K available (block size 4096)
/data: 65536K total, 19328K used, 46208K available (block size 4096)
/cache: 65536K total, 1156K used, 64380K available (block size 4096)

Dall'output di questi comandi credo che la directory /data faccia proprio al caso nostro... in particolare la sottodirectory /data/local:

# cd /data/local
# ls
tmp

Creiamoci qiondi un nosto ambiente in questa directory:

# mkdir bin
# ls
bin
tmp

e quindi copiamoci il programma che abbiamo compilato prima (dobbiamo uscire dalla shell del telefonino con un CTRL+D per dare il comando seguente):

$ adb push out/target/product/generic/system/bin/hello /data/local/bin/

Rientriamo poi nel telefonino, sempre con adb, e lanciamo il programma hello:

$ adb shell
# cd /data/local/bin/
# chmod 777 hello
# ./hello
insert your name: rodolfo
hello rodolfo!

 
 

In primo piano

Simons Voss: un mondo senza chiavi

Simons Voss: un mondo senza chiavi

Il sistema di gestione e di controllo degli accessi 3060 si presenta come un’alternativa con enormi vantaggi...
Pubblicità mirata dei prodotti

Pubblicità mirata dei prodotti

Hai un prodotto o un servizio da pubblicizzare? Fallo su consulenti-ict.it! Pubblicizzare un prodotto...
Recensioni sul Portale

Recensioni sul Portale

Hai un prodotto hardware/software o un libro riguardante uno dei temi dell'ICT? Vuoi farlo conoscere...

Offerte di lavoro

Visualizza Topic »

Eventi

Non ci sono eventi in programma
Maggio 2012
D L M M G V S
29 30 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 1 2
Giugno 2012
D L M M G V S
27 28 29 30 31 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

Sondaggi

busyCaricamento Sondaggio...