android 101 - introduction to android development

18
Android 101 Introduction to Android Development Andy Scherzinger Spare-time Android Dev AndyScherzinger 28th Jan. 2016

Upload: andy-scherzinger

Post on 16-Apr-2017

676 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: Android 101 - Introduction to Android Development

Android 101Introduction to Android Development

Andy ScherzingerSpare-time Android Dev AndyScherzinger 28th Jan. 2016

Page 2: Android 101 - Introduction to Android Development

Topics

• Dev Setup• File System Structure• Activities & Fragments• Handle Fragmentation• The little Things

Page 3: Android 101 - Introduction to Android Development

Dev Setup

ToolChain

Java Language Gradle Build System Android Studio IDE

Android Studio icon CC BY 2.5 Google Inc.

Page 4: Android 101 - Introduction to Android Development

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.

Page 5: Android 101 - Introduction to Android Development

Code to Binary

Java Byte Code Java Byte Code

Java Source Code Java Source Code

JavaCompiler

JavaCompiler

Dalvik Byte Code

DexCompiler

Java Byte Code Dalvik Byte Code

Dalvik VMAndroid Runtime (ART) Java VM

https://github.com/devacademy/android-fundamental-one/blob/master/modules/stack.md

Page 6: Android 101 - Introduction to Android Development

File System Structure

* Grid, List, UI Partials

• AndroidManifest.xml your App‘s definition

• build.gradle,… your build files

• src/java douh! your implementation

• src/res– anim custom animations– drawable graphics (pixel, patch9, vector-xml, etc.)– layout XML Layouts for Activities, Fragments, *-Items– menu XML Menu Files– raw any non-specific files– values l18n resources, static (array) data, configurations – xml Preference Screen, Sync Adapter, etc.

Page 7: Android 101 - Introduction to Android Development

Fragment Orchestration

Source: http://developer.android.com/training/basics/fragments/fragment-ui.html

Fragments are UI modules orchestrated via Activities

Fragment A

Fragment B Fragment A Fragment B

Activity 1 Activity 1 Activity 2

Intent

Page 8: Android 101 - Introduction to Android Development

Activities & Fragments – Activity Lifecycle

Source: http://developer.android.com/training/basics/activity-lifecycle/starting.html

Created

Started(visible)

Resumed(visible)

Paused(part. visible)

Stopped(hidden)

Destroyed

onResume()

onStart()

onStart()

onDestroy()

onStop()

onPause()onResume()

onRestart()

Android

1

2

3

• (1) Initialize UI• (2) Checks (e.g. GPS enabled)• (3) Activity running - Woohoo!

onCreate()

Page 9: Android 101 - Introduction to Android Development

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)

Page 10: Android 101 - Introduction to Android Development

Fragmentation

Resolution & Display Size

Android Versions

http://opensignal.com/reports/2015/08/android-fragmentation/ - http://developer.android.com/about/dashboards/index.html

Page 11: Android 101 - Introduction to Android Development

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

Page 12: Android 101 - Introduction to Android Development

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);

}…

Page 13: Android 101 - Introduction to Android Development

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'

}

Page 14: Android 101 - Introduction to Android Development

…and hack away…• UI: AppCompatButton, Drawer, Material Theme,

AppCompatDialog, …

• Functionality: e.g. ContextCompat.checkSelfPermission Android M Permission System Implementation

Backwards Compatibility via Support Lib

Page 15: Android 101 - Introduction to Android Development

The (many) little Things…Co

deU

IM

isc

• 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

Page 16: Android 101 - Introduction to Android Development

Let‘s check out some code

DEMO

Page 17: Android 101 - Introduction to Android Development

Topics we didn‘t talk about…

• Network / Communication• Persistence• Service / AsyncTask / Loader / Event Bus• Permission System• Sensors

Page 18: Android 101 - Introduction to Android Development

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/