Sei sulla pagina 1di 45

Android Framework

How to use and extend it

Android Framework
Instructor: Alberto Panizzo, CTO at Amarula Solutions BV A company focused on OSS within Embedded solutions.

a.y. 2011/2012

Alberto Panizzo

Goal
Give a comprehensive introduction to Android, oriented towards application development. Not an Android porting course No rooting techniques Enable you to develop proficiently applications in Android: You'll know what to look for and where, and you'll learn the basic best practices Your code won't cause a headache to the next developer who takes a look at it

Alberto Panizzo

Main topics
Application's building blocks Multitasking and shared resources Data management Security Best practices X-ray view of the Camera stack

Alberto Panizzo

Reference books
Tons of books on Android application development... Suggested: LearningAndroid,Marko Gargenta O'REILLY But we'll not follow it completely...

Alberto Panizzo

Course organisation
3 credits, 30 hours, frontal lessons + lab When: Tuesday: 14:30-16:30 Wednesday: 9:00-12:00 Where: All in room 27A Web: http://retis.sssup.it/~panizzo/android Mail: panizzo@retis.sssup.it Subscribe to the mailinglist!

Alberto Panizzo

Prerequisites
Object Oriented Programming Autonomy with Java Autonomy with Linux ~ Personal laptop

Alberto Panizzo

Final test
Present a Project: o Develop an Application o Analysis of a Framework Subsystem o Analysis and proposal of a solution to open problems (?) (Boot time reduction, etc.) I want you to be trained, not educated on Android Details will be available in the website

Alberto Panizzo

Q&A?
Any Questions?

Alberto Panizzo

Lecture 1
A glance at the past. What is Android and what devices it address Android Stack and key features Other ways to code in Android

Alberto Panizzo

lzo_do_compress(Android History)
2005: Google buys Andy Rubin's Android Inc Was working on location-aware mobile devices. [1] 2007: Announcement of the Open Handset Alliance Aimed to:"offer consumers a richer, less expensive, and better mobile experience" [2] 2008: Source code made available, Android SDK 1.0 is released, HTC G1 is sold 2009: Evolution of the platform (Cupcake, Donut, Eclair) and more than 20 devices running Android. 2011: 100 M of Activations world wide (Honeycomb, Icecream Sandwich)

Alberto Panizzo

Google's Motivations
Google's business is Advertisement Before Android/iPhone there was WAP..... If every cellphone owners can go on the Internet and use google.com in a standard way... Google income increases exponentially without changing anything in its product wallet. Whatever was Android/iPhone/Blackberry Google was pointing at standard web browsing all over the world [3] Now Google makes money through GoogleAPI fees + AndroidMarket

Alberto Panizzo

Lecture 1
A glance at the past. What is Android and what devices it address Android Stack and key features Other ways to code in Android

Alberto Panizzo

What is Android?
It is a modern, comprehensive, portable and open mobile stack. Fit modern mobile device resources in terms of: o Memory / CPU power / hardware helpers Support all the modern mobile devices peripherals: o Camera / Sensors / GPS / Mass storage .. Highly connected: o 3G/3G/4G networks / Wifi / Bluetooth / NFC

Alberto Panizzo

Device ecosystem

Alberto Panizzo

Devices specs
Minimum: RAM: 128MB - 1GB (Run hardly on 64MB) CPU: 500MHz - 1.2GHz Screen / Touch panel (Can manage mouse input..) Then: Audio I/O Hardware accelerations (2D 3D Graphics/AV Codecs) Connectivity (Wifi/Bluetooth/Modem) Sensors (Camera/Proximity/Gyroscope/Accelerometer/GPS) ...
Alberto Panizzo

Open source licence


Most of the source code is released under Apache 2.0 Open Source / Not "persistent" / Not "propagative" o Derivative works can be re-licensed o Can use software modules with a different licence Linux kernel is GPLv2 Open Source / Persistent / Propagative Google APIs are closed source Manufacturer private stub drivers are typically closed source.

Alberto Panizzo

Android on the web


Outstanding resources on the web: http://developer.android.com All you need to develop applications for Android http://source.android.com/ All needed to start develop Android

Alberto Panizzo

A note on versions

[4]
http://developer.android.com/resources/dashboard/platform-versions.html
Alberto Panizzo

Lecture 1
A glance at the past. What is Android and what devices it address Android Stack and key features Other ways to code in Android

Alberto Panizzo

Architecture

Alberto Panizzo

Based on Linux
Google says: "It offers consolidated model for managing Process / Memory / Security" But also: Open Source, Ported on all common architectures, Portable, Stable, Support all kind of peripheral, Big and spread community of developers, Lot of companies involved in its development ... More?

Alberto Panizzo

Based on Linux
How to fit more the mobile devices lack of resources? New Power management layer New Low Memory Killer New Shared memory manager (ASHMem) New Physical contiguous memory allocator (pmem) New behaviors: New IPC mechanism: Binder Increased the tethering capability New usb device drivers (adb / mass_storage ...) ..

Alberto Panizzo

Opportunistic Power Management


"Ratherthantryingtoputthevarioussystemcomponentsintoa low-powerstate,opportunisticsuspendworksbysimply suspendingtheentiredevicewheneveritisdeterminedthat nothinginterestingisgoingon." [5] Privileged userspace or kernel drivers can acquire wakelocks objects which controls the suspending/resume process.

