Your SlideShare is downloading. ×
0
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Non Conventional Android Programming (Italiano)

5,225

Published on

Android è il nuovo sistema operativo open source per dispositivi mobili e realizzato da Google che si è posta la missione di rendere l’internet mobile accessibile a tutti tramite dispositi a basso …

Android è il nuovo sistema operativo open source per dispositivi mobili e realizzato da Google che si è posta la missione di rendere l’internet mobile accessibile a tutti tramite dispositi a basso costo.
Durante questo intervento mostrerò come sia possibile sviluppare per questo sistema operativo (e non solo) senza l’utilizzo di Java e come sia possibile utilizzare una versione light di Spring Framework nelle applicazioni mobili.

Published in: Technology, Education
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
5,225
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
67
Comments
0
Likes
3
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Non-conventional Android Programming
  • 2. Chi sono? Davide Cerbo http://jesty.it http://davide.cerbo.born-to-co.de http://www.linkedin.com/in/davidecerbo [email_address]
  • 3. http://www.pro-netics.it [email_address]
  • 4. Prima bastava
  • 5. Nuove Caratteristiche <ul><li>GPS
  • 6. Bussola
  • 7. Fotocamera
  • 8. Schermi ad alta risoluzione
  • 9. WI-FI
  • 10. UMTS / HSPDA
  • 11. Multi-touch </li></ul>
  • 12. Dove stiamo andando?
  • 13. (Il mercato)
  • 14. Troppi dispositivi
  • 15. Ad ognuno il suo <ul><li>IPhone: Object C
  • 16. Android: Java
  • 17. BlackBerry: Java
  • 18. Nokia/Symbian: Java e C++
  • 19. Windows Mobile: .NET e C </li></ul>
  • 20. Write once, run anywhere Ricorda niente?
  • 21. PhoneGap HTML + JAVASCRIPT + CSS = PhoneGap.com
  • 22. PhoneGap CROSS PLATFORM + INTERFACCIA API NATIVE + OPEN SOURCE = PhoneGap.com
  • 23. Cosa posso fare? ...e a breve: fotocamera, mappe e gestione file
  • 24. Esempi assortiti //LOCALIZZAZIONE GEOGRAFICA var getLocation = function () { var suc = function ( p ){ alert ( p . coords . latitude + &amp;quot; &amp;quot; + p . coords . longitude ); }; var fail = function (){ alert ( &amp;quot;Location not available!&amp;quot; );}; navigator . geolocation . getCurrentPosition ( suc , fail , undefined ); } //VIBRAZIONE navigator . notification . vibrate ( 0 ); //BEEEEEEP navigator . notification . beep ( 2 );
  • 25. Esempi assortiti //ACCELLEROMETRO var watchAccel = function () { var s = function ( a ){ document . getElementById ( &apos;x&apos; ). innerHTML = roundNumber ( a . x ); document . getElementById ( &apos;y&apos; ). innerHTML = roundNumber ( a . y ); document . getElementById ( &apos;z&apos; ). innerHTML = roundNumber ( a . z ); }; var d = function (){}; var opt = {}; opt . frequency = 100 ; Timer = navigator . accelerometer . watchAcceleration ( s , f , opt ); } //FOTOCAMERA navigator . camera . getPicture ( dump_pic , fail , { quality : 50 }); function dump_pic ( data) { ... document . getElementById ( &amp;quot;test&amp;quot; ). src = &amp;quot;data:image/jpeg;base64,&amp;quot; + data ; }
  • 26. Dove è il trucco? PhoneGap mette a disposizione un progetto di partenza per ogni dispositivo supportato. Ogni progetto è una semplice applicazione costituita da un browser web che gira a tutto schermo ed in cui sono state iniettate degli oggetti javascript che corrispondono alle API native del dispositivo. Per ogni dispositivo per cui vogliamo distribuire il nostro applicativo dovremmo copiare i file html, css, javascript e le immagini dentro una cartella del progetto e modificare le configurazioni necessarie, ad esempio il nome del progetto, l&apos;autore, etc.. Nel caso di Android dovremmo copiare i file in: ../my-android/assets/www/
  • 27. Per capirci meglio... ...osserviamo questo pezzo di codice tratto dalla classe DroidGap.java contenuta nel progetto di partenza per Android: private void bindBrowser(WebView appView) { gap = new PhoneGap( this , appView); geo = new GeoBroker(appView, this ); accel = new AccelListener( this , appView); launcher = new CameraLauncher(appView, this ); // This creates the new javascript interfaces for PhoneGap appView.addJavascriptInterface( gap , &amp;quot;DroidGap&amp;quot; ); appView.addJavascriptInterface( geo , &amp;quot;Geo&amp;quot; ); appView.addJavascriptInterface( accel , &amp;quot;Accel&amp;quot; ); appView.addJavascriptInterface( launcher , &amp;quot;GapCam&amp;quot; ); }
  • 28. Perchè Android? <ul><li>Open Source
  • 29. Basato su Linux e Java (Dalvik)
  • 30. Vasta scelta di dispositivi
  • 31. Sistema operativo altamente personalizzabile </li></ul>?
  • 32. Una piccola parentesi su Android 2.0 (Eclair) <ul><li>Gestione di più Google account
  • 33. Supporto per Microsoft Excange Server
  • 34. Pulsanti Home, Menu e Back diventano facoltativi
  • 35. Nuovo browser web con HTML5
  • 36. Migliorata applicazione della fotocamera (flash, zoom digitale, etc...)
  • 37. Messaggi SMS e MMS ricercabili </li></ul>
  • 38. MOTOROLA DROID http://droiddoes.com
  • 39. Ma Spring?
  • 40. SpringME <ul><li>Permette l&apos;utilizzo dell&apos;object configuration tramite XML
  • 41. Non utilizza la reflection, ma la generazione automatica del codice
  • 42. Il pacchetto generato non conterrà librerie supplementari
  • 43. Sviluppato e utilizzato da un Wilfred Springer, ex Software Architect in TomTom
  • 44. Funziona tramite un plugin per Apache MAVEN
  • 45. Nato per J2ME ma utilizzabile anche con GWT e Android </li></ul>
  • 46. SpringME: come funziona? <ul><li>Spring utilizza la reflection per la Dependency Injection Class cl = Class.forName(&amp;quot;Person&amp;quot;); Object instance = cl.newInstance(); Method meth = cl.getDeclaredMethod(&amp;quot;setName&amp;quot;); method.invoke(instance, new Object[] { &amp;quot;Nick Hornby&amp;quot; }); --------------------------------------------------------- ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext(...); BeanFactory factory = (BeanFactory) appContext; Person frank = (Person)factory.getBean(“frank”);
  • 47. SpringME genera automaticamente il codice tramite un plugin per Apache Maven Person instance = new Person(); instance.setName(&amp;quot;Wilfred Springer&amp;quot;); --------------------------------------------------------- BeanFactory factory = new BeanFactory(); Person frank1 = (Person)factory.getBean(“frank”); Person frank2 = factory.getFrank(); </li></ul>
  • 48. Android + Maven <ul><li>Installiamo l&apos;SDK per Android
  • 49. Impostiamo la variabile di ambiente ANDROID_SDK_15
  • 50. Installiamo Android nel nostro repository , es.: mvn install:install-file -DgroupId=android -DartifactId=android -Dversion=1.5_r2 -Dpackaging=jar -Dfile=$ANDROID_SDK_15/platforms/android-1.5/android.jar
  • 51. Creiamo un nuovo progetto, es.: android create project --target 3 --name MavenAndroidExample --path ./maven-android-example --activity MavenAndroidActivity --package it.jesty.mavenandroid.example </li></ul>
  • 52. Android + Maven <ul><li>Creiamo il file pom.xml (lo vediamo nella prossima slide)
  • 53. Facciamo un po&apos; di pulizia: rm -r bin build.xml build.properties libs
  • 54. Creiamo l&apos;emulatore, es.: android create avd --name mavenandroidadv --target 3
  • 55. Eseguiamo l&apos;emulatore, es.: emulator -avd mavenandroidadv
  • 56. mvn install per generare il file .apk
  • 57. Eseguiamo il deploy del file .apk nel dispositivo: mvn com.jayway.maven.plugins.android.generation2:maven-android-plugin:deploy </li></ul>
  • 58. ... &lt;dependencies&gt; &lt;dependency&gt; &lt;groupId&gt; android &lt;/groupId&gt; &lt;artifactId&gt; android &lt;/artifactId&gt; &lt;version&gt; 1.5_r2 &lt;/version&gt; &lt;scope&gt; provided &lt;/scope&gt; &lt;/dependency&gt; &lt;/dependencies&gt; &lt;build&gt; &lt;sourceDirectory&gt; src &lt;/sourceDirectory&gt; &lt;plugins&gt; &lt;plugin&gt; &lt;groupId&gt; com.jayway.maven.plugins.android.generation2 &lt;/groupId&gt; &lt;artifactId&gt; maven-android-plugin &lt;/artifactId&gt; &lt;version&gt; 2.1.0 &lt;/version&gt; &lt;configuration&gt; &lt;sdk&gt; &lt;path&gt; ${env.ANDROID_SDK_15} &lt;/path&gt; &lt;platform&gt; 1.5 &lt;/platform&gt; &lt;/sdk&gt; &lt;deleteConflictingFiles&gt; True &lt;/deleteConflictingFiles&gt; &lt;/configuration&gt; &lt;extensions&gt; true &lt;/extensions&gt; &lt;/plugin&gt; ... Android + Maven
  • 59. &nbsp;
  • 60. Android + Maven + SpringME <ul><li>Modifichiamo il pom.xml aggiungendo il plugin SpringME
  • 61. Creiamo il file application-context.xml in /context, es.: &lt;beans&gt; &lt;bean id=&amp;quot;ciao&amp;quot; class=&amp;quot;it.jesty....Greeting&amp;quot; scope=&amp;quot;prototype&amp;quot;&gt; &lt;constructor-arg value=&amp;quot;Ciao&amp;quot; /&gt; &lt;/bean&gt; &lt;/beans&gt;
  • 62. Creiamo la classe Greeting.java
  • 63. Modifichiamo la classe MavenAndroidActivity.java, es.: public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); TextView tv = new TextView( this ); tv.setText(((Greeting)new BeanFactory().getBean( &amp;quot;ciao&amp;quot; )) .to( &amp;quot;MavenAndroidActivity&amp;quot; )); //oppure: tv.setText(((Greeting)new BeanFactory().getCiao()).to(...)); }
  • 64. Ripetiamo il passo 8 e 9 mvn com.jayway.maven.plugins.android.generation2:maven-android-plugin:deploy </li></ul>
  • 65. ... &lt;resources&gt; &lt;resource&gt; &lt;directory&gt;${basedir}/context/&lt;/directory&gt; &lt;filtering&gt;true&lt;/filtering&gt; &lt;includes&gt; &lt;include&gt;**/*.xml&lt;/include&gt; &lt;/includes&gt; &lt;/resource&gt; &lt;resource&gt; &lt;directory&gt; ${basedir}/target/generated-sources/spring-me &lt;/directory&gt; &lt;/resource&gt; &lt;/resources&gt; &lt;plugins&gt; &lt;plugin&gt; &lt;groupId&gt;me.springframework&lt;/groupId&gt; &lt;artifactId&gt;spring-me-maven-plugin&lt;/artifactId&gt; &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt; &lt;executions&gt; &lt;execution&gt; &lt;goals&gt; &lt;goal&gt;generate&lt;/goal&gt; &lt;goal&gt;dot&lt;/goal&gt; &lt;/goals&gt; &lt;phase&gt;generate-sources&lt;/phase&gt; &lt;/execution&gt; &lt;/executions&gt; &lt;configuration&gt; &lt;contextFile&gt; ${basedir}/context/application-context.xml &lt;/contextFile&gt; &lt;className&gt; it.jesty.mavenandroid.example.BeanFactory &lt;/className&gt; &lt;dotFile&gt;${basedir}/target/poloko-context.dot&lt;/dotFile&gt; &lt;/configuration&gt; &lt;/plugin&gt; ...
  • 66. Android + Maven + SpringME &lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&gt; &lt;beans xmlns=&amp;quot;http://www.springframework.org/schema/beans&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xsi:schemaLocation=&amp;quot; http://www.springframework.org/schema /beans http://www.springframework.org/schema/beans/spring- beans-2.0.xsd&amp;quot; default-lazy-init=&amp;quot;true&amp;quot; &gt; &lt;bean id=&amp;quot;ciao&amp;quot; class=&amp;quot;it.jesty...Greeting&amp;quot; scope=&amp;quot;prototype&amp;quot; &gt; &lt;constructor-arg value=&amp;quot;Ciao&amp;quot; /&gt; &lt;/bean&gt; &lt;bean id=&amp;quot;hello&amp;quot; class=&amp;quot;it.jest...Greeting&amp;quot; scope=&amp;quot;prototype&amp;quot; &gt; &lt;constructor-arg value=&amp;quot;Hello&amp;quot; /&gt; &lt;/bean&gt; &lt;/beans&gt;
  • 67. Android + Maven + SpringME package it.jesty.mavenandroid.example; public class Greeting { private String greeting; public Greeting(String greeting){ this .greeting = greeting; } public String to(String to){ return this .greeting + &amp;quot;, &amp;quot; + to; } }
  • 68. &nbsp;
  • 69. Risorse e Bibliografia <ul><li>Android http://www.android.com
  • 70. PhoneGap http://phonegap.com
  • 71. SpringME http://springframework.me http://sourceforge.net/projects/springme/
  • 72. Libro su SpringME http://www.scribd.com/doc/8611209/Spring-ME
  • 73. Maven per Android http://code.google.com/p/maven-android-plugin http://code.google.com/p/masa
  • 74. Linee guida allo sviluppo per Android http://developer.android.com/guide/practices/design/performance.html
  • 75. Big Picture degli store di Android, IPhone e IPod Touch http://mashable.com/2009/09/15/iphone-android-apps-visualized/ </li></ul>
  • 76. Download esempi http://jesty.it/non-conventional-android-programming.zip Il file compresso contiene: <ul><li>Esempio funzionante della demo di PhoneGap per Android
  • 77. Esempio di utilizzo di Apache Maven con Android
  • 78. Esempio di utilizzo di SpringME </li></ul>
  • 79. &nbsp;
  • 80. &nbsp;

×