SlideShare a Scribd company logo
1 of 38
Download to read offline
Android Mobile Phone Development


Context
Android


Dalvik
Development
Me First
           http://stuff

                           Computer
                             Stuff    data
                                      Stuff




                          x 10

       neidetcher.com/android.html
Context | Timeline
●   2001: Google starts filing mobile patents
●   2005 July: Google Acquires Android Inc
●   2005 Oct: Dan Bornstein joins Google to work on Dalvik
●   2007 Nov: Open Handset Alliance is formed and
    Android SDK is released
●   2008 Oct: T-Mobile G1 is released
●   2009 Jan: Palm Pre announced
●   2009 Feb: Pay apps available on market
●   2009 Jun: Samsung Android phones in EU
●   2009 Nov: Motorola releasing Android phone
●   2009: Possible Acer, Dell and HP net-books

                             http://www.flickr.com/photos/ram_/1637873367/sizes/l/
Context | Open Handset Alliance
                   47 Companies
                   Sprint, T-Mobile,
                   Telecom Italia,
                   Vodafone, Intel, Texas
                   Instruments, NVIDIA,
                   Asus, Garmin, HTC,
                   LG, Motorola,
                   Samsung, Sony,
                   Toshiba...
Context | Market

                                                           T-Mobile recently shared some statistics from the Android
                                                             Market. Right now, there are about 2,300 applications
                                                        available, which is under one-tenth the size of the iPhone
                                                                                 Apps Store's whopping 25,000+.
                                                                                 --InformationWeek March 25, 2009
                                                            Job Listing Comparison
                                                                  May 9, 2009

how does
Android’s growth     simplyhired.com


compare to
iPhone’s growth             dice.com

at launch? Our                                                                                              android java
best answer: both                                                                                           iPhone
                          indeed.com
grew more quickly                                                                                           j2me


than the market,
but iPhone growth       monster.com

was much faster
than Android.       careerbuilder.com
--admob.com
                                        0   200   400       600      800        1000   1200   1400   1600
Context | Criticism
●   Google helps T-Mobile block tethering
●   Not standard C library (Bionic)
●   Portions of SDK not open (yet)
●   Too many free apps
●   Android is Not POSIX
●   Dalvik is Not Java



                         http://www.flickr.com/photos/scjohnson/3475073977/
Android | Open Source
Runtime Stack                                      Development Stack



     Apache Harmony: Apache2                            QEMU: LGPL



                                                      JFree Chart: LGPL
    SQLite: Public Domain         WebKit: LGPLv2

                                                      JCommon: BSD


    Android: Apache2              Bionic: BSD
                                                        Eclipse: EPL




                   Linux: GPLv2
Android | Market
Android | Architecture

    Home        Contacts
                 Map       Phone       Browser        Email




  Telephony     Activity   Location   Notification   Package



                                                     Core Libraries

    SQLite      WebKit     OpenGL       bionic
                                                       Dalvik VM




  WiFi Driver
     WiFi       Camera     Power        Display      Keypad
Dalvik | Background
 ●   Dan Bornstein
 ●   Made for low end machines
     ●   low ram (no disk swap space)
     ●   battery
 ●   Register based (not stack based)
 ●   Not a JVM
 ●   No JIT (it's on the road map)
     ●   most heavy lifting is in native code
 ●   Does no memory management or threading


                                 http://www.flickr.com/photos/fremat/447395038/sizes/l/
Dalvik | Pro/ Con of Approach
● All those Java coders ● James Gosling
● All that tooling        hates you
● Don't have to deal    ● Sun hates you

  with Sun and JCP      ● Java fragmentation

● Optimize byte-code
                        ● No more write
  for hardware
                          once run
                          everywhere

                 http://www.flickr.com/photos/catwommn/3374184512/
Dalvik | .dex vs .class
  ● Single constant pool
    for all classes                                120




                                                                                        Compression
                                                   100


  ● Uncompressed
                                                                                                     libs
                                                                                                     browser app
                                                                                                     alarm app

                                                    80




  ● More pointing                                   60




                                                    40


  ● More sharing
                                                    20




                                                     0
                                                         uncompressed jar   compressed jar   uncompressed dex




http://retrodev.com/android/dexformat.html
http://sites.google.com/site/io/dalvik-vm-internals (handouts)
Dalvik | Other Languages?

anything that dynamically
reads .class files or
dynamically manipulates Java
binaries won't work without
Android specific tweaks
scala works :)
  http://chneukirchen.org/blog/archive/2009/04/programming-for-android-with-scala.html
Dalvik | Zygote
                  Home
                                                 Every new app isn't a VM cold start
                                                 Minimize memory requirements by
                 Application
                   Code
                                                              sharing what we can
                                                      Map
Zygote
                                                     Application
System                                                 Code
System
Libraries                          Browser
Libraries

                                   Application
                                     Code




            Email              ●Android creates Zygote at startup
                               ●Zygote loads up system libraries
            Application
              Code             ●Zygote finds out new app is starting

                               ●Zygote forks process, giving all Dalvik VMs

                               (and apps) access to system libraries
Dalvik | Sandbox
●   Every app is a process
●   process gets its own
    user id
●   files is sandboxed
●   SQLite DB is
    sandboxed




                         http://www.flickr.com/photos/bauchidgw/2820627227/
Dalvik | Application Stack

 Activity
                         Back button
 Manager                 does a pop
                         on the stack

             Map


            Browser


             Email
                      Low memory killer
            Home      will look at LRU apps
                      to destroy
Dev | Get Started
●   Android SDK
    ●   http://developer.android.com/sdk
    ●   local documentation
    ●   tools
●   Eclipse plugin
    ●   http://dl-ssl.google.com/android/eclipse/
android.*
Dev | APIs                            dalvik.*                junit.framework
                                                              junit.runner
                                                              org.apache.http
                                                              org.json
                                                              org.w3c.dom
 java.awt.font          java.util.logging
 java.beans             java.util.prefs
                                                              org.xml.sax
 java.io                java.util.regex                       org.xmlpull.v1
 java.lang              java.util.zip                         org.xmlpull.v1.sax2
 java.lang.annotation   javax.crypto
 java.lang.ref          javax.microedition.khronos.egl
 java.lang.reflect      javax.microedition.khronos.opengles
 java.math              javax.net
 java.net               javax.security.auth
 java.nio               javax.security.auth.callback
 java.security          javax.security.auth.login
 java.sql               javax.security.auth.x500
 java.text              javax.security.cert
 java.util              javax.sql
 java.util.concurrent   javax.xml
 java.util.jar



                                http://developer.android.com/reference/packages.html
Dev | Manifest.xml
manifest


    application

      activity


           intent-filter
                <action android:name=quot;android.intent.action.MAINquot; />
            <category android:name=quot;android.intent.category.LAUNCHERquot; />




      activity
Dev | Eclipse Plugin
Log.d(TAG, quot;position : quot; + position);
                Log.d(TAG, quot;selection: quot; + POINTS[position]);

Dev | Logging
Dev | Emulator
●Select AVD to run
●Set up virtual SD card

●Simulate network and

CPU conditions




    ./emulator -skin QVGA-L
Dev | adb
 shiv:~/opt/android-sdk-linux_x86-1.0_r2/tools>./adb devices
 List of devices attached
 emulator-5554       device

 shiv:~/opt/android-sdk-linux_x86-1.0_r2/tools>./adb shell
 # ls
 sqlite_stmt_journals      # cat /proc/cpuinfo
 cache                     Processor : ARM926EJ-S rev 5 (v5l)
 sdcard
 etc                       BogoMIPS : 348.16
 init                      Features : swp half thumb fastmult vfp   edsp java
 init.goldfish.rc          CPU implementer : 0x41
 init.rc                   CPU architecture: 5TEJ
 data
 system
                           CPU variant : 0x0
 proc                      CPU part : 0x926
 sys                       CPU revision : 5
 sbin                      Cache type : write-through
 default.prop              Cache clean : not required
 root
 dev                       Cache lockdown : not supported
                         Cache format : Harvard
