Corso su Android – Configurazione e guida all’implementazione del primo progetto

Tutorial android

Chi non ha mai sentito parlare di Android? Ad oggi è il sistema operativo open source per dispositivi mobili più diffuso al mondo. Sviluppare un'applicazione e renderla disponibile sul market di Google è semplice grazie ai tools messi a disposizione per lo sviluppo. Da qui l'idea di scrivere dei tutorial che guideranno passo passo alla realizzazione di applicazioni, dove verranno introdotti i componenti basilari e alla fine sarà possibile creare applicazioni legate al mondo dell'elettronica, infatti si vedrà come poter comunicare con Arduino. In questo primo articolo vedremo come configurare l'ambiente di sviluppo, come effettuare il deploy delle nostre applicazioni sull'emulatore integrato nell'SDK e come abilitare un telefono per potervi installare l'applicazione. Vedremo poi come creare il primo progetto ed analizzaremo le varie parti di cui è costituito. Benvenuti al nostro Corso su Android.

Android è il più popolare tra i sistemi operativi per dispositivi mobili basato su una versione modificata di Linux. Android è open source sotto licenza Apache v2.0, il che significa che chiunque può scaricare il codice sorgente, modificarlo e ridistriburlo. I dispositivi in cui viene installato crescono rapidamente e ogni giorno milioni di persone acquistano un telefono con sistema operativo Android.

Sviluppare applicazioni java based su Android è semplice e veloce grazie all' SDK messo a disposizione per gli sviluppatori. Inoltre viene messo a disposizione un NDK (Native Development Kit) per lo sviluppo di funzionalità in codice nativo C++. Le applicazioni sviluppate possono essere distribuite gratuitamente o vendute sul Play Store, dove è possibile controllare come distribuire il prodotto. Se l'applicazione aumenta di popolarità, Google Play fa salire di posizione nella graduatoria per dare più visibilità all'applicazione.

Android sfrutta le caratteristiche hardware dei dispositivi che permettono alle applicazioni di adattarsi graficamente, infatti è possibile sviluppare una sola applicazione che vada bene per smartphone e tablet creando un layout grafico ad hoc.

Molte le funzionalità che si possono utilizzare in quanto è presente il supporto per GPS, Bluetooth, accelerometro, wireless e USB che permettono la creazione di applicazioni variegate.

Architettura

Il Sistema operativo Android è uno stack di componenti software diviso in 5 sezioni e 4 livelli come si vede dal diagramma architetturale sottostante.

Android è costruito su un kernel Linux che fornisce funzionalità per la gestione della memoria, gestione dei permessi, fornisce molti driver ed il supporto alle shared library.
Sopra il kernel sono presenti un set di librerie quali per esempio SQLite che permette l'accesso al database sqlite3, librerie per l'utilizzo di OpenGL e così via.
Android implementa una sua virtual machine che permette la portabilità delle applicazioni, fa girare file ottimizzati in formato dex, converte i file .java in .dex a runtime.
Inoltre fa in modo che ogni applicazione giri in un proprio processo .
Fornisce molti servizi ad alto livello che possono essere utilizzate dalle applicazioni scritte dagli utenti.
All' ultimo livello si trovano le applicazioni custom scritte da sviluppatori.

Configurazione ambiente

Nuova installazione

E' possibile installare l'SDK Android sui sistemi operativi più utilizzati (Windows, Mac, Linux).
L'SDK Android fornisce le API e i tools necessari per buildare, testare ed effettuare il debug delle applicazioni Android.
Per una nuova installazione consigliamo di scaricare l'ADT Bundle presente a questo indirizzo.
L'ADT Bundle include:

  • l'ambiente di sviluppo Eclipse con il plugin ADT(Android Developer Tools) incluso;
  • Android SDK Tools;
  • Android Platform-tools;
  • la più recente piattaforma Android;
  • la più recente immagine di sistema Android per l'emulatore;

Per chi ha già un IDE (Eclipse, NetBeans)

