WhyMCA12 - Android Tools e la gestione di progetti complessi
1. ANDROID TOOLS
COSA SONO E COSA POSSONO FARE
COSA C’E’ DI NUOVO NELLE ULTIME VERSIONI
COME GESTIRE PROGETTI COMPLESSI
Marco Gasparetto (@marcogasparetto)
Superpartes Innovation Campus
2. INDICE
• Panoramica sul contenuto degli SDK Tools.
• Riepilogo delle principali funzionalità.
• Svolgimento di due progetti di esempio ed
esecuzione di alcuni tools.
• Novità delle ultime versioni.
3. ANDROID TOOLS
Permettono a noi sviluppatori di creare applicazioni per
smartphone e tablet Android.
piattaforma workflow
host
workstations workstations Android Tools Android Tools
Windows Linux + +
Java SDK Java SDK
workstations + +
MacOS X Ant Eclipse IDE
+
Text editor
4. COSA SONO I TOOLS
Android Tools sono l’insieme di strumenti offerti agli
sviluppatori.
SDK Tools SDK Platform Tools NDK Tools
Platform 1.6 (API 4) SDK Add-on Android Support
Platform 8 (API 2.2) SDK Add-on Google AdMob Ads SDK
Platform 2.3.3 (API 10) SDK Add-on Google Analytics SDK
Platform 4.0.3 (API 15) SDK Add-on Google Market Billing
SDK Add-on Intel HAXM
Platform ...
SDK Add-on ...
ADT Plugin for Eclipse
5. COSA SONO I TOOLS
SDK Platforms sono le differenti versioni di Android
SDK Platform
Documentation for Android SDK
Platform
Sources for Android SDK
Samples for SDK
Extras (Google APIs, Samsung Images,
System Images (ARM, Intel x86, ...) Motorola Images, LG Images, Intel
Atom x86 Images)
6. COSA SONO I TOOLS
Installazione e manutenzione
Installazione
http://developer.android.com/sdk/index.html
Manutenzione (Android SDK Manager)
[SDK_PATH]$ ./tools/android
Sito ufficiale (preview, changelog, roadmap, technical docs)
http://tools.android.com/
7. COSA POSSIAMO FARE CON I
TOOLS
Le tre operazioni di base
1. Creazione di un progetto
Eclipse IDE + ADT plugin
2. Compilazione
Ant + Text Editor
3. Deploy e run
8. COSA POSSIAMO FARE CON I
TOOLS
Creazione di un nuovo progetto
Eclipse: File -> New -> Android Project
$ android create [ project | test-project | lib-project ]
--name Progetto
--target 19
--path ./Progetto
--package it.mycompany.android.apps.myproject
--activity MainActivity
9. COSA POSSIAMO FARE CON I
TOOLS
Compilazione e build di un progetto
Eclipse: Project -> Build Automatically
[Progetto]$ ant all clean [ debug | release ]
10. COSA POSSIAMO FARE CON I
TOOLS
Deploy e run di un’applicazione
Eclipse: Run -> [ Run | Debug ]
[Progetto]$ adb install ./bin/Progetto-debug.apk
oppure
[Progetto]$ ant all clean [ debug | release ] install
11. GESTIRE PROGETTI
COMPLESSI
Progetto di esempio: scenario 1
applicazione
versione versione
LITE PRO
PROBLEMA: Utilizzare i tools per gestire progetti che hanno
dipendenze da librerie e richiedono target multipli.
12. GESTIRE PROGETTI
COMPLESSI
Scenario 1
applicazione LITE applicazione PRO
Contiene codice Contiene codice e
e risorse comuni. risorse PRO.
libreria
Contiene codice e risorse di utilità generale
(classi helper, custom widget, ecc.).
NOTE
Utilizziamo una libreria di utilità interna oltre alle librerie Google ed ai JAR esterni.
Tutti i target devono andare sul market, quindi devono avere package differenti.
13. GESTIRE PROGETTI
COMPLESSI
Scenario 1: problema
1. Eclipse non ha nativamente il concetto di TARGET.
2. Le classi e le risorse PRO non devono essere compilate ed
incluse nel target LITE.
3. Le due app devono essere compilate e impacchettate in
package differenti per poter andare sul market.
Come si può risolvere ?
14. GESTIRE PROGETTI
COMPLESSI
Scenario 1: possibili soluzioni
1. 2.
Utilizziamo uno script esterno (es. Trasformiamo il progetto in una
python) che effettua operazioni sui libreria che poi viene inclusa ed
file ed include o esclude utilizzata da progetti wrapper. Ogni
determinate classi e risorse, ed wrapper è un target che che ha il
effettua operazioni di rinomina dei proprio package e contiene le
package. proprie classi e risorse.
15. GESTIRE PROGETTI
COMPLESSI
Scenario 1: soluzione
applicazione
PRO
app project
libreria applicazione Contiene codice e
library project library project risorse PRO.
Contiene codice e Contiene codice
risorse di utilità generale. e risorse comuni. applicazione
LITE
app project
E’ possibile dalla versione 17 (03/2012) degli SDK Tools.
• dependency management improvements (R.java merge)
• added support for custom views with custom attributes
24. ECLIPSE TIME
Le risorse delle librerie sono accessibili alle
applicazioni.
Le applicazioni possono sovrascrivere le risorse.
Es. Schermata di About e stringa app_name.
26. ECLIPSE TIME
Nella classe Application di ogni progetto posso
configurare una variabile globale Target.
Discriminando su questa posso ramificare il codice.
Posso caricare classi in maniera dinamica utilizzando il
Class Loader.
30. ECLIPSE TIME
Anche gli attributi XML custom definiti nelle librerie
sono visibili alle applicazioni. Il package viene risolto
automaticamente.
36. COSA POSSIAMO FARE CON I
TOOLS
adb (Android Debug Bridge)
CLIENT SERVER DAEMON
(developer machine) (developer machine) (devices e AVD)
• adb command line
• DDMS
• ADT
porta TCP 5037 porte TCP da 5555 a 5585
38. COSA POSSIAMO FARE CON I
TOOLS
adb (Android Debug Bridge)
$ adb shell dumpsys meminfo org.whymca.apppro
40. COSA POSSIAMO FARE CON I
TOOLS
adb (Android Debug Bridge)
Usciamo e rientriamo varie volte nell’applicazione WhyMCA PRO
42. COSA POSSIAMO FARE CON I
TOOLS
adb (Android Debug Bridge)
Che succede ???
http://developer.android.com/reference
http://stackoverflow.com
http://code.google.com/p/android/issues
...
http://code.google.com/p/android/issues/detail?id=9904
Typeface.createFromAsset leaks asset stream
46. COSA POSSIAMO FARE CON I
TOOLS
Monkey
$ adb shell monkey -s 14 -p org.whymca.apppro -v --throttle 100 500
47. GESTIRE PROGETTI
COMPLESSI
Progetto di esempio: scenario 2
applicazione
versione per versione per
customer 1 customer 3
versione per
customer 2
PROBLEMA: Utilizzare i tools per gestire progetti che hanno
dipendenze da librerie e richiedono target multipli.
48. GESTIRE PROGETTI
COMPLESSI
Scenario 2: problema
1. Eclipse non ha nativamente il concetto di TARGET.
2. Le classi e le risorse proprietarie di un customer non devono
essere compilate ed incluse negli altri target.
3. Le due app devono essere compilate e impacchettate in
package differenti per poter andare sul market.
49. GESTIRE PROGETTI
COMPLESSI
Scenario 2: soluzione
app customer 1
app project
Contiene codice e
libreria applicazione risorse del customer 1.
library project
library project
Contiene tutto il codice e
Contiene codice e
le risorse comuni più dei
risorse di utilità generale.
placeholders. app customer 2
...
app customer 3
...
57. ECLIPSE TIME
Le risorse delle librerie sono accessibili alle
applicazioni.
Le applicazioni possono sovrascrivere le risorse.
Es. Immagine del logo, stringa app_name, layout della
funzione PRO per Nike.
61. COSA POSSIAMO FARE CON I
TOOLS
Hierarchy Viewer
$ hierarchyviewer
Permette di trovare problemi e ottimizzare la User
Interface dell’applicazione.
• Layout View
• Pixel Perfect View
65. COSA POSSIAMO FARE CON I
TOOLS
Seguire le “best practices”: LINT
LINT
Effettua una analisi statica del codice e delle risorse.
• Missing and unused translations
• Layout performance problems
• Unused resources
• Inconsistent array sizes
• Accessibility and internationalization problems
• Icon problems (like missing densities, duplicate icons, wrong sizes, etc)
• Usability problems (like not specifying an input type on a text field)
• Manifest errors
68. COSA POSSIAMO FARE CON I
TOOLS
Preparare un progetto per Ant
CREAZIONE DEI FILE DI BUILD
[Progetto]$ android update project --path .
69. COSA POSSIAMO FARE CON I
TOOLS
Contenuto di un nuovo progetto
$ ls ./Progetto ant.properties
Permette di sovrascrivere i default di Ant, es.
directory sorgenti o output, chiave per firma
AndroidManifest.xml release.
ant.properties
local.properties
bin Generato automaticamente, non deve andare
build.xml nel VCS, contiene le impostazioni dell’utente.
libs project.properties
local.properties Generato automaticamente, contiene le
proguard-project.txt impostazioni del progetto (target, libs, proguard,
ecc.).
project.properties
res proguard-project.txt
Permette di sovrascrivere i default di Proguard.
src
70. COSA POSSIAMO FARE CON I
TOOLS
Analisi della build di un progetto
1.setup
1. creazione dirs
2. risoluzione dipendenze
3. lettura manifest ed eventuali warnings
4. ...
2. clean
3. build-setup
1. build dipendenze
4. code-gen (AIDL, renderscript, resources, ...)
5. compile
6. obfuscate (esecuzione proguard) *
7. dex (conversione bytecode)
8. crunch (compressione risorse)
9. package
10. sign *
74. COSA POSSIAMO FARE CON I
TOOLS
Esecuzione della build
[Progetto]$ ant all clean release
75. COSA POSSIAMO FARE CON I
TOOLS
Altri servizi di dumpsys
$ adb shell dumpsys <nome servizio>
es. alarm (timers), battery, connectivity, content (sync e account),
location, media.camera, power, sensorservice
$ adb shell dumpsys activity (tasks e activity)
$ adb shell dumpsys meminfo PID | <package name> (memoria)
$ adb shell dumpsys package <package name> (informazioni sul
package)
81. STRUMENTI ESTERNI
FindBugs™ - Find Bugs in Java Programs
http://findbugs.sourceforge.net/
Utilizza l’analisi statica per cercare errori nel codice Java.
83. STRUMENTI ESTERNI
Memory Analyzer (MAT)
http://www.eclipse.org/mat/
E’ un analizzatore del Java heap che aiuta a trovare memory leaks ed
a ridurre il consumo di memoria.
85. NOVITÀ DELLE ULTIME
12 07/2011
VERSIONI
17 03/2012
• x86 support for emulator and AVD • live detailed network usage in DDMS
• dependency management improvements
13 09/2011 • LINT improvements
• bugfix • ProGuard updated to 4.7
• added multitouch, hw accelerated
graphics rendering to emulator
14 10/2011
• added debug build constant
• improved build system • added support for custom views with
• new logcat view in DDMS custom attributes
• asset studio integration
• camera emulation via webcam
18 e 19 04/2012
15 10/2011 • bugfix
• bugfix
20 ?/2012
16 12/2011 • ADT improved layout editor
• ADT new property sheet
• new LINT tool • ...
• sensor emulation