Dev | Hierarchy Viewer




shiv:~/opt/android-sdk-linux_x86-1.0_r2/tools>./hierarchyviewer
Click on device > Load View Hierarchy
Dev | Activity Life Cycle
      starting


                  running




   stopped                   paused




                 destroyed
<?xml version=quot;1.0quot; encoding=quot;utf-8quot;?>
                               <LinearLayout
                                   xmlns:android=quot;http://schemas.android.com/apk/res/androidquot;

Dev | View                         android:orientation=quot;verticalquot;
                                   android:layout_width=quot;fill_parentquot;
                                   android:layout_height=quot;fill_parentquot;
                                   >
                                   <TextView
                                     android:id=quot;@+id/displayPointsTextViewquot;
                                     android:layout_width=quot;fill_parentquot;
                                     android:layout_height=quot;wrap_contentquot;
                                     android:height=quot;400spquot;
                                     android:width=quot;300spquot;
                                     android:textColor=quot;#FFFquot;
                                     android:gravity=quot;center_horizontal|center_verticalquot;
                                     android:textSize=quot;210spquot;
                                     />
                               </LinearLayout>
 public class DisplayActivity extends Activity
 {
      TextView myTextView = null;

      @Override
      public void onCreate(Bundle savedInstanceState)
      {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.display);

           // set value for the text
           myTextView = (TextView) findViewById(
                     R.id.displayPointsTextView);
           String points = getIntent().getExtras().getString(
                     ScrumPokerActivity.SELECTED_POINTS);
           if (points.equals(quot;100quot;))
           {
                myTextView.setTextSize(180);
           }

           myTextView.setText(points);
      }
 }
Dev | Intents
   Activity1                       Intent                              Activity2

         create(Activity2)


         putExtra(key, value)




           startActivity(intent)

               onCreate
                                                         getIntent()


                                            getExtras.get(key):value
Dev | Intents & Mashability
                                                          InterTubes

                                     wheels down in PST
 YourApp
                                         K, thx, bai
   classes.dex

            NarcissisticProxy

       TzChangeReceiverActivity
                                              Location
   AndroidManifext.xml
                                              Manager
    receiver
    intent:ACTION_TIMEZONE_CHANGED
Dev | Packaging
   .java                            .class

   .java    javac                   .class      dx

   .java                            .class


   .xml
                           aapt              classes
   .xml
                                               .dex
   .png


                    .xml           classes
                    .xml             .dex

                    .png
                                  .apk
Dev | apk
shiv:~/play>jar -xvf quot;Scrum Poker.apkquot;
shiv:~/play>tree
.
|-- AndroidManifest.xml
|-- Scrum Poker.apk
|-- classes.dex
|-- res
|   |-- drawable
|   |   `-- refresh.png
|   `-- layout
|       |-- display.xml
|       `-- main.xml
`-- resources.arsc

3 directories, 7 files
/** Called when the activity is first created. */
                                                       @Override
                                                       public void onCreate(Bundle savedInstanceState)
                                                       {
                                                              super.onCreate(savedInstanceState);


    Dev | dexdump
                                                              setContentView(R.layout.main);

                                                             displayPointsListView = (ListView) findViewById(R.id.pointsListView);
                                                             int layoutId = android.R.layout.simple_list_item_1;

                                                             // populate the list view with an array
                                                             ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,
                                                                          layoutId, POINTS);
                                                             displayPointsListView.setAdapter(arrayAdapter);
                                                             displayPointsListView.setOnItemClickListener(mMessageClickedHandler);
  Virtual methods   -                                   }
    #0              : (in Lcom/neidetcher/scrumpoker/ScrumPoker;)
       name         : 'onCreate'
       type         : '(Landroid/os/Bundle;)V'
       access       : 0x0001 (PUBLIC)
       code         -
       shiv:~/play>~/opt/android-sdk-linux_x86-1.0_r2/tools/dexdump -d classes.dex
       registers    : 5
       ins          : 2
       outs         : 4
       insns size   : 47 16-bit code units