Se hai già un'ambiente di sviluppo e vuoi sviluppare applicazioni Android devi scaricare l'SDK Tools presente a questo indirizzo http://developer.android.com/sdk/index.html alla voce "USE AN EXISTING IDE". Al termine dell'installazione si deve selezionare la versione della piattaforma Android da sviluppare e l'immagine di sistema per il simulatore.
E' inoltre necessario aggiungere il plugin ADT al tuo ambiente di sviluppo.
Il plugin può essere installato in 2 modi possibili:

  1. Scaricando il plugin direttamente dall'IDE (consigliato)
  2. Scaricando il pacchetto .zip sul computer e poi caricarndo sull'IDE

1) Download dell'ADT Plugin con Eclipse

Aprire Eclipse e selezionare Help --> Install New Software

  1. Click su Add in alto a destra della finistra che si apre.
  2. Nella sezione Add Repository della finestra che appare inserire "ADT Plugins" per Name e la seguente url per Location: https://dl-ssl.google.com/android/eclipse/
  3. Click su OK.

Se si riscontrano problemi nell'utilizzo del protocollo https si può utilizare il protocollo http. La url per Location diventerebbe: http://dl-ssl.google.com/android/eclipse/

  1. Nel box Available Software, selezionare il checkbox Developer Tools e cliccare su Next
  2. Nella prossima finestra sarà presente la lista dei tool che saranno scaricati; cliccare su Next
  3. Leggere ed accettare le condizioni di licenza e cliccare su Finish

Se dovessero comparire dei warning di sicurezza o validità del software basta cliccare su OK.

  1. Quando l'installazione è stata completata riavviare Eclipse.

Al termine del riavvio si deve specificare nelle preferenze di Eclipse la posizione della directory dell'SDK Android scaricato precedentemente:

  1. Nella finestra "Welcome to Android Development" che appare selezionare Use existing SDKs.
  2. Selezionare la posizione della cartella dell'SDK Android
  3. Click su Next

2)Installazione da file locale

Scaricare dal seguente link nella sezione "Troubleshooting ADT Installation" il pacchetto .zip

  1. Aprire Eclipse e selezionare Help --> Install New Software
  2. Click su Add in alto a destra della finistra che si apre.
  3. Nella sezione Add Repository cliccare su Archive.
  4. Selezionare il file scaricato e cliccare su OK.
  5. Inserire "ADT Plugin" per il nome e cliccare su OK.
  6. Nel box Available Software, selezionare il checkbox Developer Tools e cliccare su Next.
  7. Nella prossima finestra sarà presente la lista dei tool che saranno scaricati e cliccare su Next.
  8. Leggere ed accettare le condizioni di licenza e cliccare su Finish.

Se dovessero comparire dei warning di sicurezza o validità del software basta cliccare su OK.

  1. Quando l'installazione è stata completata riavviare Eclipse.

Configurare un emulatore

L'emulatore Android è fornito nell'sdk e permette di sviluppare la maggior parte delle applicazioni. Unico difetto è l'estrema lentezza, consigliato per chi ha un pc (o mac) con almeno 4 GB di RAM.
E' possibile configurare l'emulatore cliccando sull'icona:

Nota: Se non si riesce a vedere l'icona nella barra, verificare che la propria vista eclipse sia settata su Java. Per verificarlo basta andare su Windows -->Perspective-->Java
Cliccando sull'icona apparirà la finestra con la lista degli emulatori:

Per aggiungere un nuovo emulatore cliccare su New…

Ora bisogna inserire le caratteristiche dell'emulatore.
In particolare:

  • AVD Name: il nome dell'emulatore
  • Device: il tipo di device da emulare (definito da tipo di schermo,dimensioni e densità )
  • Target: la versione di Android installata
  • CPU/ABI: il tipo di processore
  • Memory Option: la memoria RAM da assegnare all'emulatore
  • Internal Memory: la memoria interna dell'emulatore
  • SD: la memoria della SD card

E' inoltre possibile emulare la fotocamera se il pc/mac ha una webcam

Cliccare su OK.

Configurare un telefono

