Introduction to Android Software Development T110 5130 Mobile

  • Slides: 57
Download presentation
Introduction to Android Software Development T-110. 5130 Mobile Systems programming Juha-Matti Liukkonen juha-matti. liukkonen@reaktor.

Introduction to Android Software Development T-110. 5130 Mobile Systems programming Juha-Matti Liukkonen juha-matti. [email protected] com

Introduction to Android Software Development 1. Introduction to Android 2. Development Tools 3. Interlude:

Introduction to Android Software Development 1. Introduction to Android 2. Development Tools 3. Interlude: The Design Step 4. Key Android Concepts 5. Putting Your App Together 6. Where to go next

Introduction to Android World’s most popular mobile operating system

Introduction to Android World’s most popular mobile operating system

Android = Linux • Linux kernel • Most Android specific mechanisms now included in

Android = Linux • Linux kernel • Most Android specific mechanisms now included in mainstream Linux kernel – wakelocks, binder, etc • Custom startup script mechanism • A simple, classic init. rc script solution • (Generic) applications written in Java • Applications do not need to care about underlying processor capabilities • Custom Java runtime (actually 2: Dalvik, Android Run. Time) • Optimized for low footprint = suitable for mobile devices

1. 400. 000 users • In 2015, 82% of new smartphones ran Android •

1. 400. 000 users • In 2015, 82% of new smartphones ran Android • 1. 4 billion users, 1. 5 million new devices activated every day • 54% total market share (and obviously rising) • 78% of Chinese market • 70% of tablet market • 4000+ different device models • 400+ device manufacturers • Also used in wearables, TVs and cars • Small segments so far

Most devices are never updated Main versions: 6. 0 2015 4. 4 W (watch)

Most devices are never updated Main versions: 6. 0 2015 4. 4 W (watch) 2015 5. x 2014 4. 4 2014 4. x 2012 -2013 4. 0 2011 -2012 3. 0 2011 2. x 2010

Many screen sizes, form factors Also – different interaction models!

Many screen sizes, form factors Also – different interaction models!

Variety pros & cons • Con: your software will not work properly on most

Variety pros & cons • Con: your software will not work properly on most Android devices • Choose your target devices wisely to reach your targeted users! • Customized layouts, graphics, interaction models needed to support different device types • Some handled via Play Store device filters, some by app manifest tags, some by resources, some you need to handle in your code • Pro: the same programming model works on all Android devices • If you know how to create software for an Android phone, you also know how to do it for tablets, smartwatches, cars and TVs

Takeaway • Android is basically Java on Linux • It’s easy to reach gazillions

Takeaway • Android is basically Java on Linux • It’s easy to reach gazillions of users with Android apps • Variety makes it hard to write good Android apps

Development Tools What you need to get your app done

Development Tools What you need to get your app done