000ad8:                 |[000ad8] com.neidetcher.scrumpoker.ScrumPoker.onCreate:(Landroid/os/Bundle;)V
000ae8: 6f20 0100 4300 |0000: invoke-super {v3, v4}, Landroid/app/Activity;.onCreate:(Landroid/os/Bundle;)V // method@00
000aee: 1401 0100 037f |0003: const v1, #float 174128887730233583002069148843976425472.000000 // #7f030001
000af4: 6e20 1e00 1300 |0006: invoke-virtual {v3, v1}, Lcom/neidetcher/scrumpoker/ScrumPoker;.setContentView:(I)V // met
000afa: 1401 0100 057f |0009: const v1, #float 176787343721803414747876762964537114624.000000 // #7f050001
000b00: 6e20 1c00 1300 |000c: invoke-virtual {v3, v1}, Lcom/neidetcher/scrumpoker/ScrumPoker;.findViewById:(I)Landroid/v
000b06: 0c01            |000f: move-result-object v1
000b08: 1f01 0d00       |0010: check-cast v1, Landroid/widget/ListView; // class@000d
000b0c: 5b31 0d00       |0012: iput-object v1, v3, Lcom/neidetcher/scrumpoker/ScrumPoker;.myListView:Landroid/widget/List
000b10: 1400 0300 0901 |0014: const v0, #float 0.000000 // #01090003
000b16: 2201 0b00       |0017: new-instance v1, Landroid/widget/ArrayAdapter; // class@000b
000b1a: 5432 0800       |0019: iget-object v2, v3, Lcom/neidetcher/scrumpoker/ScrumPoker;.POINTS:[Ljava/lang/String; // f
000b1e: 7040 0700 3120 |001b: invoke-direct {v1, v3, v0, v2}, Landroid/widget/ArrayAdapter;.<init>:(Landroid/content/Con
000b24: 5b31 0c00       |001e: iput-object v1, v3, Lcom/neidetcher/scrumpoker/ScrumPoker;.myArrayAdapter:Landroid/widget/
000b28: 5431 0d00       |0020: iget-object v1, v3, Lcom/neidetcher/scrumpoker/ScrumPoker;.myListView:Landroid/widget/List
000b2c: 5432 0c00       |0022: iget-object v2, v3, Lcom/neidetcher/scrumpoker/ScrumPoker;.myArrayAdapter:Landroid/widget/
000b30: 6e20 0800 2100 |0024: invoke-virtual {v1, v2}, Landroid/widget/ListView;.setAdapter:(Landroid/widget/ListAdapter
000b36: 5431 0d00       |0027: iget-object v1, v3, Lcom/neidetcher/scrumpoker/ScrumPoker;.myListView:Landroid/widget/List
000b3a: 5432 0b00       |0029: iget-object v2, v3, Lcom/neidetcher/scrumpoker/ScrumPoker;.mMessageClickedHandler:Landroid
field@000b
000b3e: 6e20 0900 2100 |002b: invoke-virtual {v1, v2}, Landroid/widget/ListView;.setOnItemClickListener:(Landroid/widget
000b44: 0e00            |002e: return-void
       catches      : (none)
       positions    :
Dev | Install Time
                     ●   What happens when you install the
          .dex           software...
                     ●   there is no JIT
                     ●   security
                     ●   verification of dex files
     dexopt
                     ●   Optimization
                         ●   specific to hardware
                         ●   inlining
                         ●   pruning
       .odex             ●   static linking


http://www.netmite.com/android/mydroid/dalvik/docs/dexopt.html
Dev | Good Android Code
  ●   sleep, react quickly, sleep
  ●   avoid allocation

  Address[] addressArray = mgr.findAddresses()
  for(int ii = 0; ii < addressArray.length; ii++)

  Address[] addressArray = mgr.findAddresses()
  for(Address currAddress : addressArray)

  List<Address> addresses = mgr.findAddresses();
  for(Address currAddress : addresses)




http://kohlerm.blogspot.com/2009/04/analyzing-memory-usage-off-your-android.html
Dev | Gotchas
●   I accidentally imported the quot;super Rquot; instead of
    my locally generated R. (2 hours)
●   View layouts can't be camel cased. (30 minutes)
●   The tools directory in the Android SDK needs be
    set to executable to run and for the Eclipse plug-
    in to work. (10 minutes)
●   If your install didn't work on the phone you see a
    deceptive green check-mark. (10 minutes)
●   Don't put heavy object graphs in putExtra()
●   Development upgrade to Cupcake was kludgy for me
Dev | Other Cool Stuff
                   ●   SQLite
                   ●   LocationManager
                   ●   Sensors
                       ●   Accelerometer
                       ●   Compass
                   ●   Telephony
                   ●   Blue Tooth
                   ●   OpenGL
                   ●   Camera
                   ●   Media
Wrap Up | Google IO
●   3 types of agreements
●   3 Ways to code
●   20 handsets in 2009
●   Oprah moment
●   Donut
    ●   Universal search where universe is phone
    ●   Text to speech
    ●   Gestures/ handwriting recognition

                               http://www.flickr.com/photos/francois/3959737/
Wrap Up | Future                   ●   The user experience
                                       will be inconsistent
●   Desktop phones                 ●   Hardware might be
●   Net-books                          flaky and clunky
●   Televisions?                   ●   IBM PC clone of the
●   GPS?                               mobile market

                   Good for 1 well* drink if
                   Android does not have
                   greater than 50% of the
                                                                 iPhone
                   mobile phone OS                               Android
                   market by June 1, 2014                        All
                                                                 Others


                   ~Demian Neidetcher
                                                       *where well is water
Wrap Up | Questions?




http://neidetcher.com/android.html

More Related Content

What's hot

Qi -- Lightweight Boot Loader Applied in Mobile and Embedded Devices
Qi -- Lightweight Boot Loader Applied in Mobile and Embedded DevicesQi -- Lightweight Boot Loader Applied in Mobile and Embedded Devices
Qi -- Lightweight Boot Loader Applied in Mobile and Embedded DevicesNational Cheng Kung University
 
Develop Community-based Android Distribution and Upstreaming Experience
Develop Community-based Android Distribution and Upstreaming Experience Develop Community-based Android Distribution and Upstreaming Experience
Develop Community-based Android Distribution and Upstreaming Experience National Cheng Kung University
 
Android is NOT just 'Java on Linux'
Android is NOT just 'Java on Linux'Android is NOT just 'Java on Linux'
Android is NOT just 'Java on Linux'Tetsuyuki Kobayashi
 
Android graphic system (SurfaceFlinger) : Design Pattern's perspective
Android graphic system (SurfaceFlinger) : Design Pattern's perspectiveAndroid graphic system (SurfaceFlinger) : Design Pattern's perspective
Android graphic system (SurfaceFlinger) : Design Pattern's perspectiveBin Chen
 
How to implement a simple dalvik virtual machine
How to implement a simple dalvik virtual machineHow to implement a simple dalvik virtual machine
How to implement a simple dalvik virtual machineChun-Yu Wang
 
Skype testing overview
Skype testing overviewSkype testing overview
Skype testing overviewQA Club Kiev
 
JAVA AND ANDROID OS_PRESENTATION
JAVA AND ANDROID OS_PRESENTATIONJAVA AND ANDROID OS_PRESENTATION
JAVA AND ANDROID OS_PRESENTATIONBenjamin Agboola
 

What's hot (20)

Accelerated Android Development with Linaro
Accelerated Android Development with LinaroAccelerated Android Development with Linaro
Accelerated Android Development with Linaro
 
Improve Android System Component Performance
Improve Android System Component PerformanceImprove Android System Component Performance
Improve Android System Component Performance
 
Learn C Programming Language by Using GDB
Learn C Programming Language by Using GDBLearn C Programming Language by Using GDB
Learn C Programming Language by Using GDB
 
Understanding the Dalvik Virtual Machine
Understanding the Dalvik Virtual MachineUnderstanding the Dalvik Virtual Machine
Understanding the Dalvik Virtual Machine
 
Low Level View of Android System Architecture
Low Level View of Android System ArchitectureLow Level View of Android System Architecture
Low Level View of Android System Architecture
 
Explore Android Internals
Explore Android InternalsExplore Android Internals
Explore Android Internals
 
Dvm
DvmDvm
Dvm
 
Android IPC Mechanism
Android IPC MechanismAndroid IPC Mechanism
Android IPC Mechanism
 
Qi -- Lightweight Boot Loader Applied in Mobile and Embedded Devices
Qi -- Lightweight Boot Loader Applied in Mobile and Embedded DevicesQi -- Lightweight Boot Loader Applied in Mobile and Embedded Devices
Qi -- Lightweight Boot Loader Applied in Mobile and Embedded Devices
 
Develop Community-based Android Distribution and Upstreaming Experience
Develop Community-based Android Distribution and Upstreaming Experience Develop Community-based Android Distribution and Upstreaming Experience
Develop Community-based Android Distribution and Upstreaming Experience
 
Android is NOT just 'Java on Linux'
Android is NOT just 'Java on Linux'Android is NOT just 'Java on Linux'
Android is NOT just 'Java on Linux'
 
Android graphic system (SurfaceFlinger) : Design Pattern's perspective
Android graphic system (SurfaceFlinger) : Design Pattern's perspectiveAndroid graphic system (SurfaceFlinger) : Design Pattern's perspective
Android graphic system (SurfaceFlinger) : Design Pattern's perspective
 
Discover System Facilities inside Your Android Phone
Discover System Facilities inside Your Android Phone Discover System Facilities inside Your Android Phone
Discover System Facilities inside Your Android Phone
 
Applied Computer Science Concepts in Android
Applied Computer Science Concepts in AndroidApplied Computer Science Concepts in Android
Applied Computer Science Concepts in Android
 
Android Internals
Android InternalsAndroid Internals
Android Internals
 
How to implement a simple dalvik virtual machine
How to implement a simple dalvik virtual machineHow to implement a simple dalvik virtual machine
How to implement a simple dalvik virtual machine
 
Implement Checkpointing for Android
Implement Checkpointing for AndroidImplement Checkpointing for Android
Implement Checkpointing for Android
 
ARM and SoC Traning Part I -- Overview
ARM and SoC Traning Part I -- OverviewARM and SoC Traning Part I -- Overview
ARM and SoC Traning Part I -- Overview
 
Skype testing overview
Skype testing overviewSkype testing overview
Skype testing overview
 
JAVA AND ANDROID OS_PRESENTATION
JAVA AND ANDROID OS_PRESENTATIONJAVA AND ANDROID OS_PRESENTATION
JAVA AND ANDROID OS_PRESENTATION
 

Viewers also liked

What is context
What is contextWhat is context
What is contextBible Tang
 
Android Studio - Tasks & Context
Android Studio - Tasks & ContextAndroid Studio - Tasks & Context
Android Studio - Tasks & ContextAndre Perkins
 
Catégorisation automatisée de contenus documentaires : la ...
Catégorisation automatisée de contenus documentaires : la ...Catégorisation automatisée de contenus documentaires : la ...
Catégorisation automatisée de contenus documentaires : la ...butest
 
Android Workshop Part 1
Android Workshop Part 1Android Workshop Part 1
Android Workshop Part 1NAILBITER
 
Introduction of Android Camera1
Introduction of Android Camera1Introduction of Android Camera1
Introduction of Android Camera1Booch Lin
 
Presentation on Android operating system
Presentation on Android operating systemPresentation on Android operating system
Presentation on Android operating systemSalma Begum
 
Presentation on mobile phones
Presentation on mobile phonesPresentation on mobile phones
Presentation on mobile phonessirtwinkles
 

Viewers also liked (13)

What is context
What is contextWhat is context
What is context
 
Android Studio - Tasks & Context
Android Studio - Tasks & ContextAndroid Studio - Tasks & Context
Android Studio - Tasks & Context
 
Catégorisation automatisée de contenus documentaires : la ...
Catégorisation automatisée de contenus documentaires : la ...Catégorisation automatisée de contenus documentaires : la ...
Catégorisation automatisée de contenus documentaires : la ...
 
Android Workshop Part 1
Android Workshop Part 1Android Workshop Part 1
Android Workshop Part 1
 
Introduction of Android Camera1
Introduction of Android Camera1Introduction of Android Camera1
Introduction of Android Camera1
 
Working with Android TV - English
Working with Android TV - EnglishWorking with Android TV - English
Working with Android TV - English
 
Tv ppt
Tv pptTv ppt
Tv ppt
 
Television ppt
Television pptTelevision ppt
Television ppt
 
Mobile handests ppt
Mobile handests pptMobile handests ppt
Mobile handests ppt
 
Television
TelevisionTelevision
Television
 
Presentation on Android operating system
Presentation on Android operating systemPresentation on Android operating system
Presentation on Android operating system
 
Presentation on mobile phones
Presentation on mobile phonesPresentation on mobile phones
Presentation on mobile phones
 
Mobile ppt
Mobile pptMobile ppt
Mobile ppt
 

Similar to Introduction to Android by Demian Neidetcher

Fragmentation in mobile design: fact or fiction
Fragmentation in mobile design: fact or fictionFragmentation in mobile design: fact or fiction
Fragmentation in mobile design: fact or fictionBelen Barros Pena
 
iEnterprise - Mit HTML-5 zum Unternehmens-Dashboard für Tablets
iEnterprise - Mit HTML-5 zum Unternehmens-Dashboard für TabletsiEnterprise - Mit HTML-5 zum Unternehmens-Dashboard für Tablets
iEnterprise - Mit HTML-5 zum Unternehmens-Dashboard für TabletsIndiginox
 
iEnterprise - Mit HTML5 zum Unternehmens-Dashboard für Tablets
iEnterprise - Mit HTML5 zum Unternehmens-Dashboard für TabletsiEnterprise - Mit HTML5 zum Unternehmens-Dashboard für Tablets
iEnterprise - Mit HTML5 zum Unternehmens-Dashboard für TabletsStefan Kolb
 
Mobile fragmentation, fact or myth?
Mobile fragmentation, fact or myth?Mobile fragmentation, fact or myth?
Mobile fragmentation, fact or myth?Belen Barros Pena
 
Siruna session at Drupalcon Paris 2009
Siruna session at Drupalcon Paris 2009Siruna session at Drupalcon Paris 2009
Siruna session at Drupalcon Paris 2009Tom Deryckere
 
Getting Started with Android - OSSPAC 2009
Getting Started with Android - OSSPAC 2009Getting Started with Android - OSSPAC 2009
Getting Started with Android - OSSPAC 2009sullis
 
Developers Guide To The Galaxy 8th edition
Developers Guide To The Galaxy 8th editionDevelopers Guide To The Galaxy 8th edition
Developers Guide To The Galaxy 8th editionMarco Tabor
 
Ugly truths about html5 moosecon - robert virkus - 2013-03-07
Ugly truths about html5   moosecon - robert virkus - 2013-03-07Ugly truths about html5   moosecon - robert virkus - 2013-03-07
Ugly truths about html5 moosecon - robert virkus - 2013-03-07Enough Software
 
Keynote: Techday7 appcelerator titanium
Keynote: Techday7 appcelerator titaniumKeynote: Techday7 appcelerator titanium
Keynote: Techday7 appcelerator titaniumTechday7
 
2011 android
2011 android2011 android
2011 androidvpedapolu
 
Mobile Developer's Guide To The Galaxy, 5th edition
Mobile Developer's Guide To The Galaxy, 5th editionMobile Developer's Guide To The Galaxy, 5th edition
Mobile Developer's Guide To The Galaxy, 5th editionMarco Tabor
 
Mobile Developer's Guide To The Galaxy Vol.7
Mobile Developer's Guide To The Galaxy Vol.7Mobile Developer's Guide To The Galaxy Vol.7
Mobile Developer's Guide To The Galaxy Vol.7Marco Tabor
 
Get Started with Android - Session 1
Get Started with Android - Session 1 Get Started with Android - Session 1
Get Started with Android - Session 1 um_adeveloper
 
Cross Platform Mobile Developmemnt
Cross Platform Mobile DevelopmemntCross Platform Mobile Developmemnt
Cross Platform Mobile DevelopmemntSoutom Dhara
 
Lo mejor y peor de React Native @ValenciaJS
Lo mejor y peor de React Native @ValenciaJSLo mejor y peor de React Native @ValenciaJS
Lo mejor y peor de React Native @ValenciaJSMarcel Kalveram
 
Building Mobile Websites with Joomla
Building Mobile Websites with JoomlaBuilding Mobile Websites with Joomla
Building Mobile Websites with JoomlaTom Deryckere
 
Drupalcamp New York 2009
Drupalcamp New York 2009Drupalcamp New York 2009
Drupalcamp New York 2009Tom Deryckere
 
Android platform
Android platformAndroid platform
Android platformmaya_slides
 
Introduction to Android - Mobile Portland
Introduction to Android - Mobile PortlandIntroduction to Android - Mobile Portland
Introduction to Android - Mobile Portlandsullis
 

Similar to Introduction to Android by Demian Neidetcher (20)

Fragmentation in mobile design: fact or fiction
Fragmentation in mobile design: fact or fictionFragmentation in mobile design: fact or fiction
Fragmentation in mobile design: fact or fiction
 
iEnterprise - Mit HTML-5 zum Unternehmens-Dashboard für Tablets
iEnterprise - Mit HTML-5 zum Unternehmens-Dashboard für TabletsiEnterprise - Mit HTML-5 zum Unternehmens-Dashboard für Tablets
iEnterprise - Mit HTML-5 zum Unternehmens-Dashboard für Tablets
 
iEnterprise - Mit HTML5 zum Unternehmens-Dashboard für Tablets
iEnterprise - Mit HTML5 zum Unternehmens-Dashboard für TabletsiEnterprise - Mit HTML5 zum Unternehmens-Dashboard für Tablets
iEnterprise - Mit HTML5 zum Unternehmens-Dashboard für Tablets
 
Mobile fragmentation, fact or myth?
Mobile fragmentation, fact or myth?Mobile fragmentation, fact or myth?
Mobile fragmentation, fact or myth?
 
Siruna session at Drupalcon Paris 2009
Siruna session at Drupalcon Paris 2009Siruna session at Drupalcon Paris 2009
Siruna session at Drupalcon Paris 2009
 
Getting Started with Android - OSSPAC 2009
Getting Started with Android - OSSPAC 2009Getting Started with Android - OSSPAC 2009
Getting Started with Android - OSSPAC 2009
 
Developers Guide To The Galaxy 8th edition
Developers Guide To The Galaxy 8th editionDevelopers Guide To The Galaxy 8th edition
Developers Guide To The Galaxy 8th edition
 
Ugly truths about html5 moosecon - robert virkus - 2013-03-07
Ugly truths about html5   moosecon - robert virkus - 2013-03-07Ugly truths about html5   moosecon - robert virkus - 2013-03-07
Ugly truths about html5 moosecon - robert virkus - 2013-03-07
 
Keynote: Techday7 appcelerator titanium
Keynote: Techday7 appcelerator titaniumKeynote: Techday7 appcelerator titanium
Keynote: Techday7 appcelerator titanium
 
Ganar el desafio android
Ganar el desafio androidGanar el desafio android
Ganar el desafio android
 
2011 android
2011 android2011 android
2011 android
 
Mobile Developer's Guide To The Galaxy, 5th edition
Mobile Developer's Guide To The Galaxy, 5th editionMobile Developer's Guide To The Galaxy, 5th edition
Mobile Developer's Guide To The Galaxy, 5th edition
 
Mobile Developer's Guide To The Galaxy Vol.7
Mobile Developer's Guide To The Galaxy Vol.7Mobile Developer's Guide To The Galaxy Vol.7
Mobile Developer's Guide To The Galaxy Vol.7
 
Get Started with Android - Session 1
Get Started with Android - Session 1 Get Started with Android - Session 1
Get Started with Android - Session 1
 
Cross Platform Mobile Developmemnt
Cross Platform Mobile DevelopmemntCross Platform Mobile Developmemnt
Cross Platform Mobile Developmemnt
 
Lo mejor y peor de React Native @ValenciaJS
Lo mejor y peor de React Native @ValenciaJSLo mejor y peor de React Native @ValenciaJS
Lo mejor y peor de React Native @ValenciaJS
 
Building Mobile Websites with Joomla
Building Mobile Websites with JoomlaBuilding Mobile Websites with Joomla
Building Mobile Websites with Joomla
 
Drupalcamp New York 2009
Drupalcamp New York 2009Drupalcamp New York 2009
Drupalcamp New York 2009
 
Android platform
Android platformAndroid platform
Android platform
 
Introduction to Android - Mobile Portland
Introduction to Android - Mobile PortlandIntroduction to Android - Mobile Portland
Introduction to Android - Mobile Portland
 

More from Matthew McCullough

Using Git and GitHub Effectively at Emerge Interactive
Using Git and GitHub Effectively at Emerge InteractiveUsing Git and GitHub Effectively at Emerge Interactive
Using Git and GitHub Effectively at Emerge InteractiveMatthew McCullough
 
All About GitHub Pull Requests
All About GitHub Pull RequestsAll About GitHub Pull Requests
All About GitHub Pull RequestsMatthew McCullough
 
Git Graphs, Hashes, and Compression, Oh My
Git Graphs, Hashes, and Compression, Oh MyGit Graphs, Hashes, and Compression, Oh My
Git Graphs, Hashes, and Compression, Oh MyMatthew McCullough
 
Git and GitHub at the San Francisco JUG
 Git and GitHub at the San Francisco JUG Git and GitHub at the San Francisco JUG
Git and GitHub at the San Francisco JUGMatthew McCullough
 
Migrating from Subversion to Git and GitHub
Migrating from Subversion to Git and GitHubMigrating from Subversion to Git and GitHub
Migrating from Subversion to Git and GitHubMatthew McCullough
 
Build Lifecycle Craftsmanship for the Transylvania JUG
Build Lifecycle Craftsmanship for the Transylvania JUGBuild Lifecycle Craftsmanship for the Transylvania JUG
Build Lifecycle Craftsmanship for the Transylvania JUGMatthew McCullough
 
Git Going for the Transylvania JUG
Git Going for the Transylvania JUGGit Going for the Transylvania JUG
Git Going for the Transylvania JUGMatthew McCullough
 
Transylvania JUG Pre-Meeting Announcements
Transylvania JUG Pre-Meeting AnnouncementsTransylvania JUG Pre-Meeting Announcements
Transylvania JUG Pre-Meeting AnnouncementsMatthew McCullough
 
Game Theory for Software Developers at the Boulder JUG
Game Theory for Software Developers at the Boulder JUGGame Theory for Software Developers at the Boulder JUG
Game Theory for Software Developers at the Boulder JUGMatthew McCullough
 
Cascading Through Hadoop for the Boulder JUG
Cascading Through Hadoop for the Boulder JUGCascading Through Hadoop for the Boulder JUG
Cascading Through Hadoop for the Boulder JUGMatthew McCullough
 

More from Matthew McCullough (20)

Using Git and GitHub Effectively at Emerge Interactive
Using Git and GitHub Effectively at Emerge InteractiveUsing Git and GitHub Effectively at Emerge Interactive
Using Git and GitHub Effectively at Emerge Interactive
 
All About GitHub Pull Requests
All About GitHub Pull RequestsAll About GitHub Pull Requests
All About GitHub Pull Requests
 
Adam Smith Builds an App
Adam Smith Builds an AppAdam Smith Builds an App
Adam Smith Builds an App
 
Git's Filter Branch Command
Git's Filter Branch CommandGit's Filter Branch Command
Git's Filter Branch Command
 
Git Graphs, Hashes, and Compression, Oh My
Git Graphs, Hashes, and Compression, Oh MyGit Graphs, Hashes, and Compression, Oh My
Git Graphs, Hashes, and Compression, Oh My
 
Git and GitHub at the San Francisco JUG
 Git and GitHub at the San Francisco JUG Git and GitHub at the San Francisco JUG
Git and GitHub at the San Francisco JUG
 
Finding Things in Git
Finding Things in GitFinding Things in Git
Finding Things in Git
 
Git and GitHub for RallyOn
Git and GitHub for RallyOnGit and GitHub for RallyOn
Git and GitHub for RallyOn
 
Migrating from Subversion to Git and GitHub
Migrating from Subversion to Git and GitHubMigrating from Subversion to Git and GitHub
Migrating from Subversion to Git and GitHub
 
Git Notes and GitHub
Git Notes and GitHubGit Notes and GitHub
Git Notes and GitHub
 
Intro to Git and GitHub
Intro to Git and GitHubIntro to Git and GitHub
Intro to Git and GitHub
 
Build Lifecycle Craftsmanship for the Transylvania JUG
Build Lifecycle Craftsmanship for the Transylvania JUGBuild Lifecycle Craftsmanship for the Transylvania JUG
Build Lifecycle Craftsmanship for the Transylvania JUG
 
Git Going for the Transylvania JUG
Git Going for the Transylvania JUGGit Going for the Transylvania JUG
Git Going for the Transylvania JUG
 
Transylvania JUG Pre-Meeting Announcements
Transylvania JUG Pre-Meeting AnnouncementsTransylvania JUG Pre-Meeting Announcements
Transylvania JUG Pre-Meeting Announcements
 
Game Theory for Software Developers at the Boulder JUG
Game Theory for Software Developers at the Boulder JUGGame Theory for Software Developers at the Boulder JUG
Game Theory for Software Developers at the Boulder JUG
 
Cascading Through Hadoop for the Boulder JUG
Cascading Through Hadoop for the Boulder JUGCascading Through Hadoop for the Boulder JUG
Cascading Through Hadoop for the Boulder JUG
 
JQuery Mobile
JQuery MobileJQuery Mobile
JQuery Mobile
 
R Data Analysis Software
R Data Analysis SoftwareR Data Analysis Software
R Data Analysis Software
 
Please, Stop Using Git
Please, Stop Using GitPlease, Stop Using Git
Please, Stop Using Git
 
Dr. Strangedev
Dr. StrangedevDr. Strangedev
Dr. Strangedev
 

Recently uploaded

ACC 2024 Chronicles. Cardiology. Exam.pdf
ACC 2024 Chronicles. Cardiology. Exam.pdfACC 2024 Chronicles. Cardiology. Exam.pdf
ACC 2024 Chronicles. Cardiology. Exam.pdfSpandanaRallapalli
 
AMERICAN LANGUAGE HUB_Level2_Student'sBook_Answerkey.pdf
AMERICAN LANGUAGE HUB_Level2_Student'sBook_Answerkey.pdfAMERICAN LANGUAGE HUB_Level2_Student'sBook_Answerkey.pdf
AMERICAN LANGUAGE HUB_Level2_Student'sBook_Answerkey.pdfphamnguyenenglishnb
 
Hierarchy of management that covers different levels of management
Hierarchy of management that covers different levels of managementHierarchy of management that covers different levels of management
Hierarchy of management that covers different levels of managementmkooblal
 
HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...
HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...
HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...Nguyen Thanh Tu Collection
 
Roles & Responsibilities in Pharmacovigilance
Roles & Responsibilities in PharmacovigilanceRoles & Responsibilities in Pharmacovigilance
Roles & Responsibilities in PharmacovigilanceSamikshaHamane
 
Atmosphere science 7 quarter 4 .........
Atmosphere science 7 quarter 4 .........Atmosphere science 7 quarter 4 .........
Atmosphere science 7 quarter 4 .........LeaCamillePacle
 
Computed Fields and api Depends in the Odoo 17
Computed Fields and api Depends in the Odoo 17Computed Fields and api Depends in the Odoo 17
Computed Fields and api Depends in the Odoo 17Celine George
 
Romantic Opera MUSIC FOR GRADE NINE pptx
Romantic Opera MUSIC FOR GRADE NINE pptxRomantic Opera MUSIC FOR GRADE NINE pptx
Romantic Opera MUSIC FOR GRADE NINE pptxsqpmdrvczh
 
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...JhezDiaz1
 
Framing an Appropriate Research Question 6b9b26d93da94caf993c038d9efcdedb.pdf
Framing an Appropriate Research Question 6b9b26d93da94caf993c038d9efcdedb.pdfFraming an Appropriate Research Question 6b9b26d93da94caf993c038d9efcdedb.pdf
Framing an Appropriate Research Question 6b9b26d93da94caf993c038d9efcdedb.pdfUjwalaBharambe
 
Planning a health career 4th Quarter.pptx
Planning a health career 4th Quarter.pptxPlanning a health career 4th Quarter.pptx
Planning a health career 4th Quarter.pptxLigayaBacuel1
 
How to do quick user assign in kanban in Odoo 17 ERP
How to do quick user assign in kanban in Odoo 17 ERPHow to do quick user assign in kanban in Odoo 17 ERP
How to do quick user assign in kanban in Odoo 17 ERPCeline George
 
Proudly South Africa powerpoint Thorisha.pptx
Proudly South Africa powerpoint Thorisha.pptxProudly South Africa powerpoint Thorisha.pptx
Proudly South Africa powerpoint Thorisha.pptxthorishapillay1
 
How to Configure Email Server in Odoo 17
How to Configure Email Server in Odoo 17How to Configure Email Server in Odoo 17
How to Configure Email Server in Odoo 17Celine George
 
Grade 9 Q4-MELC1-Active and Passive Voice.pptx
Grade 9 Q4-MELC1-Active and Passive Voice.pptxGrade 9 Q4-MELC1-Active and Passive Voice.pptx
Grade 9 Q4-MELC1-Active and Passive Voice.pptxChelloAnnAsuncion2
 
Gas measurement O2,Co2,& ph) 04/2024.pptx
Gas measurement O2,Co2,& ph) 04/2024.pptxGas measurement O2,Co2,& ph) 04/2024.pptx
Gas measurement O2,Co2,& ph) 04/2024.pptxDr.Ibrahim Hassaan
 

