This document provides an introduction to Android development. It covers topics such as setting up the development environment, understanding the file system structure, using activities and fragments, handling fragmentation across different devices, and some best practices. The document discusses tools like Android Studio, the build system, and debugging tools. It also explains concepts like the activity lifecycle, saving activity state, targeting different versions and configurations, and using support libraries for backwards compatibility.
4. Android Studio
Coding Environment & Debugger
SDK Manager
Gradle Integration
Android Device Monitor
Android Virtual Device Manager
Android Studio icon CC BY 2.5 Google Inc.
9. Activities & Fragments
– Activity State Save
Source: http://developer.android.com/training/basics/activity-lifecycle/recreating.html
Created Resumed
(visible)
Destroyed
onRestoreInstanceState()
onSaveInstanceState()
Android
2
3
1
• (1) save your state
• (2) / (3) restore the state
onCreate()
Resumed
(visible)
11. Target Versions and Sizes
• src/res
– drawable-hdpi-v11
used for Android 11 and up
– layout-w600dp-land
used in landscape w/ at least 600dp
width
12. Call Version depending code
• src/java
if (android.os.Build.VERSION.SDK_INT >=
android.os.Build.VERSION_CODES.HONEYCOMB) {
builder.setIconAttribute(android.R.attr.alertDialogIcon);
}…
13. Backwards Compatibility
via Support Lib
• Add libs to build.gradle
dependencies {
compile 'com.android.support:support-v4:23.1.1'
compile 'com.android.support:design:23.1.1'
compile 'com.android.support:appcompat-v7:23.1.1'
}
14. …and hack away…
• UI: AppCompatButton, Drawer, Material Theme,
AppCompatDialog, …
• Functionality: e.g.
ContextCompat.checkSelfPermission
Android M Permission System Implementation
Backwards Compatibility
via Support Lib
15. The (many) little Things…CodeUIMisc
• Use Support Lib right from the beginning
• Use Activities to manage Fragments
• Use Fragments to implement the UI
• onCreate is monitored by the Android Runtime and is part of the UI Thread
time consuming work needs to be done asynchronously (!)
• Style UI via style xml files not via specific view attributes in layout xml files
• Define a color palette (colors.xml), same for dimensions (dimens.xml)
• Prefix layout files (activity_, fragment_, listItem_, …)
• Re-use elements using <include> (and <merge> in the to be included layout file)
• compileTarget is your Frenemy, test thoroughly
• Don‘t set maxSdkVersion
• Be specific about your dependencies (2.2.0 not 2.2.+)
• Don‘t use too many libs (65k method limit!)
• Launcher icon(s) in mipmap folder when generating separate APKs for diff. densities
17. Topics we didn‘t talk about…
• Network / Communication
• Persistence
• Service / AsyncTask / Loader / Event Bus
• Permission System
• Sensors
18. Some links to get you started…
• Android Tutorials:
– http://developer.android.com/training/index.html
– https://www.udacity.com/courses/android
• Helpful Github Projects
– https://github.com/android10/Android-CleanArchitecture
– https://github.com/ribot/android-guidelines
– https://github.com/txusballesteros/Android-Clean-Testing
– https://github.com/ribot/android-boilerplate
• Exemplary Apps on Github to play around
– https://github.com/WhisperSystems/Signal-Android
– https://github.com/owncloud/android
• Icons:
– https://materialdesignicons.com/
Editor's Notes
Dalvik makes use of JIT (just in time) compilation. Thus each time the app is run, the part of the code required for its execution is going to becompiled to machine code at that moment.
ART compiles the Dalvik bytecode into a system-dependent binary during install (thus only once).