The good and the bad news • Android Studio contains everything you need (yay

The good and the bad news • Android Studio contains everything you need (yay 2016!) • …just that it usually doesn’t contain it by default • For very simple apps, only for latest devices, defaults are OK • So, after Android Studio installation, remember to: • Configure -> SDK Manager • Install the Android versions you want to build software for • Also advisable to install the most common support libraries

Getting ready to do software • Press ”OK” – now your environment is set

Getting ready to do software • Press ”OK” – now your environment is set up • Android Studio will generate application skeletons for common application types for you • All you need to do is …”fill in the details”

Now things get interesting • What to choose as Activity? • What does your

Now things get interesting • What to choose as Activity? • What does your software actually need to do? • This is the stage when we usually do…

Interlude: The Design Step The critical step before actually writing any software (nothing to

Interlude: The Design Step The critical step before actually writing any software (nothing to do with Android as such)

Understand your use case • What problem does your app solve? • For whom?

Understand your use case • What problem does your app solve? • For whom? (Concrete example, no abstract persons!) • In which situation does the problem occur? • How does the user launch your app in that situation? • How does your app fulfill the user’s need?

Example: Adhoc Ideas • Problem: helping ad-hoc ideas be stored (eg. app ideas!) •

Example: Adhoc Ideas • Problem: helping ad-hoc ideas be stored (eg. app ideas!) • User: my colleague Antti (will use him for testing) • Where: in public transport, during work commutes (noisy environment so audio recording isn’t polite & doesn’t work) • Launch: shortcut icon on home screen • Fulfillment: it’s easy to write free-form text immediately

Identify & prioritize features 1. Open up, instantly ready for writing 2. Autosave entered

Identify & prioritize features 1. Open up, instantly ready for writing 2. Autosave entered text 3. Multiple notes can be saved 4. Any saved note can be opened up for reading 5. Any saved note can be emailed 6. Any saved note can be deleted 7. Bold and italic text 8. Email recipients can be taken from the address book 9. … This is clearly our priority #1 – if the app has this feature, it is already useful to Antti

Draft the user interface • Pen and paper are good – low cost, quick

Draft the user interface • Pen and paper are good – low cost, quick iterations • Build a runnable app from your doodles using POP • Online wireframe apps also available: Fluid, In. Design • Test your design with a real user! • Clickable prototype (POP, Fluid, In. Design) or just flip paper pics • Is your assumption about the need valid? • Is your assumption about the 1 st feature workflow valid?

Incremental design • Split non-trivial features into clear workflow steps • Design the simplest

Incremental design • Split non-trivial features into clear workflow steps • Design the simplest possible implementation for each step • Think how each step can be improved later on (if needed) • Implement the simplest variant end-to-end • Now go test it with the real user – what’s the user’s priority, which step would benefit most from an improvement? • Does the user benefit more from an improvement to the existing minimal workflow, or from a new feature?

User story slicing By Arto Eskelinen, see slideshare. com

User story slicing By Arto Eskelinen, see slideshare. com

Takeaway • Think about your app before coding it • Test your concept with

Takeaway • Think about your app before coding it • Test your concept with a real user • Paper or wireframe apps are good for getting feedback • Implement something simple end-to-end first, add complexity later, when it has value

Key Android Concepts What you need to know about Android app structure

Key Android Concepts What you need to know about Android app structure

Intents launch Activities • Each screen with a user interface is an Activity •

Intents launch Activities • Each screen with a user interface is an Activity • A note writing screen, a list of notes, app settings, … • The user is focused on doing one thing • A component in your app implements one Activity • Your app usually has multiple Activities (so, also multiple components) • Components invoke other Activities using Intents • Simply pass an Intent object to start. Activity() • Activities in other apps can also be invoked – for example, viewing web pages can invoke Activity in the browser app • Your app can publish any Activity it implements via its manifest file

Non-interactive activities • A Service is a component running in the background • Playing

Non-interactive activities • A Service is a component running in the background • Playing music, fetching data, mining bitcoin, etc. • Another component can use bind. Service() to interact with it • A Content. Provider is a shared data manager • A music library, text notes, search results etc. • Rich API inherited from the Content. Provider class • A Broadcast. Receiver listens for system state changes • Battery low, network connection lost, memory low, etc. • May eg. trigger autosave, show an icon in status bar, lock the screen

Declaring public activities This is the application manifest XML file, generated by Android Studio

Declaring public activities This is the application manifest XML file, generated by Android Studio for you

Filtering Intents you can serve

Filtering Intents you can serve

Declaring your requirements Devices that don’t fulfill your manifest requirements can’t even install the

Declaring your requirements Devices that don’t fulfill your manifest requirements can’t even install the app from Play Store.

Non-code elements • Resources = images, view layout, localization text, etc. • Stored under

Non-code elements • Resources = images, view layout, localization text, etc. • Stored under the res/ subdirectory in your app • Drawables (= images) in res/drawables/ • Localized files in res/subdirectory-languagecode/ • You can provide different layouts & images for different device types • Provide resource file variants for different resolutions, aspect ratios and localizations • The system automatically chooses the best matching resources

Putting Your App Together Making it all work and run on your device

Putting Your App Together Making it all work and run on your device

Getting to the beef • You have validated your app concept with the user?

Getting to the beef • You have validated your app concept with the user? • You have chosen your first feature? • You have tested your wireframe mockup with the user? • You have some idea about Activities, Intents, the manifest file, and resources? • You have installed Android Studio? • Good: then let’s get back to ”Start a new Project”… let’s click it all together!

Give your app a name here

Give your app a name here

Now you need to decide which device types and versions to support…

Now you need to decide which device types and versions to support…

Several template Activities are available. We’ll build our own so choose Empty!

Several template Activities are available. We’ll build our own so choose Empty!

Main. Activity is a good name, just click Finish!

Main. Activity is a good name, just click Finish!

This skeleton is automatically generated for us

This skeleton is automatically generated for us

Click on the left at 1: Project to find all the elements of your

Click on the left at 1: Project to find all the elements of your app

The manifest maps the Launcher’s start-up action (”MAIN”) to your Main. Activity

The manifest maps the Launcher’s start-up action (”MAIN”) to your Main. Activity

Now select your layout, the device view appears to the right. Here is the

Now select your layout, the device view appears to the right. Here is the layout object. Select and delete the default Text. View

When done, press Play! Drag the Multiline Text from the widget palette on top

When done, press Play! Drag the Multiline Text from the widget palette on top of your Relative. Layout and resize to fit screen.

Selecting the device to run on • If you have a real Android device

Selecting the device to run on • If you have a real Android device • Enable Developer Mode in the Android Settings app • In 4. 2+, go to About device, tap Build Number 7 times (really!) • Connect it to your PC/Mac with a USB cable • Select the device from the pop-up that appears after Play • If you don’t • Select emulator, and choose the device type to emulate • Note: it’s a good idea to test on all device variants you wish to support, so you may want to use the emulator for other types even if you have some real device

The Adhoc Ideas app, 1 st priority feature ready for user testing! Multitasking, limited

The Adhoc Ideas app, 1 st priority feature ready for user testing! Multitasking, limited autosave, etc provided by system.

Drag a button to your Layout, give it a label Resize the UI elements

Drag a button to your Layout, give it a label Resize the UI elements to fit

The editor will help you add the imports Write a function to implement desired

The editor will help you add the imports Write a function to implement desired behavior (e. g. send email)

In layout view, select the button, then select your new function as its on.

In layout view, select the button, then select your new function as its on. Click event handler

Next steps • Adding useful functionality • Advertisements!, billing per-typed-letter, … • Plenty of

Next steps • Adding useful functionality • Advertisements!, billing per-typed-letter, … • Plenty of useful APIs available in Google Services library • Making it pretty and natural to use • Study the Google Material Design guidelines • Add drawable resources to have image backgrounds etc • Optimizing UI layout for different device types • Create resolution specific layout XML files • Remember resolution variants of your drawables

Where to go next Where to find additional information

Where to go next Where to find additional information

First place to visit This is the treasure trove

First place to visit This is the treasure trove

Start from Training or API Guides, also do look at the Design page

Start from Training or API Guides, also do look at the Design page

Developer Reference is where most Android developers spend their days…

Developer Reference is where most Android developers spend their days…

This is where you get to distribute and sell your app via the Play

This is where you get to distribute and sell your app via the Play Store!

Thank You! Juha-Matti Liukkonen juha-matti. liukkonen@reaktor. com

Thank You! Juha-Matti Liukkonen juha-matti. [email protected] com