Recently uploaded (20)

ACC 2024 Chronicles. Cardiology. Exam.pdf
ACC 2024 Chronicles. Cardiology. Exam.pdfACC 2024 Chronicles. Cardiology. Exam.pdf
ACC 2024 Chronicles. Cardiology. Exam.pdf
 
AMERICAN LANGUAGE HUB_Level2_Student'sBook_Answerkey.pdf
AMERICAN LANGUAGE HUB_Level2_Student'sBook_Answerkey.pdfAMERICAN LANGUAGE HUB_Level2_Student'sBook_Answerkey.pdf
AMERICAN LANGUAGE HUB_Level2_Student'sBook_Answerkey.pdf
 
Raw materials used in Herbal Cosmetics.pptx
Raw materials used in Herbal Cosmetics.pptxRaw materials used in Herbal Cosmetics.pptx
Raw materials used in Herbal Cosmetics.pptx
 
Hierarchy of management that covers different levels of management
Hierarchy of management that covers different levels of managementHierarchy of management that covers different levels of management
Hierarchy of management that covers different levels of management
 
TataKelola dan KamSiber Kecerdasan Buatan v022.pdf
TataKelola dan KamSiber Kecerdasan Buatan v022.pdfTataKelola dan KamSiber Kecerdasan Buatan v022.pdf
TataKelola dan KamSiber Kecerdasan Buatan v022.pdf
 
HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...
HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...
HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...
 
Roles & Responsibilities in Pharmacovigilance
Roles & Responsibilities in PharmacovigilanceRoles & Responsibilities in Pharmacovigilance
Roles & Responsibilities in Pharmacovigilance
 
Atmosphere science 7 quarter 4 .........
Atmosphere science 7 quarter 4 .........Atmosphere science 7 quarter 4 .........
Atmosphere science 7 quarter 4 .........
 
Computed Fields and api Depends in the Odoo 17
Computed Fields and api Depends in the Odoo 17Computed Fields and api Depends in the Odoo 17
Computed Fields and api Depends in the Odoo 17
 
Model Call Girl in Tilak Nagar Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in Tilak Nagar Delhi reach out to us at 🔝9953056974🔝Model Call Girl in Tilak Nagar Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in Tilak Nagar Delhi reach out to us at 🔝9953056974🔝
 
9953330565 Low Rate Call Girls In Rohini Delhi NCR
9953330565 Low Rate Call Girls In Rohini  Delhi NCR9953330565 Low Rate Call Girls In Rohini  Delhi NCR
9953330565 Low Rate Call Girls In Rohini Delhi NCR
 
Romantic Opera MUSIC FOR GRADE NINE pptx
Romantic Opera MUSIC FOR GRADE NINE pptxRomantic Opera MUSIC FOR GRADE NINE pptx
Romantic Opera MUSIC FOR GRADE NINE pptx
 
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
 