Quando si implementa un'applicazione è consigliato effettuare il deploy ed il test su un dispositivo fisico prima di distribuirla agli utenti. L'SDK mette a disposizione un tool che rende semplice installare l'applicazione sul dispositivo tramite Eclipse o da linea di comando tramite ADB.
Vediamo come abilitare il debug su un dispositivo:

  1. Nel file AndroidManifest.xml, aggiungere l'attributo android: debuggable="true" nell'elemento <application> se si usa eclipse questo passaggio non serve, viene impostato in automatico nel momento del deploy. Però se si mette, prima di distribuire l'applicazione va tolto o messo a false perché l'applicazione NON deve essere debuggabile)
  2. Abilitare il debug USB sul dispositivo. Possiamo trovare il settaggio sotto i path:
  • per telefoni con versione Android minore e uguale alla 3.0 sotto Impostazioni-->Applicazioni-->Sviluppo
  • per telefoni con versione Android maggiore e uguale alla 4.0 sotto Impostazioni-->Opzioni sviluppatori

SetUp del sistema operativo per riconoscere il dispositivo:

  • Mac: non è necessario effettuare nessuna operazione.
  • Windows: bisogna installare i driver del dispositivo, di seguito riportiamo i passi da effettuare per Widows 7:
    • Connetere il dispositivo via USB al PC
    • Premere il tasto destro su risorse del computer e selezionare Gestione
    • Selezionare Gestione dispositivi nel pannello di sinistra
    • Nel pannello di destra espandere la voce Altri dispositivi
    • Premere il tasto destro sul nome del device e selezionare Aggiornamento software driver…
    • Selezionare la voce Cerca il software del driver nel computer and click next
    • Cliccare su sfoglia e selezionare il path <sdk>\extras\google\usb_driver\
    • Cliccare next ed installare il driver
  • Linux: Se si sviluppa su Ubuntu bisogna aggiungere un file di regole udev che contiene la configurazione per ogni tipo di device che si vuole utilizzare per deployare le applicazioni. Nel file delle regole ogni costruttore è identificato da un identificativo univoco indicato com la proprietà ATTR{idVendor} quindi:
    • Loggarsi come root e creare il file /etc/udev/rules.d/51-android.rules. Usare il formato SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0666", GROUP="plugdev". Dove 0bb4 rappresenta il vendor id per l'HTC
    • Eseuire chmod a+r /etc/udev/rules.d/51-android.rules

Per verificare se il dispositivo è connesso al pc si può procedure in due modi:

  • da Eclipse: passare alla visualizzazione DDMS e se il dispositivo è connesso si vede il nome nella finestra Devices
  • da command line: navigare fino al path <sdk>\platform-tools e lanciare adb devicesandroid.rules

se il dispositivo è presente verrà restituito il nome.
Di seguito per comodità vengono riportati i vendor ID :

Company

USB Vendor ID

Acer 0502
ASUS 0b05
Dell 413c
Foxconn 0489
Fujitsu 04c5
Fujitsu Toshiba 04c5
Garmin-Asus 091e
Google 18d1
Haier 201E
Hisense 109b
HTC 0bb4
Huawei 12d1
K-Touch 24e3
KT Tech 2116
Kyocera 0482
Lenovo 17ef
LG 1004
Motorola 22b8
MTK 0e8d
NEC 0409
Nook 2080
Nvidia 0955
OTGV 2257
Pantech 10a9
Pegatron 1d4d
Philips 0471
PMC-Sierra 04da
Qualcomm 05c6
SK Telesys 1f53
Samsung 04e8
Sharp 04dd
Sony 054c
Sony Ericsson 0fce
Teleepoch 2340
Toshiba 0930
ZTE 19d2

HelloWorld

Andiamo a vedere come creare il nostro primo progetto Android con Eclipse.

  1. avviare l'IDE Eclipse
  2. dal menu File --> New --> Other…
  3. selezionare la cartella Android --> Android Application Project e cliccare Next
  4. compilare i campi come di seguito. Notare che inserendo il nome dell'applicazione nella sezione Application Name verranno in automatico prepopolati anche gli altri campi che è possibile comunque modificare

In questa schermata è inoltre possibile scegliere:

  •     la versione minima dell'SDK Android dalla quale girerà l'applicazione.
  •     la versione dell'SDK Android per cui è destinata l'applicazione
  •     la versione con cui sarà compilata l'applicazione

