1. MOBILE APPS con ANDROIDMOBILE APPS con ANDROID
Wor kshops 2014Wor kshops 2014
MESSINAMESSINA –– Libreria Colapesce, viaLibreria Colapesce, via - 12- 12/07/2014/07/2014
2. LUIGI DE FRANCESCOLUIGI DE FRANCESCO
Studente in Ingegneria Informatica e delle Telecomunicazioni D.M.Studente in Ingegneria Informatica e delle Telecomunicazioni D.M.
509.509.
Lavoratore presso Negg S.r.l. Come sviluppatore Desktop in Qt eLavoratore presso Negg S.r.l. Come sviluppatore Desktop in Qt e
Mobile Android.Mobile Android.
Da sempre appassionato di Informatica. All'attivo le mie conoscenzeDa sempre appassionato di Informatica. All'attivo le mie conoscenze
sui linguaggio annoverano:sui linguaggio annoverano:
Qt, Java, Android, XML, JSON, Javascript, jQuery, MySQL, HTML5,Qt, Java, Android, XML, JSON, Javascript, jQuery, MySQL, HTML5,
CSS3, C, C++CSS3, C, C++
3. LUIGI DE FRANCESCOLUIGI DE FRANCESCO
https://twitter.com/tux_prohttps://twitter.com/tux_pro
https://it.linkedin.com/in/luigi.defrancescohttps://it.linkedin.com/in/luigi.defrancesco
https://twitter.com/tux_prohttps://twitter.com/tux_pro
luigi.defrancesco89@gmail.comluigi.defrancesco89@gmail.com
4. Sviluppare un App AndroidSviluppare un App Android
Per sviluppare Applicazioni Mobile Android, occorre conoscerePer sviluppare Applicazioni Mobile Android, occorre conoscere
/avere:/avere:
Java ( nello specifico bisogna sapere come gestire iJava ( nello specifico bisogna sapere come gestire i
vettori di dati, come gestire le classi, come funzionano ivettori di dati, come gestire le classi, come funzionano i
linguaggi orientati agli oggetti, come funzionano e cosalinguaggi orientati agli oggetti, come funzionano e cosa
sono i thread )sono i thread )
XML ( per gestire al meglio le GUI )XML ( per gestire al meglio le GUI )
Concetti base sul framework Android ( Per capire come farConcetti base sul framework Android ( Per capire come far
interagire al meglio l'utente finale con l'app )interagire al meglio l'utente finale con l'app )
Un ambiente di sviluppo come ECLIPSE + SDK Android,Un ambiente di sviluppo come ECLIPSE + SDK Android,
Android Studio, ecc...Android Studio, ecc...
Tanta PAZIENZA!!Tanta PAZIENZA!!
5. Testare un App AndroidTestare un App Android
Una volta realizzata la nostra App, è indispensabile provarla.Una volta realizzata la nostra App, è indispensabile provarla.
Le modalità di debug (individuazione di errori e test diLe modalità di debug (individuazione di errori e test di
funzionalità dell'app ) sono due:funzionalità dell'app ) sono due:
AVD ( Android Virtual Device ) è un dispositivo virtuale che può essereAVD ( Android Virtual Device ) è un dispositivo virtuale che può essere
creato dall'SDK Android che possiamo scaricare dal sito, e checreato dall'SDK Android che possiamo scaricare dal sito, e che
provvedere a dare a chi non ha un cellulare/tablet android, di poterloprovvedere a dare a chi non ha un cellulare/tablet android, di poterlo
emulare sul proprio computer. Svantaggi? Lentezza, Funzionalità, è unemulare sul proprio computer. Svantaggi? Lentezza, Funzionalità, è un
dispositivo Virtuale che però non virtualizza i problemi dei dispositividispositivo Virtuale che però non virtualizza i problemi dei dispositivi
reali.reali.
Device Android Fisico: in questa modalità basta abilitareDevice Android Fisico: in questa modalità basta abilitare
la modalità debug sul telefonino (Impostazioni->Opzionila modalità debug sul telefonino (Impostazioni->Opzioni
Sviluppatore->Debug USB), e collegare il dispositivoSviluppatore->Debug USB), e collegare il dispositivo
fisico al PC. Eclipse si accorgerà del device androidfisico al PC. Eclipse si accorgerà del device android
collegato ed installare l'app sul telefonino.collegato ed installare l'app sul telefonino.
6. Individuare iBugIndividuare iBug
Una volta installata ed avviata l'app sul dispositivo, èUna volta installata ed avviata l'app sul dispositivo, è
scientificamente comprovato che, a seconda del grado di complessitàscientificamente comprovato che, a seconda del grado di complessità
dell'app, si possano avere uno o più crash.dell'app, si possano avere uno o più crash.
Utilizzando lo strumento LogCat di Eclipse ( aggiunto grazieUtilizzando lo strumento LogCat di Eclipse ( aggiunto grazie
all'SDK Android ), è possibile vedere chi ha generato l'errore edall'SDK Android ), è possibile vedere chi ha generato l'errore ed
il perchè è avvenuto.il perchè è avvenuto.
In pratica ci dirà in quale file java ed a quale riga è presente ilIn pratica ci dirà in quale file java ed a quale riga è presente il
bug, ed il tipo di errore. Uno dei più comuni è ilbug, ed il tipo di errore. Uno dei più comuni è il
NullPointerException.NullPointerException.
7. Hello Android !Hello Android !
Come ogni linguaggio che si rispetti, cominciamo a scrivere un appCome ogni linguaggio che si rispetti, cominciamo a scrivere un app
che in una label scriva: Hello Android!che in una label scriva: Hello Android!
Per farlo, tramite il tool di disegno messo a disposizione daPer farlo, tramite il tool di disegno messo a disposizione da
Eclipse e dal plugin dell'SDK Android, trasciniamo una TextViewEclipse e dal plugin dell'SDK Android, trasciniamo una TextView
dentro la finestra di Layout. Una volta fatto, andiamo nel codicedentro la finestra di Layout. Una volta fatto, andiamo nel codice
MainActivity.java, e scriviamoMainActivity.java, e scriviamo
TextView testo = (TextView) findViewById(R.id.textView1);TextView testo = (TextView) findViewById(R.id.textView1);
testo.setText(“Hello Android!”);testo.setText(“Hello Android!”);
Segue un Esempio Live.Segue un Esempio Live.
8. Costruire una GUI – LayoutCostruire una GUI – Layout
Nell'atto di costruire una GUI, è indispensabile conoscere iNell'atto di costruire una GUI, è indispensabile conoscere i
Layout.Layout.
I Layout sono degli strumenti che consentono allo sviluppatoreI Layout sono degli strumenti che consentono allo sviluppatore
l'impostazione grafica di una interfaccia. I principali sono:l'impostazione grafica di una interfaccia. I principali sono:
RelativeLayout: ovvero i widget da inserire sono posizionati in modoRelativeLayout: ovvero i widget da inserire sono posizionati in modo
relativo, questo significa che non cambiano dinamicamente in base allarelativo, questo significa che non cambiano dinamicamente in base alla
schermata, ma hanno una posizione fissa scelta da noi.schermata, ma hanno una posizione fissa scelta da noi.
LinearLayout: è un layout lineare, ovvero le posizioni deiLinearLayout: è un layout lineare, ovvero le posizioni dei
widget si auto-riadattano in base alla dimensione dellawidget si auto-riadattano in base alla dimensione della
schermata, in modo da prendere tutto lo spazio possibile.schermata, in modo da prendere tutto lo spazio possibile.
Questi Layout a loro volta si suddividono in Horizontal eQuesti Layout a loro volta si suddividono in Horizontal e
Vertical in base all'orientamento scelto.Vertical in base all'orientamento scelto.
GridLayout: come dice la parola stessa, si tratta di unGridLayout: come dice la parola stessa, si tratta di un
Layout a Griglia, dove i widget vengono posizionati aLayout a Griglia, dove i widget vengono posizionati a
matrice, di dimensione variabile in base alle esigenze.matrice, di dimensione variabile in base alle esigenze.
9. Activity ed Intent – Parte 1Activity ed Intent – Parte 1
Qualunque app nello store possiede una o più GUI (finestre) che mostrano, aQualunque app nello store possiede una o più GUI (finestre) che mostrano, a
seconda delle esigenze dell'utente, diverse informazioni.seconda delle esigenze dell'utente, diverse informazioni.
Queste GUI vengono chiamate Activity, ed ognuna di loro è linkata ad una classe cheQueste GUI vengono chiamate Activity, ed ognuna di loro è linkata ad una classe che
estende la classe Activity.estende la classe Activity.
Quando si crea un nuovo progetto, Eclipse aggiunge sempre una Activity cheQuando si crea un nuovo progetto, Eclipse aggiunge sempre una Activity che
chiama MainActivity, l'activity che l'app avvierà per prima.chiama MainActivity, l'activity che l'app avvierà per prima.
Un'Activity viene creata direttamente da Eclipse seguendo i comandi: New->Others-Un'Activity viene creata direttamente da Eclipse seguendo i comandi: New->Others-
>Android->Android Activity, nei menù a seguire ci saranno tutte le opzioni per>Android->Android Activity, nei menù a seguire ci saranno tutte le opzioni per
configurare al meglio l'activity che vi serve.configurare al meglio l'activity che vi serve.
Una volta creata, la classe si presenterà così:Una volta creata, la classe si presenterà così:
Public class MiaActivity extends Activity{Public class MiaActivity extends Activity{
La parola extends, significa che estende la classe Activity, ovvero che ne eredita iLa parola extends, significa che estende la classe Activity, ovvero che ne eredita i
metodi, ed ha il permesso di sovrascriverli.metodi, ed ha il permesso di sovrascriverli.
10. Activity ed Intent – Parte 2Activity ed Intent – Parte 2
Il metodo più importante da sovrascrivere è il metodo OnCreate che si presenta diIl metodo più importante da sovrascrivere è il metodo OnCreate che si presenta di
solito in questo modo:solito in questo modo:
@Override@Override
protected void onCreate(Bundle savedInstanceState) {protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mia);setContentView(R.layout.activity_mia);
}}
Il comando setContentView, collega la classe ad una GUI che abbiamo creato per laIl comando setContentView, collega la classe ad una GUI che abbiamo creato per la
visualizzazione. Da qui si capisce che tutto il codice che deve comandare levisualizzazione. Da qui si capisce che tutto il codice che deve comandare le
interfacce grafiche deve stare all'interno di questo metodo.interfacce grafiche deve stare all'interno di questo metodo.
Una volta descritto come creare una Activity, è giunto il momento di capire comeUna volta descritto come creare una Activity, è giunto il momento di capire come
avviarla dalla MainActivity.avviarla dalla MainActivity.
11. Activity ed Intent – Parte 3Activity ed Intent – Parte 3
Supponiamo di avere due Activity:Supponiamo di avere due Activity: MainActivityMainActivity ee MiaActivity, dove laMiaActivity, dove la
prima deve avviare la seconda. Andiamo nel metodo OnCreate di MainActivity eprima deve avviare la seconda. Andiamo nel metodo OnCreate di MainActivity e
scriviamo:scriviamo:
@Override@Override
protected void onCreate(Bundle savedInstanceState) {protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mia);setContentView(R.layout.activity_mia);
Intent miaactivity = new Intent(this, MiaActivity.class);Intent miaactivity = new Intent(this, MiaActivity.class);
startActivity(miaactivity);startActivity(miaactivity);
}}
Il codice che abbiamo visto avvia MiaActivity, per cui un Activity può richiamareIl codice che abbiamo visto avvia MiaActivity, per cui un Activity può richiamare
un'altra Activity, generando così uno Stack (Pila) che conterrà l'ordine di avvio delleun'altra Activity, generando così uno Stack (Pila) che conterrà l'ordine di avvio delle
Activity. L'ordine serve per quando si preme il tasto “BACK” sul telefonino, perActivity. L'ordine serve per quando si preme il tasto “BACK” sul telefonino, per
“tornare indietro” in modo ordinato, tra le activity che sono state avviate.“tornare indietro” in modo ordinato, tra le activity che sono state avviate.
12. EventiEventi
Se volessimo avviare MiaActivity solo in base all'avvenimento di un “evento”,Se volessimo avviare MiaActivity solo in base all'avvenimento di un “evento”,
avremmo l'opportunità di visualizzare dati anche su MainActivity.avremmo l'opportunità di visualizzare dati anche su MainActivity.
Per esempio MiaActivity potrebbe essere avviata dal click dell'utente su di unPer esempio MiaActivity potrebbe essere avviata dal click dell'utente su di un
pulsante ( Button ) in tal caso, dopo aver creato la GUI, basta scrivere nel metodopulsante ( Button ) in tal caso, dopo aver creato la GUI, basta scrivere nel metodo
OnCreate:OnCreate:
Button btn = (Button) findViewById(R.id.Button1);Button btn = (Button) findViewById(R.id.Button1);
Btn.setOnClickListener(new OnClickListener(){Btn.setOnClickListener(new OnClickListener(){
@Override@Override
public void onClick(View v){public void onClick(View v){
Intent miaactivity = new Intent(this, MiaActivity.class);Intent miaactivity = new Intent(this, MiaActivity.class);
startActivity(miaactivity);startActivity(miaactivity);
}}
});});
13. Passaggio di Parametri tra Activity - IntentPassaggio di Parametri tra Activity - Intent
Essendo che una Activity è una classe, è possibile passare dei parametri tra unaEssendo che una Activity è una classe, è possibile passare dei parametri tra una
classe ed un altra. I metodi per trasferire dati sono due, una sfrutta gli intent, e l'altraclasse ed un altra. I metodi per trasferire dati sono due, una sfrutta gli intent, e l'altra
sfrutta una delle proprietà delle classi.sfrutta una delle proprietà delle classi.
INTENTINTENT
Per trasferire dati da una Activity ad un altra basta scrivere il seguente codice:Per trasferire dati da una Activity ad un altra basta scrivere il seguente codice:
Intent miaActivity = new Intent(this, MiaActivity.class);Intent miaActivity = new Intent(this, MiaActivity.class);
miaActivity.putStringExtra(“valore1”, “ciao”);miaActivity.putStringExtra(“valore1”, “ciao”);
startActivity(miaActivity);startActivity(miaActivity);
Nel metodo onCreate di MiaAcitivity possiamo leggere il valore di cui sopra cosìNel metodo onCreate di MiaAcitivity possiamo leggere il valore di cui sopra così
String valore1 = getIntent().getStringExtra(“valore1”);String valore1 = getIntent().getStringExtra(“valore1”);
In questo modo si possono passare facilmente i valori da una Activity ad un altra.In questo modo si possono passare facilmente i valori da una Activity ad un altra.
14. Passaggio di Parametri tra Activity - ClassiPassaggio di Parametri tra Activity - Classi
Il metodo che sfrutta le proprietà delle classi, è un metodo sviluppato da me perIl metodo che sfrutta le proprietà delle classi, è un metodo sviluppato da me per
aumentare la stabilità delle app, sfrutta i principi di visibilità publica dei metodi delleaumentare la stabilità delle app, sfrutta i principi di visibilità publica dei metodi delle
classi. In pratica consiste nel creare un metodo GET (che chiameremo getValore() ) ilclassi. In pratica consiste nel creare un metodo GET (che chiameremo getValore() ) il
quale restituisca la variabile di nostro interesse, per poi riprenderlo nell'activityquale restituisca la variabile di nostro interesse, per poi riprenderlo nell'activity
MiaActivity. Un esempio pratico:MiaActivity. Un esempio pratico:
- MainActivity- MainActivity
Si dichiare globalmente la variabileSi dichiare globalmente la variabile
public static String valore1;public static String valore1;
Nel metodo del button, al posto del putStringExtra si scriveNel metodo del button, al posto del putStringExtra si scrive
valore1 = “ciao”;valore1 = “ciao”;
- MiaActivity- MiaActivity
String valoreLetto = MainActivity.getValore();String valoreLetto = MainActivity.getValore();
15. ManifestManifest
Il file Manifest, da non sottovalutare, è il manifesto dell'app. In esso sono presenti:Il file Manifest, da non sottovalutare, è il manifesto dell'app. In esso sono presenti:
-- Impostazioni delle versioni di Android dove l'app può essere installataImpostazioni delle versioni di Android dove l'app può essere installata
-- Impostazione dello style dell'appImpostazione dello style dell'app
-- Lista permessi che l'app android può avereLista permessi che l'app android può avere
-- Lista delle Activity presenti e loro interazioneLista delle Activity presenti e loro interazione
-- Impostazione Activity di avvioImpostazione Activity di avvio
-- Impostazione dell'orientamento dell'app ( Potrait – Landscape )Impostazione dell'orientamento dell'app ( Potrait – Landscape )
Per chiarire meglio la questione dei permessi. Le app, per obbligo di privacy siaPer chiarire meglio la questione dei permessi. Le app, per obbligo di privacy sia
dell'utente che dello sviluppatore, descrive esattamente ciò che andrà a fare. Peròdell'utente che dello sviluppatore, descrive esattamente ciò che andrà a fare. Però
per le funzioni relative alla gestione dei dati utenti e delle periferiche, l'app ha bisonoper le funzioni relative alla gestione dei dati utenti e delle periferiche, l'app ha bisono
di essere abilitata alla gestione. Per farlo richiede dei permessi che il sistemadi essere abilitata alla gestione. Per farlo richiede dei permessi che il sistema
operativo mette a disposizione per le app.operativo mette a disposizione per le app.
In questo modo l'accesso ai dati è controllato, per cui se qualche App conIn questo modo l'accesso ai dati è controllato, per cui se qualche App con
descrizione fatiscente, dice che può accedere ai vostri dati, state attenti, perchèdescrizione fatiscente, dice che può accedere ai vostri dati, state attenti, perchè
potrebbe rubarvi tutte le vostre foto, messaggi, ecc....potrebbe rubarvi tutte le vostre foto, messaggi, ecc....
16. Ottenere dati da ServerOttenere dati da Server
Nelle varie commissioni che si potrebbero ottenere, circa il 98% necessita di unaNelle varie commissioni che si potrebbero ottenere, circa il 98% necessita di una
connessione al server del committente per poter fare il retrieve dei dati daconnessione al server del committente per poter fare il retrieve dei dati da
visualizzare nell'app e per impostare delle azioni lato server.visualizzare nell'app e per impostare delle azioni lato server.
Android impedisce nel MainThread ( chiamato UiThread ) di poter effettuareAndroid impedisce nel MainThread ( chiamato UiThread ) di poter effettuare
connessioni o richieste Http. Per ovviare a questo problema, si utilizzano i Threadconnessioni o richieste Http. Per ovviare a questo problema, si utilizzano i Thread
oppure gli AsyncTask.oppure gli AsyncTask.
Però qui giunge un nuovo problema, ovvero che Android impedisce ai thread diPerò qui giunge un nuovo problema, ovvero che Android impedisce ai thread di
poter gestire direttamente gli elementi grafici, per poterlo fare bisogna utilizzare inpoter gestire direttamente gli elementi grafici, per poterlo fare bisogna utilizzare in
modo efficare un metodo ( all'interno del thread ) chiamato runOnUiThread chemodo efficare un metodo ( all'interno del thread ) chiamato runOnUiThread che
spesso porta a problematiche maggiori.spesso porta a problematiche maggiori.
Il mio consiglio è quello di utilizzare gli AsyncTask.Il mio consiglio è quello di utilizzare gli AsyncTask.
17. Ottenere dati da Server - AsyncTaskOttenere dati da Server - AsyncTask
Consiglio gli AsyncTask perchè da una sola classe è possibile gestire sia il thread inConsiglio gli AsyncTask perchè da una sola classe è possibile gestire sia il thread in
background, che gli elementi grafici, infatti la classe si definisce così:background, che gli elementi grafici, infatti la classe si definisce così:
private class LongOperation extends AsyncTask<String, Void, String> {private class LongOperation extends AsyncTask<String, Void, String> {
@Override@Override
protected String doInBackground(String... params) {protected String doInBackground(String... params) {
// codice per la connessione http// codice per la connessione http
return null;return null;
}}
@Override@Override
protected void onPostExecute(String result) {protected void onPostExecute(String result) {
// Codice per gestire la GUI// Codice per gestire la GUI
}}
18. Ottenere datida Server – XML vs JSONOttenere datida Server – XML vs JSON
Una volta capito come collegarci al server, occorre capire come formattare i dati alUna volta capito come collegarci al server, occorre capire come formattare i dati al
fine di poter leggere correttamente i valori ricevuti e poterli interpretare.fine di poter leggere correttamente i valori ricevuti e poterli interpretare.
I formati di testo utilizzati per dare una semantica ai dati provenienti dal server sonoI formati di testo utilizzati per dare una semantica ai dati provenienti dal server sono
XML e JSON. Di seguito un esempio dei due:XML e JSON. Di seguito un esempio dei due:
<person>
<age>12</age>
<name>Danielle</name>
</person>
{
"age" : 12,
"name" : "Danielle"
}
Qual è meglio usare. Ci sono diverse filosofie, ma è stato generalmente riconosciutoQual è meglio usare. Ci sono diverse filosofie, ma è stato generalmente riconosciuto
come migliore il JSON. I motivi sono molteplici, è maggiormente Human Readable, ecome migliore il JSON. I motivi sono molteplici, è maggiormente Human Readable, e
l'azione di parsing ( retrieve del dato rispetto ad un valore e ad una semantical'azione di parsing ( retrieve del dato rispetto ad un valore e ad una semantica
precisa ) avviene in tempi brevi.precisa ) avviene in tempi brevi.
L'XML è generalmente più complesso da leggere, e per i cellualri, la suaL'XML è generalmente più complesso da leggere, e per i cellualri, la sua
elaborazione resta un po' pesante da gestire da parte del processore.elaborazione resta un po' pesante da gestire da parte del processore.
19. Sviluppare un Progetto - App RubricaSviluppare un Progetto - App Rubrica
L'app che avete ricevuto via email è stata progetta a scopo didattico per farvi capireL'app che avete ricevuto via email è stata progetta a scopo didattico per farvi capire
alcuni concetti.alcuni concetti.
Come si comincia un progetto Android? Innanzitutto la fase iniziale è fondamentale.Come si comincia un progetto Android? Innanzitutto la fase iniziale è fondamentale.
Si parla con la parte committente è si seguono alcuni step:Si parla con la parte committente è si seguono alcuni step:
-- Verso chi è orientata l'appVerso chi è orientata l'app
-- A cosa serve l'appA cosa serve l'app
-- Che tipo di servizi deve offrireChe tipo di servizi deve offrire
-- Su quali disposiviti deve essere installabileSu quali disposiviti deve essere installabile
-- In quanto tempo deve essere sviluppataIn quanto tempo deve essere sviluppata
Una volta dato risposta a queste domande, e ad altre qualora ce ne fossero, siUna volta dato risposta a queste domande, e ad altre qualora ce ne fossero, si
stipula, con la parte committente, un allegato tecnico al quale entrambi le parti sistipula, con la parte committente, un allegato tecnico al quale entrambi le parti si
devono attenere. Niente deve essere fatto né in più né in meno rispetto a quantodevono attenere. Niente deve essere fatto né in più né in meno rispetto a quanto
scritto nell'allegato Tecnico.scritto nell'allegato Tecnico.
20. Sviluppare un Progetto - App RubricaSviluppare un Progetto - App Rubrica
Una volta ottenute le risposte e firmato l'allegato tecnico, si COMINCIA!Una volta ottenute le risposte e firmato l'allegato tecnico, si COMINCIA!
Prendiamo carta e penna e cominciare a buttare giù delle idee sul come gestire ePrendiamo carta e penna e cominciare a buttare giù delle idee sul come gestire e
sviluppare l'app.sviluppare l'app.
La cosa migliore è utilizzare il concetto e la fisolofia di lavoro dell' FTD ( First TimeLa cosa migliore è utilizzare il concetto e la fisolofia di lavoro dell' FTD ( First Time
Development ). Ovvero cercare di suddividere l'app in piccoli problemi, ed una voltaDevelopment ). Ovvero cercare di suddividere l'app in piccoli problemi, ed una volta
individuati creare delle micro-app, che li risolvono poco alla volta. L'unione di questiindividuati creare delle micro-app, che li risolvono poco alla volta. L'unione di questi
problemi creare l'app stabile che poi verrà pubblicata.problemi creare l'app stabile che poi verrà pubblicata.
La fisolofia dell' FTD prende spunto dal concetto di DIVIDE ET IMPERA, ovvero,La fisolofia dell' FTD prende spunto dal concetto di DIVIDE ET IMPERA, ovvero,
dividi ed elaborare, suddividere l'app in micro-app al fine di roslvere tutti i problemidividi ed elaborare, suddividere l'app in micro-app al fine di roslvere tutti i problemi
subito, prevenendo così la generazione di errori la cui individuazione porrebbe deisubito, prevenendo così la generazione di errori la cui individuazione porrebbe dei
problemi.problemi.
Analizziamo l'appAnalizziamo l'app
21. Sviluppare un Progetto - ConsigliSviluppare un Progetto - Consigli
Nello sviluppare applicazioni, sicuramente non si è esenti dall'avere problemi.Nello sviluppare applicazioni, sicuramente non si è esenti dall'avere problemi.
A cominciare da Eclipse a finire con i propri dispositivi, c'è da diventare matti, peròA cominciare da Eclipse a finire con i propri dispositivi, c'è da diventare matti, però
mantendo la calma ed utilizzando il guru di tutto.... Google ….i problemi possonomantendo la calma ed utilizzando il guru di tutto.... Google ….i problemi possono
sempre essere risolti.sempre essere risolti.
Spesso però ci si trova ad errori o bug che sembrano davvero assurdi, diSpesso però ci si trova ad errori o bug che sembrano davvero assurdi, di
conseguenza la nostra reazione a questi erroriconseguenza la nostra reazione a questi errori
sarà.........................................................................................................................................sarà.........................................................................................................................................
..................................................................................................................
22. Sviluppare un Progetto - ConsigliSviluppare un Progetto - Consigli
Passato il momento di sconforto, bisogna ricordarsi una famosissima frase di JackPassato il momento di sconforto, bisogna ricordarsi una famosissima frase di Jack
Sparrow:Sparrow:
““Il problema non è il problema, il problema è il tuo atteggiamento nei confronti delIl problema non è il problema, il problema è il tuo atteggiamento nei confronti del
problema, comprendi?”problema, comprendi?”
23. Conclusionie ConsigliConclusionie Consigli
Per concludere ecco un elenco dei siti da utilizzare al fine di reperire tutte le info chePer concludere ecco un elenco dei siti da utilizzare al fine di reperire tutte le info che
servono per realizzare un app:servono per realizzare un app:
-- www.google.comwww.google.com ( manco a dirlo )( manco a dirlo )
-- stackoverflow.comstackoverflow.com
-- www.androidhive.comwww.androidhive.com (quest'ultimo contiene molteplici tutorial che aiutano(quest'ultimo contiene molteplici tutorial che aiutano
da morire i newbie )da morire i newbie )