Framing an Appropriate Research Question 6b9b26d93da94caf993c038d9efcdedb.pdf
Framing an Appropriate Research Question 6b9b26d93da94caf993c038d9efcdedb.pdfFraming an Appropriate Research Question 6b9b26d93da94caf993c038d9efcdedb.pdf
Framing an Appropriate Research Question 6b9b26d93da94caf993c038d9efcdedb.pdf
 
Planning a health career 4th Quarter.pptx
Planning a health career 4th Quarter.pptxPlanning a health career 4th Quarter.pptx
Planning a health career 4th Quarter.pptx
 
How to do quick user assign in kanban in Odoo 17 ERP
How to do quick user assign in kanban in Odoo 17 ERPHow to do quick user assign in kanban in Odoo 17 ERP
How to do quick user assign in kanban in Odoo 17 ERP
 
Proudly South Africa powerpoint Thorisha.pptx
Proudly South Africa powerpoint Thorisha.pptxProudly South Africa powerpoint Thorisha.pptx
Proudly South Africa powerpoint Thorisha.pptx
 
How to Configure Email Server in Odoo 17
How to Configure Email Server in Odoo 17How to Configure Email Server in Odoo 17
How to Configure Email Server in Odoo 17
 
Grade 9 Q4-MELC1-Active and Passive Voice.pptx
Grade 9 Q4-MELC1-Active and Passive Voice.pptxGrade 9 Q4-MELC1-Active and Passive Voice.pptx
Grade 9 Q4-MELC1-Active and Passive Voice.pptx
 