Questi settaggi possono essere modificati anche in seguito nel file AndroidManifest.xml

  1. Al termine cliccare su Next
  2. Nella schermata successiva è possibile effettuare alcune scelte tra cui:
    a.    includere un'icona diversa da quella di default (la scelta non è definitiva, può essere modificata o inserita in un secondo momento)
    b.    creare un'activity di default. In questo caso è il tool che crea una struttura di base(un file java e un file xml)
    c.    il percorso dove salvare il proprio progetto. Di default il workspace scelto alla partenza di Eclipse
    d.    e' possibile aggiungere il progetto ad un progetto esistente
  3. Cliccare su Next.
  4. Questa schermata compare se è stata selezionata nella schermata precedente la voce "Create custom launcher icon". E' possibile selezionare una propria immagine creata in precedenza oppure lasciando tutto inalterato verrà creata l'icona di default di Android.
  5. Cliccare su Next.
  1. Questa schermata compare se è stata selezionata nella schermata precedente la voce "Create Activity". E' possibile scegliere il tipo di Activity da creare. Il tool ci mette a disposizione alcuni tipi di activity.
  2. Cliccare su Next.
  3. Scegliere il nome dell'activity e dell'xml associato.
  4. Cliccare su Finish.
  5. L'IDE creerà la struttura del progetto e visualizzerà l'activity creata.

Run Configuration

E' possibile eseguire l'applicazione su un dispositivo fisico oppure utilizzando l'emulatore messo a disposizione dall'SDK di Android. In entrambi i casi è possibile scegliere tra due diverse modalità:

Modalità personalizzata

  1. Modalità veloce:
    1. Cliccare con il pulsante destro sul nome del progetto
    2. Scegliere "Run as" --> "Android Application"
  2. Modalità personalizzata:
    1. Cliccare con il pulsante destro sul nome del progetto
    2. Scegliere "Run as" --> "Run Configurations…"
    3. Cliccare con il pulsante destro su "Android Application"
    4. Scegliere "New"
    5. Cliccare sul pulsante Browse…
    6. Scegliere il proprio progetto e cliccare su OK
    7. Scegliere il nome della configurazione e cliccare su Run

Struttura del progetto

Espandendo la root del progetto nella sezione Project Explorer si possono vedere delle cartelle, il plugin non le crea tutte alcune devono essere aggiunte in un secondo momento a seconda dell'esigenza:

  • src: contiene i file sorgenti java
  • gen: contiene il file R.java e le interfacce create dal file AIDL. Questo contiene gli id di tutti gli oggetti dell'applicazione. Viene creato a runtime nel momento della compilazione e quindi inserito nel file apk.
  • assets:di default è vuota. I file che vengono messi qui sono inclusi nell'apk e possono essere letti utilizzando l'AssetManager oppure tramite url dall'applicazione
  • bin: cartella di output dove vengono messi i file compilati e il file apk
  • libs: contiene le librerie dell'utente
  • res: è composta da sottocartelle e contiene le risorse applicative (NB: i nomi delle risorse all'interno della cartella devono essere scritte con caratteri minuscoli altrimenti si avranno errori in compilazione)
    • anim: contiene i file relativi alle animazioni
    • drawable:contiene i file bitmap
    • layout:contiene i file xml che descrivono le interfacce utente
    • menu:contiene i file xml relativi ai menu applicativi
    • values:contiene semplici valori come string, stili, colori, dimensioni e array
    • xml:contiene file xml che possono essere letti a runtime chiamando Resources.getXML()

Nel progetto possiamo distinguere più cartelle con il nome drawable, questo perché chi sviluppa un'app deve fornire l'interfaccia  grafica per i vari dispositivi.

Infatti Android adatta la grafica a seconda del dispositivo su cui viene installata. Così è possibile fare la stessa applicazione per i vari modelli di smartphone e tablet modificando solamente il layout grafico e distribuendo lo stesso file apk. Infatti è possibile fornire varie risorse che verranno adattate a runtime dal sistema operativo.
Vediamo come android adatta i layout. Prima di tutto possiamo dire che Android distingue tra:

  • Screen size: la dimensione fisica dello schermo misurata sulla diagonale e definisce gli schermi in 4 categorie
    • Small con schermi di dimensione minima di 426dp x 320dp
    • normal con schermi di dimensione minima di 470dp x 320dp
    • large con schermi di dimensione minima di 640dp x 480dp
    • extra large con schermi di dimensione minima di 960dp x 720dp
  • Screen density: è la quantità di pixel in una data area dello schermo definita come dpi(dot per inch) definita in 5 categorie low, medium, high, extra high e extra extra high

Quindi è possibile adattare la grafica inserendo apposite immagini nelle cartelle con una determinata "size" o con una determinata "density"; sarà poi il Sistema Operativo in fase di installazione ad adattare la grafica necessaria.
Per creare le cartelle con le varie densità basta appendere in suffisso (qualifier) opportuno alle cartelle, di seguito riportiamo quelle per drawable:

  • drawable-hdpi
  • drawable-lhdpi
  • drawable-mhdpi
  • drawable-xhdpi
  • drawable-xxhdpi

Per recuperare le risorse che meglio si adattano agli schermi dei dispositivi, Android usa la seguente logica: se non esiste un qualifier per lo schermo del telefono, allora sceglie la risorsa definita per uno schermo più piccolo. Se non fosse disponibile una risorsa piu piccola od uguale a quella necessaria al telefono, l'applicazione verrà chiusa forzatamente dal sistema operativo.
Android mette a disposizione altri due qualificator per distinguere l'orientamento del telefono:

  • port: indica una risorsa nel caso il dispositivo è in posizione vericale
  • land indica una risorsa nel caso il dispositivo è in posizione orizzontale

E' inoltre possibile definire altri qualifier sul layout a seconda dell'area dello schermo.
Se per esempio il tuo layout richiede che la dimensione più piccola dell'area dello schermo debba essere almeno 600 dp, allora si può usare questo qualifier "layout-sw600dp". Il sistema userà questa risorsa solo quando la più piccola dimensione disponibile dello schermo è almeno 600dp (in altezza o larghezza).
All'interno della cartella res vi è un'altra cartella, quella values contentente i valori:

  • arrays.xml
  • colors.xml
  • dimens.xml
  • strings.xml
  • styles.xml

Andiamo a spiegare cosa rappresentano questi file:

1)    arrays.xml: permette di creare TypedArray di item. L'array può essere di tipi diversi, sta allo sviluppatore definire il tipo di dati presenti.