Alberto Panizzo

Low memory management


Based on the fact that Mobile devices have different processes set than normal desktop workstations. Android caches application's processes as much as possible to achieve fast user interaction Uses the standard oom_adj process property to prioritize the pool of running processes and choose which to kill to free system memory Enables user-space policies to control which process should be killed on low memory

Alberto Panizzo

Low memory management


echo "0,1,2,4,7,15" > /sys/module/lowmemorykiller/parameters/adj echo "2048,3072,4096,6144,7168,8192">/sys/module/lowmemorykiller/parameters/minfree

Num Free Pages < 8192 7168 6144 4096 3072

Class to kill >= 15 7 4 2 1

Alberto Panizzo

Memory management
Android Shared Memory ASHMem: Allocate shared memory between processes as SHM Maintain a user ref count If all users free the shared object, the shared memory will be automatically released. Process memory allocator PMEM: Allocate large physical contiguous memory regions Used mostly for driving 2D/3D hardware engines

Alberto Panizzo

New IPC model


Android Binder derived from the PalmSource OpenBinder Kernel driver Implements inside the machine a distributed model of Remote Method Invocation. Remote interfaces are defined with AIDL [6]

Alberto Panizzo

New IPC model

Alberto Panizzo

Architecture

Alberto Panizzo

Android abstraction layer


Set of stub drivers written to detach the Android framework from Linux driver interface. Not all Linux drivers of the same class implements exactly the same behavior Not all hardware devices of the same type (Camera, Audio codec..) are supported through the same driver class. Android HAL define an interface for every type of supported hardware device, which the driver stub must implement

Alberto Panizzo

Architecture

Alberto Panizzo

Private libc
Bionic is a custom implementation of C libraries focusing on: size and speed Does not support C++ exception model Support only a subset of pthread API Implements Android specific functionalities: o log API o give programmatic access to systemproperties Released under BSD license: not persistent and not propagative

Alberto Panizzo

Architecture

Alberto Panizzo

Userspace libraries
Core libraries: SurfaceFlinger: video compositor manager AudioFlinger: audio compositor manager ... External libraries: Webkit: web render engine used by Safari, Chrome.. SQLite: light, full-featured SQL engine Media libraries: Packet Video OpenCore / Stagefright OpenGL ESx: 2D/3D graphics library ALSALib: Open audio library ...
Alberto Panizzo

Runtime enablement: Dalvik


The whole application environment is written in Java and runs on top of the Dalvik Vitrual Machine. Dalvik is not a standard Java Virtual machine but runs its own executable: dex. Designed to be small and FAST o Hard optimization at compile time o Register based arithmetic (instead of stack based) Every applications starts as a fork from another dalvik instance: o Share the same libraries memory space o Enable the uid based Android security [7]
Alberto Panizzo

Architecture

Alberto Panizzo

Runtime enablement: Dalvik


The dalvik compiler takes the java bytecode (.class) and translates it to the .dex format. Advantages: Java bytecode is far more stable than Java language Developers use trusted tools (jdk) to compile their programs, no double toolkits on workstations

Alberto Panizzo

Architecture

Alberto Panizzo

Application Framework
SetofManagers/Serviceswhichexposeall thefunctionalitiesavailabletotheapplications. From core Managers as: ActivityManager, WindowManager, PackageManager, NotificationManager.. implementing the runtime ecosystem. To system Services as: TelephonyService, LocationService, SensorService, WifiService ... implementing functionalities available to the applications. WrittenprimarilyinJava,withthesamerulesasanormal application
Alberto Panizzo

Lecture 1
A glance at the past. What is Android and what devices it address Android Stack and key features Other ways to code in Android

Alberto Panizzo

Other way to code in Android?


All software modules which need to deal with UI must have a frontend in Dalvik But you can use the browser as your frontend! o HTML (1 / 2 / 3 / 4 / 5 ...??) o Ajax o Flash (where supported) Custom devices can have a webserver running inside the device with "applications" provided by it

Alberto Panizzo

Other way to code in Android?


Application engines can be written in C/C++ (native code) Use the JNI invocation method Need to ship binaries for multiple architectures (ARMv5, ARMv7) Used when high performance is needed o Physics simulations o Efficient/Fast load/analysis on large data o .. Used when you don't want GC breathing on your back o Audio/video stream management System share only libc(bionic) and libm [8]

Alberto Panizzo

Interesting graph

[9]
Alberto Panizzo

Links of interest
[1]http://www.businessweek.com/technology/content/aug2005/tc20050817_0949_tc024.htm [2]http://www.openhandsetalliance.com/ [3]http://www.itbusinessedge.com/cm/blogs/bentley/%20more-on-g1-and-googles-goals-withandroid/?cs=15048 [4]http://developer.android.com/resources/dashboard/platform-versions.html [5]http://lwn.net/Articles/460644/ [6]http://elinux.org/Android_Binder [7]https://sites.google.com/site/io/dalvik-vm-internals [8]http://www.google.com/events/io/2009/sessions/HowToCodeThee.html [9]http://www.businessinsider.com/the-one-chart-you-need-to-see-to-understand-mobile2011-11?utm_source= %23frankguillen&utm_medium=twitter&utm_campaign=FrankGuillen+Buzz

Alberto Panizzo

Potrebbero piacerti anche