Gas measurement O2,Co2,& ph) 04/2024.pptx
Gas measurement O2,Co2,& ph) 04/2024.pptxGas measurement O2,Co2,& ph) 04/2024.pptx
Gas measurement O2,Co2,& ph) 04/2024.pptx
 

Introduction to Android by Demian Neidetcher

  • 1. Android Mobile Phone Development Context Android Dalvik Development
  • 2. Me First http://stuff Computer Stuff data Stuff x 10 neidetcher.com/android.html
  • 3. Context | Timeline ● 2001: Google starts filing mobile patents ● 2005 July: Google Acquires Android Inc ● 2005 Oct: Dan Bornstein joins Google to work on Dalvik ● 2007 Nov: Open Handset Alliance is formed and Android SDK is released ● 2008 Oct: T-Mobile G1 is released ● 2009 Jan: Palm Pre announced ● 2009 Feb: Pay apps available on market ● 2009 Jun: Samsung Android phones in EU ● 2009 Nov: Motorola releasing Android phone ● 2009: Possible Acer, Dell and HP net-books http://www.flickr.com/photos/ram_/1637873367/sizes/l/
  • 4. Context | Open Handset Alliance 47 Companies Sprint, T-Mobile, Telecom Italia, Vodafone, Intel, Texas Instruments, NVIDIA, Asus, Garmin, HTC, LG, Motorola, Samsung, Sony, Toshiba...
  • 5. Context | Market T-Mobile recently shared some statistics from the Android Market. Right now, there are about 2,300 applications available, which is under one-tenth the size of the iPhone Apps Store's whopping 25,000+. --InformationWeek March 25, 2009 Job Listing Comparison May 9, 2009 how does Android’s growth simplyhired.com compare to iPhone’s growth dice.com at launch? Our android java best answer: both iPhone indeed.com grew more quickly j2me than the market, but iPhone growth monster.com was much faster than Android. careerbuilder.com --admob.com 0 200 400 600 800 1000 1200 1400 1600
  • 6. Context | Criticism ● Google helps T-Mobile block tethering ● Not standard C library (Bionic) ● Portions of SDK not open (yet) ● Too many free apps ● Android is Not POSIX ● Dalvik is Not Java http://www.flickr.com/photos/scjohnson/3475073977/
  • 7. Android | Open Source Runtime Stack Development Stack Apache Harmony: Apache2 QEMU: LGPL JFree Chart: LGPL SQLite: Public Domain WebKit: LGPLv2 JCommon: BSD Android: Apache2 Bionic: BSD Eclipse: EPL Linux: GPLv2
  • 9. Android | Architecture Home Contacts Map Phone Browser Email Telephony Activity Location Notification Package Core Libraries SQLite WebKit OpenGL bionic Dalvik VM WiFi Driver WiFi Camera Power Display Keypad
  • 10. Dalvik | Background ● Dan Bornstein ● Made for low end machines ● low ram (no disk swap space) ● battery ● Register based (not stack based) ● Not a JVM ● No JIT (it's on the road map) ● most heavy lifting is in native code ● Does no memory management or threading http://www.flickr.com/photos/fremat/447395038/sizes/l/
  • 11. Dalvik | Pro/ Con of Approach ● All those Java coders ● James Gosling ● All that tooling hates you ● Don't have to deal ● Sun hates you with Sun and JCP ● Java fragmentation ● Optimize byte-code ● No more write for hardware once run everywhere http://www.flickr.com/photos/catwommn/3374184512/
  • 12. Dalvik | .dex vs .class ● Single constant pool for all classes 120 Compression 100 ● Uncompressed libs browser app alarm app 80 ● More pointing 60 40 ● More sharing 20 0 uncompressed jar compressed jar uncompressed dex http://retrodev.com/android/dexformat.html http://sites.google.com/site/io/dalvik-vm-internals (handouts)
  • 13. Dalvik | Other Languages? anything that dynamically reads .class files or dynamically manipulates Java binaries won't work without Android specific tweaks scala works :) http://chneukirchen.org/blog/archive/2009/04/programming-for-android-with-scala.html
  • 14. Dalvik | Zygote Home Every new app isn't a VM cold start Minimize memory requirements by Application Code sharing what we can Map Zygote Application System Code System Libraries Browser Libraries Application Code Email ●Android creates Zygote at startup ●Zygote loads up system libraries Application Code ●Zygote finds out new app is starting ●Zygote forks process, giving all Dalvik VMs (and apps) access to system libraries
  • 15. Dalvik | Sandbox ● Every app is a process ● process gets its own user id ● files is sandboxed ● SQLite DB is sandboxed http://www.flickr.com/photos/bauchidgw/2820627227/
  • 16. Dalvik | Application Stack Activity Back button Manager does a pop on the stack Map Browser Email Low memory killer Home will look at LRU apps to destroy
  • 17. Dev | Get Started ● Android SDK ● http://developer.android.com/sdk ● local documentation ● tools ● Eclipse plugin ● http://dl-ssl.google.com/android/eclipse/
  • 18. android.* Dev | APIs dalvik.* junit.framework junit.runner org.apache.http org.json org.w3c.dom java.awt.font java.util.logging java.beans java.util.prefs org.xml.sax java.io java.util.regex org.xmlpull.v1 java.lang java.util.zip org.xmlpull.v1.sax2 java.lang.annotation javax.crypto java.lang.ref javax.microedition.khronos.egl java.lang.reflect javax.microedition.khronos.opengles java.math javax.net java.net javax.security.auth java.nio javax.security.auth.callback java.security javax.security.auth.login java.sql javax.security.auth.x500 java.text javax.security.cert java.util javax.sql java.util.concurrent javax.xml java.util.jar http://developer.android.com/reference/packages.html
  • 19. Dev | Manifest.xml manifest application activity intent-filter <action android:name=quot;android.intent.action.MAINquot; /> <category android:name=quot;android.intent.category.LAUNCHERquot; /> activity
  • 20. Dev | Eclipse Plugin
  • 21. Log.d(TAG, quot;position : quot; + position); Log.d(TAG, quot;selection: quot; + POINTS[position]); Dev | Logging
  • 22. Dev | Emulator ●Select AVD to run ●Set up virtual SD card ●Simulate network and CPU conditions ./emulator -skin QVGA-L
  • 23. Dev | adb shiv:~/opt/android-sdk-linux_x86-1.0_r2/tools>./adb devices List of devices attached emulator-5554 device shiv:~/opt/android-sdk-linux_x86-1.0_r2/tools>./adb shell # ls sqlite_stmt_journals # cat /proc/cpuinfo cache Processor : ARM926EJ-S rev 5 (v5l) sdcard etc BogoMIPS : 348.16 init Features : swp half thumb fastmult vfp edsp java init.goldfish.rc CPU implementer : 0x41 init.rc CPU architecture: 5TEJ data system CPU variant : 0x0 proc CPU part : 0x926 sys CPU revision : 5 sbin Cache type : write-through default.prop Cache clean : not required root dev Cache lockdown : not supported Cache format : Harvard
  • 24. Dev | Hierarchy Viewer shiv:~/opt/android-sdk-linux_x86-1.0_r2/tools>./hierarchyviewer Click on device > Load View Hierarchy
  • 25. Dev | Activity Life Cycle starting running stopped paused destroyed
  • 26. <?xml version=quot;1.0quot; encoding=quot;utf-8quot;?> <LinearLayout xmlns:android=quot;http://schemas.android.com/apk/res/androidquot; Dev | View android:orientation=quot;verticalquot; android:layout_width=quot;fill_parentquot; android:layout_height=quot;fill_parentquot; > <TextView android:id=quot;@+id/displayPointsTextViewquot; android:layout_width=quot;fill_parentquot; android:layout_height=quot;wrap_contentquot; android:height=quot;400spquot; android:width=quot;300spquot; android:textColor=quot;#FFFquot; android:gravity=quot;center_horizontal|center_verticalquot; android:textSize=quot;210spquot; /> </LinearLayout> public class DisplayActivity extends Activity { TextView myTextView = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.display); // set value for the text myTextView = (TextView) findViewById( R.id.displayPointsTextView); String points = getIntent().getExtras().getString( ScrumPokerActivity.SELECTED_POINTS); if (points.equals(quot;100quot;)) { myTextView.setTextSize(180); } myTextView.setText(points); } }
  • 27. Dev | Intents Activity1 Intent Activity2 create(Activity2) putExtra(key, value) startActivity(intent) onCreate getIntent() getExtras.get(key):value
  • 28. Dev | Intents & Mashability InterTubes wheels down in PST YourApp K, thx, bai classes.dex NarcissisticProxy TzChangeReceiverActivity Location AndroidManifext.xml Manager receiver intent:ACTION_TIMEZONE_CHANGED
  • 29. Dev | Packaging .java .class .java javac .class dx .java .class .xml aapt classes .xml .dex .png .xml classes .xml .dex .png .apk
  • 30. Dev | apk shiv:~/play>jar -xvf quot;Scrum Poker.apkquot; shiv:~/play>tree . |-- AndroidManifest.xml |-- Scrum Poker.apk |-- classes.dex |-- res | |-- drawable | | `-- refresh.png | `-- layout | |-- display.xml | `-- main.xml `-- resources.arsc 3 directories, 7 files
  • 31. /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Dev | dexdump setContentView(R.layout.main); displayPointsListView = (ListView) findViewById(R.id.pointsListView); int layoutId = android.R.layout.simple_list_item_1; // populate the list view with an array ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, layoutId, POINTS); displayPointsListView.setAdapter(arrayAdapter); displayPointsListView.setOnItemClickListener(mMessageClickedHandler); Virtual methods - } #0 : (in Lcom/neidetcher/scrumpoker/ScrumPoker;) name : 'onCreate' type : '(Landroid/os/Bundle;)V' access : 0x0001 (PUBLIC) code - shiv:~/play>~/opt/android-sdk-linux_x86-1.0_r2/tools/dexdump -d classes.dex registers : 5 ins : 2 outs : 4 insns size : 47 16-bit code units 000ad8: |[000ad8] com.neidetcher.scrumpoker.ScrumPoker.onCreate:(Landroid/os/Bundle;)V 000ae8: 6f20 0100 4300 |0000: invoke-super {v3, v4}, Landroid/app/Activity;.onCreate:(Landroid/os/Bundle;)V // method@00 000aee: 1401 0100 037f |0003: const v1, #float 174128887730233583002069148843976425472.000000 // #7f030001 000af4: 6e20 1e00 1300 |0006: invoke-virtual {v3, v1}, Lcom/neidetcher/scrumpoker/ScrumPoker;.setContentView:(I)V // met 000afa: 1401 0100 057f |0009: const v1, #float 176787343721803414747876762964537114624.000000 // #7f050001 000b00: 6e20 1c00 1300 |000c: invoke-virtual {v3, v1}, Lcom/neidetcher/scrumpoker/ScrumPoker;.findViewById:(I)Landroid/v 000b06: 0c01 |000f: move-result-object v1 000b08: 1f01 0d00 |0010: check-cast v1, Landroid/widget/ListView; // class@000d 000b0c: 5b31 0d00 |0012: iput-object v1, v3, Lcom/neidetcher/scrumpoker/ScrumPoker;.myListView:Landroid/widget/List 000b10: 1400 0300 0901 |0014: const v0, #float 0.000000 // #01090003 000b16: 2201 0b00 |0017: new-instance v1, Landroid/widget/ArrayAdapter; // class@000b 000b1a: 5432 0800 |0019: iget-object v2, v3, Lcom/neidetcher/scrumpoker/ScrumPoker;.POINTS:[Ljava/lang/String; // f 000b1e: 7040 0700 3120 |001b: invoke-direct {v1, v3, v0, v2}, Landroid/widget/ArrayAdapter;.<init>:(Landroid/content/Con 000b24: 5b31 0c00 |001e: iput-object v1, v3, Lcom/neidetcher/scrumpoker/ScrumPoker;.myArrayAdapter:Landroid/widget/ 000b28: 5431 0d00 |0020: iget-object v1, v3, Lcom/neidetcher/scrumpoker/ScrumPoker;.myListView:Landroid/widget/List 000b2c: 5432 0c00 |0022: iget-object v2, v3, Lcom/neidetcher/scrumpoker/ScrumPoker;.myArrayAdapter:Landroid/widget/ 000b30: 6e20 0800 2100 |0024: invoke-virtual {v1, v2}, Landroid/widget/ListView;.setAdapter:(Landroid/widget/ListAdapter 000b36: 5431 0d00 |0027: iget-object v1, v3, Lcom/neidetcher/scrumpoker/ScrumPoker;.myListView:Landroid/widget/List 000b3a: 5432 0b00 |0029: iget-object v2, v3, Lcom/neidetcher/scrumpoker/ScrumPoker;.mMessageClickedHandler:Landroid field@000b 000b3e: 6e20 0900 2100 |002b: invoke-virtual {v1, v2}, Landroid/widget/ListView;.setOnItemClickListener:(Landroid/widget 000b44: 0e00 |002e: return-void catches : (none) positions :
  • 32. Dev | Install Time ● What happens when you install the .dex software... ● there is no JIT ● security ● verification of dex files dexopt ● Optimization ● specific to hardware ● inlining ● pruning .odex ● static linking http://www.netmite.com/android/mydroid/dalvik/docs/dexopt.html
  • 33. Dev | Good Android Code ● sleep, react quickly, sleep ● avoid allocation Address[] addressArray = mgr.findAddresses() for(int ii = 0; ii < addressArray.length; ii++) Address[] addressArray = mgr.findAddresses() for(Address currAddress : addressArray) List<Address> addresses = mgr.findAddresses(); for(Address currAddress : addresses) http://kohlerm.blogspot.com/2009/04/analyzing-memory-usage-off-your-android.html
  • 34. Dev | Gotchas ● I accidentally imported the quot;super Rquot; instead of my locally generated R. (2 hours) ● View layouts can't be camel cased. (30 minutes) ● The tools directory in the Android SDK needs be set to executable to run and for the Eclipse plug- in to work. (10 minutes) ● If your install didn't work on the phone you see a deceptive green check-mark. (10 minutes) ● Don't put heavy object graphs in putExtra() ● Development upgrade to Cupcake was kludgy for me
  • 35. Dev | Other Cool Stuff ● SQLite ● LocationManager ● Sensors ● Accelerometer ● Compass ● Telephony ● Blue Tooth ● OpenGL ● Camera ● Media
  • 36. Wrap Up | Google IO ● 3 types of agreements ● 3 Ways to code ● 20 handsets in 2009 ● Oprah moment ● Donut ● Universal search where universe is phone ● Text to speech ● Gestures/ handwriting recognition http://www.flickr.com/photos/francois/3959737/
  • 37. Wrap Up | Future ● The user experience will be inconsistent ● Desktop phones ● Hardware might be ● Net-books flaky and clunky ● Televisions? ● IBM PC clone of the ● GPS? mobile market Good for 1 well* drink if Android does not have greater than 50% of the iPhone mobile phone OS Android market by June 1, 2014 All Others ~Demian Neidetcher *where well is water
  • 38. Wrap Up | Questions? http://neidetcher.com/android.html