<?xml version="1.0" encoding="utf-8"?>
<resources>
<array name="country">
<item>Albania</item>
<item>Algeria</item>
</array>
</resources>

2)    color.xml: permette di specificare colori in RBG e canale alpha. I colori devono esere preceduti dal simbolo # e possono essere:

  • #RGB
  • #ARGB
  • #RRGGBB
  • #AARRGGBB

La definizione è la seguente:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color
name="color_name">hex_color</color>
</resources>

3)    dimens.xml: definisce una dimensione definita da un numero seguito da una unità di misura. Per esempio 10dp, 10sp, 10pt, 10px, 10mm, 10in dove:

  • dp: Density indipendent Pixel, è un numero astratto basato sulla densità fisica dello schermo. Questa unità è relativa a 160dpi (dots per inch) dove 1dp è uguale ad 1px, quindi quando l'applicazione gira su uno schermo con più alta densità, il numero di pixel usato è aumentato di un fattore di scala relativo allo schermo, così se l'applicazione gira su un dispositivo con bassa densità, il numero di pixel viene diminuito con un fattore di scala appropriato. Utilizzando questa unità di misura si ha una consistenza degli elementi grafici su dispositivi diversi;
  • sp: Scale Indipendent Pixel. È come dp ma viene scalato anche per le preferenze del font dell'utente.
  • pt: Points rappresenta 1/72 di un inch basato sulla dimensione fisica dello schermo
  • px: Pixel, corrisponde al pixel dello schermo. Questa non è raccomandata perché ogni device potrebbe avere un numero di pixel per inch diverso.
  • mm: millimeters, basato sulla dimensione fisica dello schermo
  • in: Inches basato sulla dimensione fisica dello schermo

Le dimensioni hanno il seguente formato:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="dimension_name">dimension</dimen>
</resources>

4) strings.xml: contiene stringhe che possono essere referenziate all'interno dell'applicazione
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="string_name">text_string</string>
</resources>

5) styles.xml: definisce gli stili dell'applicazione
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="style_name" parent="@[package:]style/style_to_inherit">
<item name="[package:]style_property_name">style_value</item>
</style>
</resources>

Accedere alle risorse

Una volta definite le risorse è possibile referenziarle nel progetto utilizzano il resource ID che viene generato in fase di compilazione e messo nel file R.java.

