Non Conventional Android Programming En - Presentation Transcript
Non-conventional Android Programming
Who am I? Davide Cerbo http://jesty.it http://davide.cerbo.born-to-co.de http://www.linkedin.com/in/davidecerbo [email_address]
http://www.pro-netics.it [email_address]
Once upon a time...
New Features
GPS
Compass
Camere
Hi-Res Screen
WI-FI
UMTS / HSPDA
Multi-touch
Where we going?
(market)
Too much devices
Many languages for many devices
IPhone: Objective C
Android: Java
BlackBerry: Java
Nokia/Symbian: Java e C++
Windows Mobile: .NET e C
Write once, run anywhere Do you remember?
PhoneGap HTML + JAVASCRIPT + CSS = PhoneGap.com
PhoneGap CROSS PLATFORM + API NATIVE INTERFACES + OPEN SOURCE = PhoneGap.com
What I'm able to do? ...and coming soon: camera, maps and file manager
Examples //GEO REFERENCING var getLocation = function () { var suc = function ( p ){ alert ( p . coords . latitude + " " + p . coords . longitude ); }; var fail = function (){ alert ( "Location not available!" );}; navigator . geolocation . getCurrentPosition ( suc , fail , undefined ); } //VIBRACALL navigator . notification . vibrate ( 0 ); //BEEEEEEP navigator . notification . beep ( 2 );
Examples //ACCELEROMETER var watchAccel = function () { var s = function ( a ){ document . getElementById ( 'x' ). innerHTML = roundNumber ( a . x ); document . getElementById ( 'y' ). innerHTML = roundNumber ( a . y ); document . getElementById ( 'z' ). innerHTML = roundNumber ( a . z ); }; var d = function (){}; var opt = {}; opt . frequency = 100 ; Timer = navigator . accelerometer . watchAcceleration ( s , f , opt ); } //CAMERA navigator . camera . getPicture ( dump_pic , fail , { quality : 50 }); function dump_pic ( data) { ... document . getElementById ( "test" ). src = "data:image/jpeg;base64," + data ; }
Where's the trick? PhoneGap give us a startup project for every supported device. Every project is a simple application made of a web browser that work as a fullscreen app and where javascripts object will be injected. These objects has native API counterpart inside the device. We need to copy html, css, javascript and images into a specific project folder for every device that we need to deploy on. We also need to modify the project configuration, like project's name, author and so on... For Android copy these files into: ../my-android/assets/www/
Just to explain... ...take a look at this piece of code extracted from DroidGap.java included in the Android startup project: 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 , "DroidGap" ); appView.addJavascriptInterface( geo , "Geo" ); appView.addJavascriptInterface( accel , "Accel" ); appView.addJavascriptInterface( launcher , "GapCam" ); }
Why Android?
Open Source
Linux and Java based (Dalvik)
So many Devices
OS highly customized
?
Android 2.0 (Eclair) in deep
Multiple Google accounts management
Microsoft Excange Server support
Home, Menu and Back buttons become optional
New HTML5 web browser
Camera application improved (flash, digital zoom, etc...)
SMS and MMS are now searchable
MOTOROLA DROID http://droiddoes.com
What about Spring?
SpringME
Object configuration through XML
No reflection needed, auto-code generation
The final package does not contain extra libraries
Developed and maintained by Wilfred Springer, ex Tom Tom Software Architect
Apache MAVEN artifact plugin
Designed for J2ME but also suitable for GWT and Android
SpringME: how does it works?
Spring use reflection for Dependency Injection Class cl = Class.forName("Person"); Object instance = cl.newInstance(); Method meth = cl.getDeclaredMethod("setName"); method.invoke(instance, new Object[] { "Nick Hornby" }); --------------------------------------------------------- ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext(...); BeanFactory factory = (BeanFactory) appContext; Person frank = (Person)factory.getBean(“frank”);
SpringME produce the code through the Apache Maven plugin Person instance = new Person(); instance.setName("Wilfred Springer"); --------------------------------------------------------- BeanFactory factory = new BeanFactory(); Person frank1 = (Person)factory.getBean(“frank”); Person frank2 = factory.getFrank();
Android + Maven
Install the Android SDK
Setup the env variable ANDROID_SDK_15
Install Android into our maven repository , for example: mvn install:install-file -DgroupId=android -DartifactId=android -Dversion=1.5_r2 -Dpackaging=jar -Dfile=$ANDROID_SDK_15/platforms/android-1.5/android.jar
Let's create a brand new project: android create project --target 3 --name MavenAndroidExample --path ./maven-android-example --activity MavenAndroidActivity --package it.jesty.mavenandroid.example
Android + Maven
Create a pom.xml file (we'll see it in the next slide)
Let's clean up the mess: rm -r bin build.xml build.properties libs
Create the emulator: android create avd --name mavenandroidadv --target 3
Execute the emulator: emulator -avd mavenandroidadv
Create our package with: mvn install (.apk file)
Let's deploy the .apk into our device: mvn com.jayway.maven.plugins.android.generation2:maven-android-plugin:deploy
Create the application-context.xml into /context: <beans> <bean id="ciao" class="it.jesty....Greeting" scope="prototype"> <constructor-arg value="Ciao" /> </bean> </beans>
Create the Greeting.java class
Modify the MavenAndroidActivity.java: public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); TextView tv = new TextView( this ); tv.setText(((Greeting)new BeanFactory().getBean( "ciao" )) .to( "MavenAndroidActivity" )); //oppure: tv.setText(((Greeting)new BeanFactory().getCiao()).to(...)); }
Repeat 8 and 9 steps mvn com.jayway.maven.plugins.android.generation2:maven-android-plugin:deploy
Learn as you can developing software for mobile dev more
Learn as you can developing software for mobile devices using only html, css and javascript and how you can use Spring Framework in software for mobile devices less
0 comments
Post a comment