Android
Looking beyond the obvious
10/20/11 Cocoaheads Siegen Dipl. Inform. Simon Meurer
Agenda
General Android Desktop Developer's View Publishing
10/20/11
What is Android?
OS and Software-platform for different Mobile Devices Developed by Open Handset Alliance Based on Linux-Kernel 2.6 Biggest rival of iOS on Smartphone OS-Market
10/20/11
Market share
50 45 43,4 40
35
30
25 22,1 20 18,2
15 11,7 10
5 1,9 0 Android Symbian iOS RIM Bada Microsoft Others 1,6 1
10/20/11
2nd quartal 2011 Market share (%) - source: Gartner
Sample Devices
10/20/11
Android Versions
2.x for mobile phones (act. 2.3.6) 3.x for tablets (act. 3.2) 4.x gets 2.x and 3.x together
10/20/11
Android Desktop
Apps in Menu Can be moved to Desktop Themes and Live-Background
Shortcuts No. of Desktops set by Theme
10/20/11
Widgets
10/20/11
Notifications and Preferences
10/20/11
Developer's View
Architecture Language Key Concepts Menues Environment
10/20/11
10
Architecture
10/20/11
11
Language
Android is Java, right? Yes, but:
No Constructors (for GUI-Classes) No Swing or SWT No System.out.println(...) Limited memory ...
12
10/20/11
Key Concepts
Activities Layouting with XML Intents Services Content Providers Resources
10/20/11
13
Activities
UI-Screen (better: logic) An app has usually more than one Activity Stack
New Activities pushed on stack Back pops them of
10/20/11
14
Example (HelloWorldActivity.java)
package com.test.helloworld; import android.app.Activity; import android.os.Bundle; public class HelloWorldActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } }
10/20/11 15
Layouting with XML
GUI is build in XML Tags = Elements, Attributes = Properties Different Resolutions possible No Absolute Layout, instead: LinearLayout, RelativeLayout, TableLayout, Place in XML = Place in Layout
10/20/11
16
Example (main.xml)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/textview" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Hello World!" /> <Button android:id="@+id/button" android:layout_height="wrap_content" android:layout_width="match_parent" android:text="Hello" /> </LinearLayout>
10/20/11
17
HelloWorld
10/20/11
18
Clicking the button
public class HelloWorldActivity extends Activity { public void onCreate(Bundle savedInstanceState) { ... Button b = (Button) findViewById(R.id.button); b.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { Toast.makeText(HelloWorldActivity.this, "Hello World!",Toast.LENGTH_SHORT).show(); Log.v("HelloWorldActivity", "Hello clicked"); } }); } }
10/20/11 19
Toasting and Logging
Toast displaying short Text for a short while NOT for debugging Log
is for logging on console Different levels: d, e, i, v, w
20
10/20/11
So, what about other Activities?
Problem: No Constructors for GUI-Classes Intent:
Describes a spec. Action e.g. pick a photo, take a picture, create person Standards: send an email, Can be registered as standard Intents extras = Values of Constructors
21
10/20/11
Example (Intents)
onClick of Hello-Button: Intent i = new Intent(HelloWorldActivity.this, HelloWorldActivity2.class); i.putExtra("Hello", "World"); startActivity(i); HelloWorldActivity2: public class HelloWorldActivity2 extends Activity{ protected void onCreate(Bundle savedInstanceState) { ... TextView t = (TextView) findViewById(R.id.textview2); t.setText(getIntent().getStringExtra("Hello")); } }
10/20/11 22
How do I get results?
1.startActivityForResult(Intent, requestCode) 2.Generate result and put it in the intent 3.set resultCode and finish() the activity 4.in onActivityResult(requestCode, resultCode, Intent data) is your result
10/20/11
23
Services
Task that runs in background e.g. Music Player Can be started by Activity1 Changed by Activity2 e.g. Activity2 says stop or nextTrack Live Wallpaper
10/20/11
24
Resources
Manage data with xml Resource-Class is generated automatically holds ids for the elements Contains:
Layouts, Strings, Images, Values, Menus, Settings
10/20/11
25
Menu, Contextmenu and Search
10/20/11
26
Development environment
Recommended: Eclipse Fully integrated:
GUI-Builder XML-Helper Console Debugging-Tools
10/20/11
27
GUI-Builder
10/20/11
28
XML-Helper
10/20/11
29
Console and Debugging-Tools
10/20/11
30
Where do I publish my App?
Android Market: 510,000 Apps in Sept. 2011 uses Google Checkout for billing takes 30% of the app-price Until now:
No controlles!
10/20/11
31
Publishing on Android Market
Requirements:
Google Account register as developer on developer.android.com pay 25$ only Creditcards For charged apps:
register at Google Checkout
32
10/20/11
Publishing on Android Market
Requirements for the App:
App must be signed expires after 22.10.2033 AndroidManifest.xml:
android:versionCode and android:versionName must be defined android:Icon and android:label must be defined
33
10/20/11
Publishing without Android Market
Complete free: Generate .apk Put .apk on your website .apk must be copied to device and installed (e.g. with APK-Manager) Problems:
No (normal) User will do that! Billing, integration, updates
34
10/20/11
Publishing without Android Market
Alternative Markets: Amazon App Store (about 18,000 Apps) SlideME (about 10,000 Apps) AndAppStore (about 2,000 Apps) OnlyAndroid But:
Google can delete your app at any time! Not so many customers
35
10/20/11
Lessons learned
Android is NOT Java XML-Layouting is not allways fun Complicated solutions for simple problems Intents are sometimes mysterious Looks half-baked sometimes Docu is not as good as iOS-Docu
10/20/11
36
But...
Costs: Development for free Publishing 25$ once Market share
Mainly Java Freedom of choice ...
10/20/11
37