Quest'ultima conterrà tutti i resouce ID delle risorse che i trovano sotto la cartella res. Per ogni tipo di risorsa vi è una sottoclasse da cui si accede all'id, per esempio nel progetto HelloWorld troviamo R.layout.activity_main che rappresenta il resource ID per recuperare il layout.
Possiamo dire che ci sono due modi per accedere alle risorse:

  • dal codice: come abbiamo visto sopra R.string.hello
  • dall'interno dell'xml: @string/hello

Esempio di caricamento di un layout dal codice:
setContentView(R.layout.activity_main);

Esempio di caricamento di una stringa da xml:

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />

Localizzazione

Come sappiamo Android gira su telefoni in più nazioni e quindi aventi lingue diverse. Per poter adattare a piu lingue la nostra applicazione basta creare delle cartelle con un qualifier adatto (it, en, fr….). Per esempio se vogliamo adattare tutte le stringhe sia per la lingua italiana che per quella inglese possiamo creare la cartella values-en al cui interno andremo a mettere il file string.xml con le definizioni scritte in lingua inglese. Potremmo creare anche una cartella values-it e mettere un file string.xml con le definizioni in italiano.
E' da notare che se il Sistema Operativo non trova il qualifier per cui è settata la lingua del telefono, considera la cartella di default values, quindi nel caso precedente nella cartella values possiamo mettere la lingua che vogliamo appaia di default (inglese) e creare solamente la cartella values-it. Cosi se un dispositivo in lingua francese usa l'applicazione vedrà tutti i testi in lingua inglese.
Di seguito un esempio per aggiungere la lingua italiana e impostare la lingua inglese di default su dispositivi con lingue diverse:

Cliccare con il tasto destro sulla cartella "res" e scegliere new-->folder
Inserire values-it in Folder name e premere Finish
Cliccare con il pulsante destro del mouse sulla cartella appena creata e scegliere new-->Android XML file

  1. Cliccare con il tasto destro sulla cartella "res" e scegliere new-->folder
  2. Inserire values-it in Folder name e premere Finish
  3. Cliccare con il pulsante destro del mouse sulla cartella appena creata e scegliere new-->Android XML file
  1. Impostare a Value la voce Resource Type e inserire strings alla voce File:
  1. Premere su Next
  1. Premere su Finish

Nota: notare come nella sezione Chosen Qualifier venga in automatico impostata la lingua it.
In questo modo avremo per ogni cartella values-(qualifier) un file strings che dovrà contenere tutti gli elementi tradotti nelle lingua corrispondente.

La prima puntata si conclude qui

Nel prossimo articolo vedremo quali sono le caratteristiche di un’ Activity e come questa venga gestita dal sistema operativo. Vedremo inoltre l’utilizzo del Manifest con le descrizioni dei vari tag.

Stay tuned.

 

Quello che hai appena letto è un Articolo Premium reso disponibile affinché potessi valutare la qualità dei nostri contenuti!

 

Gli Articoli Tecnici Premium sono infatti riservati agli abbonati e vengono raccolti mensilmente nella nostra rivista digitale EOS-Book in PDF, ePub e mobi.
volantino eos-book1
Vorresti accedere a tutti gli altri Articoli Premium e fare il download degli EOS-Book? Allora valuta la possibilità di sottoscrivere un abbonamento a partire da € 2,95!
Scopri di più

11 Comments

  1. Emanuele Emanuele 29 ottobre 2013
  2. Piero Boccadoro Piero Boccadoro 30 ottobre 2013
  3. adrirobot 31 ottobre 2013
  4. stefano varano 1 novembre 2013
  5. goffredoferrarese89 2 novembre 2013
  6. Emanuele Emanuele 2 novembre 2013
  7. Luca Di Capita 2 novembre 2013
  8. Tiziano.Pigliacelli Tiziano.Pigliacelli 5 novembre 2013
  9. FabrizioG 8 novembre 2013
  10. FabrizioG 8 novembre 2013
  11. paolo.barbuti 21 novembre 2013

Leave a Reply

Raspberry Pi 3 GRATIS! (Win10 compatibile)

Fai un abbonamento Platinum (EOS-Book + Firmware), ricevi in OMAGGIO la RASPBERRY 3, inviaci il tuo progetto e OTTIENI IL RIMBORSO