Date post: | 27-Jun-2015 |
Category: |
Technology |
Upload: | tomas-kypta |
View: | 214 times |
Download: | 2 times |
Android Development - the basics
Tomáš Kypta
• Android platform and ecosystem"• Android SDK and development tools"• Hello World"• building blocks of Android apps & the
manifest file"• activities, widgets, intents"• toasts
Agenda
• Linux-based operating system"
• open-source (http://source.android.com/)"
• originally phone OS"
• tablet support (since Honeycomb, Android 3.0)
Android platform
• Google TV"
• Google Glass"
• Google Wear
Android platform
• 2003, Android inc."
• 2005, acquired by Google"
• Sep 2008, the first Android phone"
– T-Mobile G1"
• May 2010, Froyo (Android 2.2)"
• Feb 2011, Honeycomb (Android 3.0)
History
• Oct 2011, Ice Cream Sandwich (Android 4.0)"
• July 2012, Jelly Bean (Android 4.1)"
• July 2013, Jelly Bean (Android 4.3)"
• Oct 2013, KitKat (Android 4.4)"
• June 2014, Android L (developer preview)
History
Platform Versions
• thousands of devices"• the most popular mobile platform"• 1.5 million new devices activated every day"– Q2 2013"
• September 3, 2013, 1 billion Android devices have been activated"
• most devices made by Samsung "– 65%, Feb 2014
Android ecosystem
• apps are distributed by app stores"– Google Play, http://play.google.com"– other stores (Amazon, Samsung, …)"
• > 50 billion apps have been installed from Google Play"
• > 1.3 million apps
Google Play
• customers can purchase"
• developers can sell"
• Play Music "
• Play Books "
• Play Movies
Google Play
• selling apps"
– 15 min return period"
• in-app billing"
– freemium model"
• ads"
– AdMob, ...
Monetization
• fragmentation"• manufacturer/carrier enhancements"• updates & support"• openness - low quality apps in Google Play"• malware"– users
Android “problems”
• app can be installed directly"
– .apk file"
• user accepts app permissions when installing or updating the app
Android security
• Verify Apps (Android 2.3+)"
– checks every app install"
• Google Play can remotely uninstall harmful apps
Android security
• programming in “Java”"
– Java SE 7 (KitKat)"
• native apps possible (C++)"
• development tools platform friendly"
–Windows, Linux, Mac OS X
Development
• IDE support"
– Android Studio, IntelliJ IDEA"
– ADT plugin for Eclipse"
– Netbeans"
• you can freely develop on any device
Development
• android - Android SDK and AVD Manager"
• adb - Android Debug Bridge"
• monitor - (ddms & hierarchyviewer)"
• emulator"
• lint, Traceview, ProGuard"
• docs, samples
Android SDK
• compatibility libraries"– v4 - backports lots of newer functionality
to Android 1.6+"– Fragments, NotificationCompat, ViewPager"
– v7"– AppCompat"
– v8"– v13
Support Libraries
• Google Maps"
• In-app Billing"
• Games"
• Google+"
• Authorization
Google Play Services
• AdMob"
• Google Analytics, Flurry, Crittercism
Libraries
• Activity"
• Service"
• Content provider"
• Broadcast receiver"
• AndroidManifest.xml
Android building blocks
• screen with user interface"
• the only visual component"
• example - an email app"
– list of emails"
– details of an email"
– email composition
Activity
• has no UI"
• long-running tasks"
• examples"
–music playback service"
– download service"
– sync service
Service
• managers and shares application data"• data storage doesn’t matter (db, web,
filesystem)"• apps can query and modify data through
content provider"• r/w permissions can be defined"• examples - all system dbs (SMS,
contacts, ...)
Content Provider
• responds to broadcasts"• broadcasts are system wide"• can be registered statically or dynamically"• system or custom messages"• examples - incoming SMS, incoming call,
screen turned off, low baterry, removed SD card, BT device available, ...
Broadcast Receiver
• defines what parts the app have"
• defines which endpoints are exposed"
• minimum/maximum API level"
• permissions"
• declare hardware and software features"
• require configuration
AndroidManifest.xml
• asynchronous message"
• binds components together (all except Content Provider)"
• starting activities"
• starting services and binding to services"
• sending broadcasts
Intent
Hello World
Build
• a subclass of android.app.Activity"
• app usually has many activities"
• activities managed in activity stack"
– newly started activity is placed on the top of the stack
Activity
• activity can be in different states during its lifecycle"
– foreground, visible, stopped, killed"
• when activity state changes a system callback is called
Activity Lifecycle
• onCreate() - activity created"
• onStart() - activity visible for the user"
• onResume() - activity gains user focus
Activity callbacks
• onPause() - system resuming another activity"
• onStop() - activity becoming invisible to the user"
• onDestroy() - before activity is destroyed
Activity callbacks
• onRestart() - called if activity was previously stopped, called prior to onStart()
Activity callbacks
• when configuration changes, activities are destroyed and recreated"
– default behaviour, can be changed"
• properly handle config changes"– onSaveInstanceState(Bundle)
Configuration changes
• starting activity explicitly"– new Intent(context, MyActivity.class)!
• starting activity implicitly"– new Intent(Intent.ACTION_VIEW,
Uri.parse(“http://developer.android.com”))!
• starting activity for result
Intent & Activity
• defined by a hierarchy of views"
• layouts = containers"– LinearLayout, RelativeLayout, FrameLayout, ...
User Interface
• widgets"
– UI objects"
– Button, TextView, EditText, RadioButton, ..."
–WebView
User Interface
• list widgets"
– subclasses of AdapterView"
– display a list of items"
– use adapter to bind list do data"– ListView, GridView, Spinner, ...
User Interface
• provide data for Adapter views"
• are responsible for the creation of items
Adapters
• drawables"
– bitmaps"
– 9-patch png"
– state lists"
– layer lists"
– shape drawables
Resources
• layout"
• strings"
• colors"
• menus"
• dimensions"
• animations
Resources
• arrays"
• ids"
• raw"
• xml"
• ...
Resources
Screen sizes and densities
• How to handle different screen sizes and densities?
Screen sizes and densities
• resources can be created in several versions"
– the best version is selected according to current device configuration in runtime
Resources
• resource units"
– dp - density-independent pixel"
– sp - scale-independent pixel (for fonts)"
– never use px!!!
Resources
• suffixes for resource folders"
– drawables, drawable-mdpi, ..."
– values, values-cs"
– layout, layout-sw640dp"
– drawable-hdpi-v11
Resource qualifiers
• screen density - ldpi, mdpi, hdpi, xhdpi, ..."
• screen size - small, normal, large, xlarge"
• screen orientation - port, land"
• language - en, cs, sk, en-rGB…"
• version - v11, v14, ...
Resource qualifiers
• since Android 3.2"
• w<N>dp - available screen width, w600dp"
• h<N>dp - available screen heights, h720dp"
• sw<N>dp - smallest width (does not change with orientation)
Resource qualifiers
• accessed from code via generated R.java file and resource ids"– view.findViewById(R.id.txt_name)!
– txtName.setText(R.string.txt_name_label)
Resources
Localization?
• How to handle different API levels available on different devices?
Android version fragmentation
• build target"
– API level the app is compiled against"
• AndroidManifest.xml"– <uses-sdk android:minSdkVersion="8"
android:targetSdkVersion="16" />
Android version fragmentation
• handling versions in code"if (Build.VERSION.SDK_INT < Build.VERSION_CODES.GINGERBREAD) {!
! // code for Android < 2.3!
}
Android version fragmentation
private boolean functionalitySupported = false;!
static {!
try {!
checkFunctionalitySupported();!
} catch (NoClassDefFoundError e) {!
!functionalitySupported = false;!
}!
}!
private static void checkFunctionalitySupported() throws ! NoClassDefFoundError {!
! functionalitySupported = android.app.Fragment.class != null;!
}!
Android version fragmentation
• main thread = UI thread"
• do not ever block the UI thread!!!"
• use worker threads for time consuming operations"
• UI toolkit not thread safe - never manipulate UI from a worker thread
Threads
• java.util.logging.Logger
• android.util.Log
Logging
• simple non-modal information"• displayed for a short period of time"• doesn’t have user focus
Toast
SharedPreferences prefs = PreferenceManager!
! .getDefaultSharedPreferences(context);!
SharedPreferences prefs = !
! config.getSharedPreferences(PREFS_FILE_NAME,!
! Activity.MODE_PRIVATE);!
"int storedValue = prefs.getInt(SOME_KEY, defaultValue);!
"SharedPreferences.Editor editor = prefs.edit();!
editor.putInt(SOME_KEY, storedValue);!
editor.commit();
Preferences
• developer.android.com"• android-developers.blogspot.com"• source.android.com"• stackoverflow.com"• youtube.com/androiddevelopers"• svetandroida.cz
Sources
THE END