Android Studio 3.6 Development Essentials - Kotlin Edition - Neil Smyth - E-Book

Android Studio 3.6 Development Essentials - Kotlin Edition E-Book

Neil Smyth

0,0
34,79 €

-100%
Sammeln Sie Punkte in unserem Gutscheinprogramm und kaufen Sie E-Books und Hörbücher mit bis zu 100% Rabatt.
Mehr erfahren.
Beschreibung

Update your Android Studio skills and build modern Android applications using Kotlin

Key Features

  • Set up Android development and testing environments
  • Gain core knowledge of the Kotlin programming language
  • Study the design of Android applications and its user interfaces in-depth

Book Description

The popularity of Kotlin as an Android-compatible language keeps growing every day. This book will help you build your own Android applications using Kotlin.

Android Studio 3.6 Development Essentials – Kotlin Edition first shows you how to install Android development and test environments on different operating systems. Next, you will create an Android app and a virtual device in Android Studio and install an Android application on an emulator. You will test apps on emulators and on physical Android devices. Next, you'll explore the features of Android Studio 3.6, Android 10, and Android architecture. The focus then shifts to the Kotlin language. You'll be given an overview of Kotlin, and practice converting code from Java to Kotlin. You'll also explore data types, operators, expressions, loops, functions, and the basics of OOP in Kotlin. The book will then cover Android Jetpack and how to create an example app project using the ViewModel component. You'll study advanced topics such as views and widget implementation, multi-window support integration, and biometric authentication. Finally, you will learn to upload your app to the Google Play Console and handle the build process with Gradle.

By the end of this book, you will have gained the knowledge and skills required to develop powerful Android applications using Kotlin.

What you will learn

  • Build reliable apps with less error-prone code using Kotlin
  • Use Java-based Android libraries in Kotlin
  • Reduce the amount of code using Android Jetpack
  • Explore unique ways to handle single and multi-touch events
  • Use Gesture libraries to implement gesture and pinch recognition systems
  • Increase your app visibility with app links

Who this book is for

This book is ideal for anyone who wants to learn how to develop powerful Android Applications using Kotlin and Android Studio 3.6. A basic understanding of Kotlin and Android SDK is recommended.

Sie lesen das E-Book in den Legimi-Apps auf:

Android
iOS
von Legimi
zertifizierten E-Readern

Seitenzahl: 1078

Veröffentlichungsjahr: 2020

Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Android Studio 3.6

Development Essentials

Kotlin Edition

Android Studio 3.6 Development Essentials – Kotlin Edition

ISBN-13: 978-1-951442-13-2

© 2020 Neil Smyth / Payload Media, Inc. All Rights Reserved.

This book is provided for personal use only. Unauthorized use, reproduction and/or distribution strictly prohibited. All rights reserved.

The content of this book is provided for informational purposes only. Neither the publisher nor the author offers any warranties or representation, express or implied, with regard to the accuracy of information contained in this book, nor do they accept any liability for any loss or damage arising from any errors or omissions.

This book contains trademarked terms that are used solely for editorial purposes and to the benefit of the respective trademark owner. The terms used within this book are not intended as infringement of any trademarks.

Rev: 1.0

Table of Contents

1. Introduction

1.1 Downloading the Code Samples

1.2 Feedback

1.3 Errata

2. Setting up an Android Studio Development Environment

2.1 System Requirements

2.2 Downloading the Android Studio Package

2.3 Installing Android Studio

2.3.1 Installation on Windows

2.3.2 Installation on macOS

2.3.3 Installation on Linux

2.4 The Android Studio Setup Wizard

2.5 Installing Additional Android SDK Packages

2.6 Making the Android SDK Tools Command-line Accessible

2.6.1 Windows 7

2.6.2 Windows 8.1

2.6.3 Windows 10

2.6.4 Linux

2.6.5 macOS

2.7 Android Studio Memory Management

2.8 Updating Android Studio and the SDK

2.9 Summary

3. Creating an Example Android App in Android Studio

3.1 About the Project

3.2 Creating a New Android Project

3.3 Creating an Activity

3.4 Defining the Project and SDK Settings

3.5 Modifying the Example Application

3.6 Modifying the User Interface

3.7 Reviewing the Layout and Resource Files

3.8 Adding Interaction

3.9 Summary

4. Creating an Android Virtual Device (AVD) in Android Studio

4.1 About Android Virtual Devices

4.2 Creating a New AVD

4.3 Starting the Emulator

4.4 Running the Application in the AVD

4.5 Stopping a Running Application

4.6 Supporting Dark Theme

4.7 AVD Command-line Creation

4.8 Android Virtual Device Configuration Files

4.9 Moving and Renaming an Android Virtual Device

4.10 Summary

5. Using and Configuring the Android Studio AVD Emulator

5.1 The Emulator Environment

5.2 The Emulator Toolbar Options

5.3 Working in Zoom Mode

5.4 Resizing the Emulator Window

5.5 Extended Control Options

5.5.1 Location

5.5.2 Displays

5.5.3 Cellular

5.5.4 Camera

5.5.5 Battery

5.5.6 Phone

5.5.7 Directional Pad

5.5.8 Microphone

5.5.9 Fingerprint

5.5.10 Virtual Sensors

5.5.11 Snapshots

5.5.12 Record and Playback

5.5.13 Google Play

5.5.14 Settings

5.5.15 Help

5.6 Working with Snapshots

5.7 Configuring Fingerprint Emulation

5.8 Summary

6. A Tour of the Android Studio User Interface

6.1 The Welcome Screen

6.2 The Main Window

6.3 The Tool Windows

6.4 Android Studio Keyboard Shortcuts

6.5 Switcher and Recent Files Navigation

6.6 Changing the Android Studio Theme

6.7 Summary

7. Testing Android Studio Apps on a Physical Android Device

7.1 An Overview of the Android Debug Bridge (ADB)

7.2 Enabling ADB on Android based Devices

7.2.1 macOS ADB Configuration

7.2.2 Windows ADB Configuration

7.2.3 Linux adb Configuration

7.3 Testing the adb Connection

7.4 Summary

8. The Basics of the Android Studio Code Editor

8.1 The Android Studio Editor

8.2 Splitting the Editor Window

8.3 Code Completion

8.4 Statement Completion

8.5 Parameter Information

8.6 Parameter Name Hints

8.7 Code Generation

8.8 Code Folding

8.9 Quick Documentation Lookup

8.10 Code Reformatting

8.11 Finding Sample Code

8.12 Summary

9. An Overview of the Android Architecture

9.1 The Android Software Stack

9.2 The Linux Kernel

9.3 Android Runtime – ART

9.4 Android Libraries

9.4.1 C/C++ Libraries

9.5 Application Framework

9.6 Applications

9.7 Summary

10. The Anatomy of an Android Application

10.1 Android Activities

10.2 Android Fragments

10.3 Android Intents

10.4 Broadcast Intents

10.5 Broadcast Receivers

10.6 Android Services

10.7 Content Providers

10.8 The Application Manifest

10.9 Application Resources

10.10 Application Context

10.11 Summary

11. An Introduction to Kotlin

11.1 What is Kotlin?

11.2 Kotlin and Java

11.3 Converting from Java to Kotlin

11.4 Kotlin and Android Studio

11.5 Experimenting with Kotlin

11.6 Semi-colons in Kotlin

11.7 Summary

12. Kotlin Data Types,Variables and Nullability

12.1 Kotlin Data Types

12.1.1 Integer Data Types

12.1.2 Floating Point Data Types

12.1.3 Boolean Data Type

12.1.4 Character Data Type

12.1.5 String Data Type

12.1.6 Escape Sequences

12.2 Mutable Variables

12.3 Immutable Variables

12.4 Declaring Mutable and Immutable Variables

12.5 Data Types are Objects

12.6 Type Annotations and Type Inference

12.7 Nullable Type

12.8 The Safe Call Operator

12.9 Not-Null Assertion

12.10 Nullable Types and the let Function

12.11 Late Initialization (lateinit)

12.12 The Elvis Operator

12.13 Type Casting and Type Checking

12.14 Summary

13. Kotlin Operators and Expressions

13.1 Expression Syntax in Kotlin

13.2 The Basic Assignment Operator

13.3 Kotlin Arithmetic Operators

13.4 Augmented Assignment Operators

13.5 Increment and Decrement Operators

13.6 Equality Operators

13.7 Boolean Logical Operators

13.8 Range Operator

13.9 Bitwise Operators

13.9.1 Bitwise Inversion

13.9.2 Bitwise AND

13.9.3 Bitwise OR

13.9.4 Bitwise XOR

13.9.5 Bitwise Left Shift

13.9.6 Bitwise Right Shift

13.10 Summary

14. Kotlin Flow Control

14.1 Looping Flow Control

14.1.1 The Kotlin for-in Statement

14.1.2 The while Loop

14.1.3 The do ... while loop

14.1.4 Breaking from Loops

14.1.5 The continue Statement

14.1.6 Break and Continue Labels

14.2 Conditional Flow Control

14.2.1 Using the if Expressions

14.2.2 Using if ... else … Expressions

14.2.3 Using if ... else if ... Expressions

14.2.4 Using the when Statement

14.3 Summary

15. An Overview of Kotlin Functions and Lambdas

15.1 What is a Function?

15.2 How to Declare a Kotlin Function

15.3 Calling a Kotlin Function

15.4 Single Expression Functions

15.5 Local Functions

15.6 Handling Return Values

15.7 Declaring Default Function Parameters

15.8 Variable Number of Function Parameters

15.9 Lambda Expressions

15.10 Higher-order Functions

15.11 Summary

16. The Basics of Object Oriented Programming in Kotlin

16.1 What is an Object?

16.2 What is a Class?

16.3 Declaring a Kotlin Class

16.4 Adding Properties to a Class

16.5 Defining Methods

16.6 Declaring and Initializing a Class Instance

16.7 Primary and Secondary Constructors

16.8 Initializer Blocks

16.9 Calling Methods and Accessing Properties

16.10 Custom Accessors

16.11 Nested and Inner Classes

16.12 Companion Objects

16.13 Summary

17. An Introduction to Kotlin Inheritance and Subclassing

17.1 Inheritance, Classes and Subclasses

17.2 Subclassing Syntax

17.3 A Kotlin Inheritance Example

17.4 Extending the Functionality of a Subclass

17.5 Overriding Inherited Methods

17.6 Adding a Custom Secondary Constructor

17.7 Using the SavingsAccount Class

17.8 Summary

18. An Overview of Android View Binding

18.1 Find By View and Synthetic Properties

18.2 View Bindings

18.3 Converting the AndroidSample Project

18.4 Enabling View Binding

18.5 Using View Bindings

18.6 Choosing an Option

18.7 Summary

19. Understanding Android Application and Activity Lifecycles

19.1 Android Applications and Resource Management

19.2 Android Process States

19.2.1 Foreground Process

19.2.2 Visible Process

19.2.3 Service Process

19.2.4 Background Process

19.2.5 Empty Process

19.3 Inter-Process Dependencies

19.4 The Activity Lifecycle

19.5 The Activity Stack

19.6 Activity States

19.7 Configuration Changes

19.8 Handling State Change

19.9 Summary

20. Handling Android Activity State Changes

20.1 New vs. Old Lifecycle Techniques

20.2 The Activity and Fragment Classes

20.3 Dynamic State vs. Persistent State

20.4 The Android Lifecycle Methods

20.5 Lifetimes

20.6 Foldable Devices and Multi-Resume

20.7 Disabling Configuration Change Restarts

20.8 Lifecycle Method Limitations

20.9 Summary

21. Android Activity State Changes by Example

21.1 Creating the State Change Example Project

21.2 Designing the User Interface

21.3 Overriding the Activity Lifecycle Methods

21.4 Filtering the Logcat Panel

21.5 Running the Application

21.6 Experimenting with the Activity

21.7 Summary

22. Saving and Restoring the State of an Android Activity

22.1 Saving Dynamic State

22.2 Default Saving of User Interface State

22.3 The Bundle Class

22.4 Saving the State

22.5 Restoring the State

22.6 Testing the Application

22.7 Summary

23. Understanding Android Views, View Groups and Layouts

23.1 Designing for Different Android Devices

23.2 Views and View Groups

23.3 Android Layout Managers

23.4 The View Hierarchy

23.5 Creating User Interfaces

23.6 Summary

24. A Guide to the Android Studio Layout Editor Tool

24.1 Basic vs. Empty Activity Templates

24.2 The Android Studio Layout Editor

24.3 Design Mode

24.4 The Palette

24.5 Design Mode and Layout Views

24.6 Code Mode

24.7 Split Mode

24.8 Setting Attributes

24.9 Converting Views

24.10 Displaying Sample Data

24.11 Creating a Custom Device Definition

24.12 Changing the Current Device

24.13 Multi Preview

24.14 Summary

25. A Guide to the Android ConstraintLayout

25.1 How ConstraintLayout Works

25.1.1 Constraints

25.1.2 Margins

25.1.3 Opposing Constraints

25.1.4 Constraint Bias

25.1.5 Chains

25.1.6 Chain Styles

25.2 Baseline Alignment

25.3 Working with Guidelines

25.4 Configuring Widget Dimensions

25.5 Working with Barriers

25.6 Ratios

25.7 ConstraintLayout Advantages

25.8 ConstraintLayout Availability

25.9 Summary

26. A Guide to using ConstraintLayout in Android Studio

26.1 Design and Layout Views

26.2 Autoconnect Mode

26.3 Inference Mode

26.4 Manipulating Constraints Manually

26.5 Adding Constraints in the Inspector

26.6 Viewing Constraints in the Attributes Window

26.7 Deleting Constraints

26.8 Adjusting Constraint Bias

26.9 Understanding ConstraintLayout Margins

26.10 The Importance of Opposing Constraints and Bias

26.11 Configuring Widget Dimensions

26.12 Adding Guidelines

26.13 Adding Barriers

26.14 Widget Group Alignment and Distribution

26.15 Converting other Layouts to ConstraintLayout

26.16 Summary

27. Working with ConstraintLayout Chains and Ratios in Android Studio

27.1 Creating a Chain

27.2 Changing the Chain Style

27.3 Spread Inside Chain Style

27.4 Packed Chain Style

27.5 Packed Chain Style with Bias

27.6 Weighted Chain

27.7 Working with Ratios

27.8 Summary

28. An Android Studio Layout Editor ConstraintLayout Tutorial

28.1 An Android Studio Layout Editor Tool Example

28.2 Creating a New Activity

28.3 Preparing the Layout Editor Environment

28.4 Adding the Widgets to the User Interface

28.5 Adding the Constraints

28.6 Testing the Layout

28.7 Using the Layout Inspector

28.8 Summary

29. Manual XML Layout Design in Android Studio

29.1 Manually Creating an XML Layout

29.2 Manual XML vs. Visual Layout Design

29.3 Summary

30. Managing Constraints using Constraint Sets

30.1 Kotlin Code vs. XML Layout Files

30.2 Creating Views

30.3 View Attributes

30.4 Constraint Sets

30.4.1 Establishing Connections

30.4.2 Applying Constraints to a Layout

30.4.3 Parent Constraint Connections

30.4.4 Sizing Constraints

30.4.5 Constraint Bias

30.4.6 Alignment Constraints

30.4.7 Copying and Applying Constraint Sets

30.4.8 ConstraintLayout Chains

30.4.9 Guidelines

30.4.10 Removing Constraints

30.4.11 Scaling

30.4.12 Rotation

30.5 Summary

31. An Android ConstraintSet Tutorial

31.1 Creating the Example Project in Android Studio

31.2 Adding Views to an Activity

31.3 Setting View Attributes

31.4 Creating View IDs

31.5 Configuring the Constraint Set

31.6 Adding the EditText View

31.7 Converting Density Independent Pixels (dp) to Pixels (px)

31.8 Summary

32. A Guide to using Apply Changes in Android Studio

32.1 Introducing Apply Changes

32.2 Understanding Apply Changes Options

32.3 Using Apply Changes

32.4 Configuring Apply Changes Fallback Settings

32.5 An Apply Changes Tutorial

32.6 Using Apply Code Changes

32.7 Using Apply Changes and Restart Activity

32.8 Using Run App

32.9 Summary

33. An Overview and Example of Android Event Handling

33.1 Understanding Android Events

33.2 Using the android:onClick Resource

33.3 Event Listeners and Callback Methods

33.4 An Event Handling Example

33.5 Designing the User Interface

33.6 The Event Listener and Callback Method

33.7 Consuming Events

33.8 Summary

34. Android Touch and Multi-touch Event Handling

34.1 Intercepting Touch Events

34.2 The MotionEvent Object

34.3 Understanding Touch Actions

34.4 Handling Multiple Touches

34.5 An Example Multi-Touch Application

34.6 Designing the Activity User Interface

34.7 Implementing the Touch Event Listener

34.8 Running the Example Application

34.9 Summary

35. Detecting Common Gestures using the Android Gesture Detector Class

35.1 Implementing Common Gesture Detection

35.2 Creating an Example Gesture Detection Project

35.3 Implementing the Listener Class

35.4 Creating the GestureDetectorCompat Instance

35.5 Implementing the onTouchEvent() Method

35.6 Testing the Application

35.7 Summary

36. Implementing Custom Gesture and Pinch Recognition on Android

36.1 The Android Gesture Builder Application

36.2 The GestureOverlayView Class

36.3 Detecting Gestures

36.4 Identifying Specific Gestures

36.5 Installing and Running the Gesture Builder Application

36.6 Creating a Gestures File

36.7 Creating the Example Project

36.8 Extracting the Gestures File from the SD Card

36.9 Adding the Gestures File to the Project

36.10 Designing the User Interface

36.11 Loading the Gestures File

36.12 Registering the Event Listener

36.13 Implementing the onGesturePerformed Method

36.14 Testing the Application

36.15 Configuring the GestureOverlayView

36.16 Intercepting Gestures

36.17 Detecting Pinch Gestures

36.18 A Pinch Gesture Example Project

36.19 Summary

37. An Introduction to Android Fragments

37.1 What is a Fragment?

37.2 Creating a Fragment

37.3 Adding a Fragment to an Activity using the Layout XML File

37.4 Adding and Managing Fragments in Code

37.5 Handling Fragment Events

37.6 Implementing Fragment Communication

37.7 Summary

38. Using Fragments in Android Studio - An Example

38.1 About the Example Fragment Application

38.2 Creating the Example Project

38.3 Creating the First Fragment Layout

38.4 Creating the First Fragment Class

38.5 Creating the Second Fragment Layout

38.6 Adding the Fragments to the Activity

38.7 Making the Toolbar Fragment Talk to the Activity

38.8 Making the Activity Talk to the Text Fragment

38.9 Testing the Application

38.10 Summary

39. Modern Android App Architecture with Jetpack

39.1 What is Android Jetpack?

39.2 The “Old” Architecture

39.3 Modern Android Architecture

39.4 The ViewModel Component

39.5 The LiveData Component

39.6 ViewModel Saved State

39.7 LiveData and Data Binding

39.8 Android Lifecycles

39.9 Repository Modules

39.10 Summary

40. An Android Jetpack ViewModel Tutorial

40.1 About the Project

40.2 Creating the ViewModel Example Project

40.3 Reviewing the Project

40.3.1 The Main Activity

40.3.2 The Content Fragment

40.3.3 The ViewModel

40.4 Designing the Fragment Layout

40.5 Implementing the View Model

40.6 Associating the Fragment with the View Model

40.7 Modifying the Fragment

40.8 Accessing the ViewModel Data

40.9 Testing the Project

40.10 Summary

41. An Android Jetpack LiveData Tutorial

41.1 LiveData - A Recap

41.2 Adding LiveData to the ViewModel

41.3 Implementing the Observer

41.4 Summary

42. An Overview of Android Jetpack Data Binding

42.1 An Overview of Data Binding

42.2 The Key Components of Data Binding

42.2.1 The Project Build Configuration

42.2.2 The Data Binding Layout File

42.2.3 The Layout File Data Element

42.2.4 The Binding Classes

42.2.5 Data Binding Variable Configuration

42.2.6 Binding Expressions (One-Way)

42.2.7 Binding Expressions (Two-Way)

42.2.8 Event and Listener Bindings

42.3 Summary

43. An Android Jetpack Data Binding Tutorial

43.1 Removing the Redundant Code

43.2 Enabling Data Binding

43.3 Adding the Layout Element

43.4 Adding the Data Element to Layout File

43.5 Working with the Binding Class

43.6 Assigning the ViewModel Instance to the Data Binding Variable

43.7 Adding Binding Expressions

43.8 Adding the Conversion Method

43.9 Adding a Listener Binding

43.10 Testing the App

43.11 Summary

44. An Android ViewModel Saved State Tutorial

44.1 Understanding ViewModel State Saving

44.2 Implementing ViewModel State Saving

44.3 Saving and Restoring State

44.4 Adding Saved State Support to the ViewModelDemo Project

44.5 Summary

45. Working with Android Lifecycle-Aware Components

45.1 Lifecycle Awareness

45.2 Lifecycle Owners

45.3 Lifecycle Observers

45.4 Lifecycle States and Events

45.5 Summary

46. An Android Jetpack Lifecycle Awareness Tutorial

46.1 Creating the Example Lifecycle Project

46.2 Creating a Lifecycle Observer

46.3 Adding the Observer

46.4 Testing the Observer

46.5 Creating a Lifecycle Owner

46.6 Testing the Custom Lifecycle Owner

46.7 Summary

47. An Overview of the Navigation Architecture Component

47.1 Understanding Navigation

47.2 Declaring a Navigation Host

47.3 The Navigation Graph

47.4 Accessing the Navigation Controller

47.5 Triggering a Navigation Action

47.6 Passing Arguments

47.7 Summary

48. An Android Jetpack Navigation Component Tutorial

48.1 Creating the NavigationDemo Project

48.2 Adding Navigation to the Build Configuration

48.3 Creating the Navigation Graph Resource File

48.4 Declaring a Navigation Host

48.5 Adding Navigation Destinations

48.6 Designing the Destination Fragment Layouts

48.7 Adding an Action to the Navigation Graph

48.8 Implement the OnFragmentInteractionListener

48.9 Triggering the Action

48.10 Passing Data Using Safeargs

48.11 Summary

49. Creating and Managing Overflow Menus on Android

49.1 The Overflow Menu

49.2 Creating an Overflow Menu

49.3 Displaying an Overflow Menu

49.4 Responding to Menu Item Selections

49.5 Creating Checkable Item Groups

49.6 Menus and the Android Studio Menu Editor

49.7 Creating the Example Project

49.8 Designing the Menu

49.9 Modifying the onOptionsItemSelected() Method

49.10 Testing the Application

49.11 Summary

50. Animating User Interfaces with the Android Transitions Framework

50.1 Introducing Android Transitions and Scenes

50.2 Using Interpolators with Transitions

50.3 Working with Scene Transitions

50.4 Custom Transitions and TransitionSets in Code

50.5 Custom Transitions and TransitionSets in XML

50.6 Working with Interpolators

50.7 Creating a Custom Interpolator

50.8 Using the beginDelayedTransition Method

50.9 Summary

51. An Android Transition Tutorial using beginDelayedTransition

51.1 Creating the Android Studio TransitionDemo Project

51.2 Preparing the Project Files

51.3 Implementing beginDelayedTransition Animation

51.4 Customizing the Transition

51.5 Summary

52. Implementing Android Scene Transitions – A Tutorial

52.1 An Overview of the Scene Transition Project

52.2 Creating the Android Studio SceneTransitions Project

52.3 Identifying and Preparing the Root Container

52.4 Designing the First Scene

52.5 Designing the Second Scene

52.6 Entering the First Scene

52.7 Loading Scene 2

52.8 Implementing the Transitions

52.9 Adding the Transition File

52.10 Loading and Using the Transition Set

52.11 Configuring Additional Transitions

52.12 Summary

53. Working with the Floating Action Button and Snackbar

53.1 The Material Design

53.2 The Design Library

53.3 The Floating Action Button (FAB)

53.4 The Snackbar

53.5 Creating the Example Project

53.6 Reviewing the Project

53.7 Removing Navigation Features

53.8 Changing the Floating Action Button

53.9 Adding the ListView to the Content Layout

53.10 Adding Items to the ListView

53.11 Adding an Action to the Snackbar

53.12 Summary

54. Creating a Tabbed Interface using the TabLayout Component

54.1 An Introduction to the ViewPager

54.2 An Overview of the TabLayout Component

54.3 Creating the TabLayoutDemo Project

54.4 Creating the First Fragment

54.5 Duplicating the Fragments

54.6 Adding the TabLayout and ViewPager

54.7 Creating the Pager Adapter

54.8 Performing the Initialization Tasks

54.9 Testing the Application

54.10 Customizing the TabLayout

54.11 Displaying Icon Tab Items

54.12 Summary

55. Working with the RecyclerView and CardView Widgets

55.1 An Overview of the RecyclerView

55.2 An Overview of the CardView

55.3 Summary

56. An Android RecyclerView and CardView Tutorial

56.1 Creating the CardDemo Project

56.2 Modifying the Basic Activity Project

56.3 Designing the CardView Layout

56.4 Adding the RecyclerView

56.5 Creating the RecyclerView Adapter

56.6 Adding the Image Files

56.7 Initializing the RecyclerView Component

56.8 Testing the Application

56.9 Responding to Card Selections

56.10 Summary

57. A Layout Editor Sample Data Tutorial

57.1 Adding Sample Data to a Project

57.2 Using Custom Sample Data

57.3 Summary

58. Working with the AppBar and Collapsing Toolbar Layouts

58.1 The Anatomy of an AppBar

58.2 The Example Project

58.3 Coordinating the RecyclerView and Toolbar

58.4 Introducing the Collapsing Toolbar Layout

58.5 Changing the Title and Scrim Color

58.6 Summary

59. An Android Studio Master/Detail Flow Tutorial

59.1 The Master/Detail Flow

59.2 Creating a Master/Detail Flow Activity

59.3 The Anatomy of the Master/Detail Flow Template

59.4 Modifying the Master/Detail Flow Template

59.5 Changing the Content Model

59.6 Changing the Detail Pane

59.7 Modifying the WebsiteDetailFragment Class

59.8 Modifying the WebsiteListActivity Class

59.9 Adding Manifest Permissions

59.10 Running the Application

59.11 Summary

60. An Overview of Android Intents

60.1 An Overview of Intents

60.2 Explicit Intents

60.3 Returning Data from an Activity

60.4 Implicit Intents

60.5 Using Intent Filters

60.6 Checking Intent Availability

60.7 Summary

61. Android Explicit Intents – A Worked Example

61.1 Creating the Explicit Intent Example Application

61.2 Designing the User Interface Layout for MainActivity

61.3 Creating the Second Activity Class

61.4 Designing the User Interface Layout for ActivityB

61.5 Reviewing the Application Manifest File

61.6 Creating the Intent

61.7 Extracting Intent Data

61.8 Launching ActivityB as a Sub-Activity

61.9 Returning Data from a Sub-Activity

61.10 Testing the Application

61.11 Summary

62. Android Implicit Intents – A Worked Example

62.1 Creating the Android Studio Implicit Intent Example Project

62.2 Designing the User Interface

62.3 Creating the Implicit Intent

62.4 Adding a Second Matching Activity

62.5 Adding the Web View to the UI

62.6 Obtaining the Intent URL

62.7 Modifying the MyWebView Project Manifest File

62.8 Installing the MyWebView Package on a Device

62.9 Testing the Application

62.10 Summary

63. Android Broadcast Intents and Broadcast Receivers

63.1 An Overview of Broadcast Intents

63.2 An Overview of Broadcast Receivers

63.3 Obtaining Results from a Broadcast

63.4 Sticky Broadcast Intents

63.5 The Broadcast Intent Example

63.6 Creating the Example Application

63.7 Creating and Sending the Broadcast Intent

63.8 Creating the Broadcast Receiver

63.9 Registering the Broadcast Receiver

63.10 Testing the Broadcast Example

63.11 Listening for System Broadcasts

63.12 Summary

64. A Basic Overview of Threads and AsyncTasks

64.1 An Overview of Threads

64.2 The Application Main Thread

64.3 Thread Handlers

64.4 A Basic AsyncTask Example

64.5 Subclassing AsyncTask

64.6 Testing the App

64.7 Canceling a Task

64.8 Summary

65. An Introduction to Kotlin Coroutines

65.1 What are Coroutines?

65.2 Threads vs Coroutines

65.3 Coroutine Scope

65.4 Suspend Functions

65.5 Coroutine Dispatchers

65.6 Coroutine Builders

65.7 Jobs

65.8 Coroutines – Suspending and Resuming

65.9 Returning Results from a Coroutine

65.10 Using withContext

65.11 Coroutine Channel Communication

65.12 Summary

66. An Android Kotlin Coroutines Tutorial

66.1 Creating the Coroutine Example Application

66.2 Adding Coroutine Support to the Project

66.3 Designing the User Interface

66.4 Implementing the SeekBar

66.5 Adding the Suspend Function

66.6 Implementing the launchCoroutines Method

66.7 Testing the App

66.8 Summary

67. An Overview of Android Started and Bound Services

67.1 Started Services

67.2 Intent Service

67.3 Bound Service

67.4 The Anatomy of a Service

67.5 Controlling Destroyed Service Restart Options

67.6 Declaring a Service in the Manifest File

67.7 Starting a Service Running on System Startup

67.8 Summary

68. Implementing an Android Started Service – A Worked Example

68.1 Creating the Example Project

68.2 Creating the Service Class

68.3 Adding the Service to the Manifest File

68.4 Starting the Service

68.5 Testing the IntentService Example

68.6 Using the Service Class

68.7 Creating the New Service

68.8 Modifying the User Interface

68.9 Running the Application

68.10 Using a Coroutine for the Service Task

68.11 Summary

69. Android Local Bound Services – A Worked Example

69.1 Understanding Bound Services

69.2 Bound Service Interaction Options

69.3 An Android Studio Local Bound Service Example

69.4 Adding a Bound Service to the Project

69.5 Implementing the Binder

69.6 Binding the Client to the Service

69.7 Completing the Example

69.8 Testing the Application

69.9 Summary

70. Android Remote Bound Services – A Worked Example

70.1 Client to Remote Service Communication

70.2 Creating the Example Application

70.3 Designing the User Interface

70.4 Implementing the Remote Bound Service

70.5 Configuring a Remote Service in the Manifest File

70.6 Launching and Binding to the Remote Service

70.7 Sending a Message to the Remote Service

70.8 Summary

71. An Android Notifications Tutorial

71.1 An Overview of Notifications

71.2 Creating the NotifyDemo Project

71.3 Designing the User Interface

71.4 Creating the Second Activity

71.5 Creating a Notification Channel

71.6 Creating and Issuing a Basic Notification

71.7 Launching an Activity from a Notification

71.8 Adding Actions to a Notification

71.9 Bundled Notifications

71.10 Summary

72. An Android Direct Reply Notification Tutorial

72.1 Creating the DirectReply Project

72.2 Designing the User Interface

72.3 Creating the Notification Channel

72.4 Building the RemoteInput Object

72.5 Creating the PendingIntent

72.6 Creating the Reply Action

72.7 Receiving Direct Reply Input

72.8 Updating the Notification

72.9 Summary

73. Foldable Devices and Multi-Window Support

73.1 Foldables and Multi-Window Support

73.2 Using a Foldable Emulator

73.3 Entering Multi-Window Mode

73.4 Enabling and using Freeform Support

73.5 Checking for Freeform Support

73.6 Enabling Multi-Window Support in an App

73.7 Specifying Multi-Window Attributes

73.8 Detecting Multi-Window Mode in an Activity

73.9 Receiving Multi-Window Notifications

73.10 Launching an Activity in Multi-Window Mode

73.11 Configuring Freeform Activity Size and Position

73.12 Summary

74. An Overview of Android SQLite Databases

74.1 Understanding Database Tables

74.2 Introducing Database Schema

74.3 Columns and Data Types

74.4 Database Rows

74.5 Introducing Primary Keys

74.6 What is SQLite?

74.7 Structured Query Language (SQL)

74.8 Trying SQLite on an Android Virtual Device (AVD)

74.9 The Android Room Persistence Library

74.10 Summary

75. The Android Room Persistence Library

75.1 Revisiting Modern App Architecture

75.2 Key Elements of Room Database Persistence

75.2.1 Repository

75.2.2 Room Database

75.2.3 Data Access Object (DAO)

75.2.4 Entities

75.2.5 SQLite Database

75.3 Understanding Entities

75.4 Data Access Objects

75.5 The Room Database

75.6 The Repository

75.7 In-Memory Databases

75.8 Summary

76. An Android TableLayout and TableRow Tutorial

76.1 The TableLayout and TableRow Layout Views

76.2 Creating the Room Database Project

76.3 Converting to a LinearLayout

76.4 Adding the TableLayout to the User Interface

76.5 Configuring the TableRows

76.6 Adding the Button Bar to the Layout

76.7 Adding the RecyclerView

76.8 Adjusting the Layout Margins

76.9 Summary

77. An Android Room Database and Repository Tutorial

77.1 About the RoomDemo Project

77.2 Modifying the Build Configuration

77.3 Building the Entity

77.4 Creating the Data Access Object

77.5 Adding the Room Database

77.6 Adding the Repository

77.7 Modifying the ViewModel

77.8 Creating the Product Item Layout

77.9 Adding the RecyclerView Adapter

77.10 Preparing the Main Fragment

77.11 Adding the Button Listeners

77.12 Adding LiveData Observers

77.13 Initializing the RecyclerView

77.14 Testing the RoomDemo App

77.15 Summary

78. Accessing Cloud Storage using the Android Storage Access Framework

78.1 The Storage Access Framework

78.2 Working with the Storage Access Framework

78.3 Filtering Picker File Listings

78.4 Handling Intent Results

78.5 Reading the Content of a File

78.6 Writing Content to a File

78.7 Deleting a File

78.8 Gaining Persistent Access to a File

78.9 Summary

79. An Android Storage Access Framework Example

79.1 About the Storage Access Framework Example

79.2 Creating the Storage Access Framework Example

79.3 Designing the User Interface

79.4 Declaring Request Codes

79.5 Creating a New Storage File

79.6 The onActivityResult() Method

79.7 Saving to a Storage File

79.8 Opening and Reading a Storage File

79.9 Testing the Storage Access Application

79.10 Summary

80. Implementing Video Playback on Android using the VideoView and MediaController Classes

80.1 Introducing the Android VideoView Class

80.2 Introducing the Android MediaController Class

80.3 Creating the Video Playback Example

80.4 Designing the VideoPlayer Layout

80.5 Downloading the Video File

80.6 Configuring the VideoView

80.7 Adding the MediaController to the Video View

80.8 Setting up the onPreparedListener

80.9 Summary

81. Android Picture-in-Picture Mode

81.1 Picture-in-Picture Features

81.2 Enabling Picture-in-Picture Mode

81.3 Configuring Picture-in-Picture Parameters

81.4 Entering Picture-in-Picture Mode

81.5 Detecting Picture-in-Picture Mode Changes

81.6 Adding Picture-in-Picture Actions

81.7 Summary

82. An Android Picture-in-Picture Tutorial

82.1 Adding Picture-in-Picture Support to the Manifest

82.2 Adding a Picture-in-Picture Button

82.3 Entering Picture-in-Picture Mode

82.4 Detecting Picture-in-Picture Mode Changes

82.5 Adding a Broadcast Receiver

82.6 Adding the PiP Action

82.7 Testing the Picture-in-Picture Action

82.8 Summary

83. Making Runtime Permission Requests in Android

83.1 Understanding Normal and Dangerous Permissions

83.2 Creating the Permissions Example Project

83.3 Checking for a Permission

83.4 Requesting Permission at Runtime

83.5 Providing a Rationale for the Permission Request

83.6 Testing the Permissions App

83.7 Summary

84. Android Audio Recording and Playback using MediaPlayer and MediaRecorder

84.1 Playing Audio

84.2 Recording Audio and Video using the MediaRecorder Class

84.3 About the Example Project

84.4 Creating the AudioApp Project

84.5 Designing the User Interface

84.6 Checking for Microphone Availability

84.7 Performing the Activity Initialization

84.8 Implementing the recordAudio() Method

84.9 Implementing the stopAudio() Method

84.10 Implementing the playAudio() method

84.11 Configuring and Requesting Permissions

84.12 Testing the Application

84.13 Summary

85. Working with the Google Maps Android API in Android Studio

85.1 The Elements of the Google Maps Android API

85.2 Creating the Google Maps Project

85.3 Obtaining Your Developer Signature

85.4 Adding the Apache HTTP Legacy Library Requirement

85.5 Testing the Application

85.6 Understanding Geocoding and Reverse Geocoding

85.7 Adding a Map to an Application

85.8 Requesting Current Location Permission

85.9 Displaying the User’s Current Location

85.10 Changing the Map Type

85.11 Displaying Map Controls to the User

85.12 Handling Map Gesture Interaction

85.12.1 Map Zooming Gestures

85.12.2 Map Scrolling/Panning Gestures

85.12.3 Map Tilt Gestures

85.12.4 Map Rotation Gestures

85.13 Creating Map Markers

85.14 Controlling the Map Camera

85.15 Summary

86. Printing with the Android Printing Framework

86.1 The Android Printing Architecture

86.2 The Print Service Plugins

86.3 Google Cloud Print

86.4 Printing to Google Drive

86.5 Save as PDF

86.6 Printing from Android Devices

86.7 Options for Building Print Support into Android Apps

86.7.1 Image Printing

86.7.2 Creating and Printing HTML Content

86.7.3 Printing a Web Page

86.7.4 Printing a Custom Document

86.8 Summary

87. An Android HTML and Web Content Printing Example

87.1 Creating the HTML Printing Example Application

87.2 Printing Dynamic HTML Content

87.3 Creating the Web Page Printing Example

87.4 Removing the Floating Action Button

87.5 Removing Navigation Features

87.6 Designing the User Interface Layout

87.7 Loading the Web Page into the WebView

87.8 Adding the Print Menu Option

87.9 Summary

88. A Guide to Android Custom Document Printing

88.1 An Overview of Android Custom Document Printing

88.1.1 Custom Print Adapters

88.2 Preparing the Custom Document Printing Project

88.3 Creating the Custom Print Adapter

88.4 Implementing the onLayout() Callback Method

88.5 Implementing the onWrite() Callback Method

88.6 Checking a Page is in Range

88.7 Drawing the Content on the Page Canvas

88.8 Starting the Print Job

88.9 Testing the Application

88.10 Summary

89. An Introduction to Android App Links

89.1 An Overview of Android App Links

89.2 App Link Intent Filters

89.3 Handling App Link Intents

89.4 Associating the App with a Website

89.5 Summary

90. An Android Studio App Links Tutorial

90.1 About the Example App

90.2 The Database Schema

90.3 Loading and Running the Project

90.4 Adding the URL Mapping

90.5 Adding the Intent Filter

90.6 Adding Intent Handling Code

90.7 Testing the App Link

90.8 Associating an App Link with a Web Site

90.9 Summary

91. A Guide to the Android Studio Profiler

91.1 Accessing the Android Profiler

91.2 Enabling Advanced Profiling

91.3 The Android Profiler Tool Window

91.4 The Sessions Panel

91.5 The CPU Profiler

91.6 Memory Profiler

91.7 Network Profiler

91.8 Energy Profiler

91.9 Summary

92. An Android Biometric Authentication Tutorial

92.1 An Overview of Biometric Authentication

92.2 Creating the Biometric Authentication Project

92.3 Configuring Device Fingerprint Authentication

92.4 Adding the Biometric Permission to the Manifest File

92.5 Designing the User Interface

92.6 Adding a Toast Convenience Method

92.7 Checking the Security Settings

92.8 Configuring the Authentication Callbacks

92.9 Adding the CancellationSignal

92.10 Starting the Biometric Prompt

92.11 Testing the Project

92.12 Summary

93. Creating, Testing and Uploading an Android App Bundle

93.1 The Release Preparation Process

93.2 Android App Bundles

93.3 Register for a Google Play Developer Console Account

93.4 Configuring the App in the Console

93.5 Enabling Google Play App Signing

93.6 Creating a Keystore File

93.7 Creating the Android App Bundle

93.8 Generating Test APK Files

93.9 Uploading the App Bundle to the Google Play Developer Console

93.10 Exploring the App Bundle

93.11 Managing Testers

93.12 Uploading New App Bundle Revisions

93.13 Analyzing the App Bundle File

93.14 Enabling Google Play Signing for an Existing App

93.15 Summary

94. An Overview of Android Dynamic Feature Modules

94.1 An Overview of Dynamic Feature Modules

94.2 Dynamic Feature Module Architecture

94.3 Creating a Dynamic Feature Module

94.4 Converting an Existing Module for Dynamic Delivery

94.5 Working with Dynamic Feature Modules

94.6 Handling Large Dynamic Feature Modules

94.7 Summary

95. An Android Studio Dynamic Feature Tutorial

95.1 Creating the DynamicFeature Project

95.2 Adding Dynamic Feature Support to the Project

95.3 Designing the Base Activity User Interface

95.4 Adding the Dynamic Feature Module

95.5 Reviewing the Dynamic Feature Module

95.6 Adding the Dynamic Feature Activity

95.7 Implementing the launchIntent() Method

95.8 Uploading the App Bundle for Testing

95.9 Implementing the installFeature() Method

95.10 Adding the Update Listener

95.11 Handling Large Downloads

95.12 Using Deferred Installation

95.13 Removing a Dynamic Module

95.14 Summary

96. An Overview of Gradle in Android Studio

96.1 An Overview of Gradle

96.2 Gradle and Android Studio

96.2.1 Sensible Defaults

96.2.2 Dependencies

96.2.3 Build Variants

96.2.4 Manifest Entries

96.2.5 APK Signing

96.2.6 ProGuard Support

96.3 The Top-level Gradle Build File

96.4 Module Level Gradle Build Files

96.5 Configuring Signing Settings in the Build File

96.6 Running Gradle Tasks from the Command-line

96.7 Summary

Index

1. Introduction

In 2018 Google introduced Android Jetpack to the developer community. Designed to make it quicker and easier to develop modern and reliable Android apps, Jetpack consists of a set of tools, libraries and architectural guidelines. The main elements of Android Jetpack consist of the Android Studio Integrated Development Environment (IDE), the Android Architecture Components and the Modern App Architecture Guidelines, all of which are covered in this latest edition of Android Studio Development Essentials.

Fully updated for Android Studio 3.6 and Android 10 (Q), the goal of this book is to teach the skills necessary to develop Android based applications using the Kotlin programming language.

Beginning with the basics, this book provides an outline of the steps necessary to set up an Android development and testing environment followed by an introduction to programming in Kotlin including data types, flow control, functions, lambdas and object-oriented programming.

An overview of Android Studio is included covering areas such as tool windows, the code editor and the Layout Editor tool. An introduction to the architecture of Android is followed by an in-depth look at the design of Android applications and user interfaces using the Android Studio environment.

Chapters are also included covering the Android Architecture Components including view models, lifecycle management, Room database access, app navigation, live data and data binding.

More advanced topics such as intents are also covered, as are touch screen handling, gesture recognition, and the recording and playback of audio. This edition of the book also covers printing, transitions, cloud-based file storage and foldable device support.

The concepts of material design are also covered in detail, including the use of floating action buttons, Snackbars, tabbed interfaces, card views, navigation drawers and collapsing toolbars.

In addition to covering general Android development techniques, the book also includes Google Play specific topics such as implementing maps using the Google Maps Android API, and submitting apps to the Google Play Developer Console.

Other key features of Android Studio 3.6 and Android 10 are also covered in detail including the Layout Editor, the ConstraintLayout and ConstraintSet classes, constraint chains and barriers and direct reply notifications.

Chapters also cover advanced features of Android Studio such as App Links, Dynamic Delivery, the Android Studio Profiler and Gradle build configuration.

Assuming you already have some programming experience, are ready to download Android Studio and the Android SDK, have access to a Windows, Mac or Linux system and ideas for some apps to develop, you are ready to get started.

1.1 Downloading the Code Samples

The source code and Android Studio project files for the examples contained in this book are available for download at:

https://www.ebookfrenzy.com/retail/as36kotlin/index.php

The steps to load a project from the code samples into Android Studio are as follows:

1. From the Welcome to Android Studio dialog, select the Open an existing Android Studio project option.

2. In the project selection dialog, navigate to and select the folder containing the project to be imported and click on OK.

1.2 Feedback

We want you to be satisfied with your purchase of this book. If you find any errors in the book, or have any comments, questions or concerns please contact us at [email protected].

1.3 Errata

While we make every effort to ensure the accuracy of the content of this book, it is inevitable that a book covering a subject area of this size and complexity may include some errors and oversights. Any known issues with the book will be outlined, together with solutions, at the following URL:

https://www.ebookfrenzy.com/errata/as36kotlin.html

In the event that you find an error not listed in the errata, please let us know by emailing our technical support team at [email protected]. They are there to help you and will work to resolve any problems you may encounter.

2. Setting up an Android Studio Development Environment

Before any work can begin on the development of an Android application, the first step is to configure a computer system to act as the development platform. This involves a number of steps consisting of installing the Android Studio Integrated Development Environment (IDE) which also includes the Android Software Development Kit (SDK), the Kotlin plug-in and OpenJDK Java development environment.

This chapter will cover the steps necessary to install the requisite components for Android application development on Windows, macOS and Linux based systems.

2.1 System Requirements

Android application development may be performed on any of the following system types:

•Windows 7/8/10 (32-bit or 64-bit though the Android emulator will only run on 64-bit systems)

•macOS 10.10 or later (Intel based systems only)

•ChromeOS device with Intel i5 or higher and minimum 8GB of RAM

•Linux systems with version 2.19 or later of GNU C Library (glibc)

•Minimum of 4GB of RAM (8GB is preferred)

•Approximately 4GB of available disk space

•1280 x 800 minimum screen resolution

2.2 Downloading the Android Studio Package

Most of the work involved in developing applications for Android will be performed using the Android Studio environment. The content and examples in this book were created based on Android Studio version 3.6 using the Android 10.0 (Q) API 29 SDK which, at the time writing are the current versions.

Android Studio is, however, subject to frequent updates so a newer version may have been released since this book was published.

The latest release of Android Studio may be downloaded from the primary download page which can be found at the following URL:

https://developer.android.com/studio/index.html

If this page provides instructions for downloading a newer version of Android Studio it is important to note that there may be some minor differences between this book and the software. A web search for Android Studio 3.6 should provide the option to download the older version in the event that these differences become a problem. Alternatively, visit the following web page to find Android Studio 3.6 in the archives:

https://developer.android.com/studio/archive

2.3 Installing Android Studio

Once downloaded, the exact steps to install Android Studio differ depending on the operating system on which the installation is being performed.

2.3.1 Installation on Windows

Locate the downloaded Android Studio installation executable file (named android-studio-ide-<version>-windows.exe) in a Windows Explorer window and double-click on it to start the installation process, clicking the Yes button in the User Account Control dialog if it appears.

Once the Android Studio setup wizard appears, work through the various screens to configure the installation to meet your requirements in terms of the file system location into which Android Studio should be installed and whether or not it should be made available to other users of the system. When prompted to select the components to install, make sure that the Android Studio and Android Virtual Device options are all selected.

Although there are no strict rules on where Android Studio should be installed on the system, the remainder of this book will assume that the installation was performed into C:\Program Files\Android\Android Studio and that the Android SDK packages have been installed into the user’s AppData\Local\Android\sdk sub-folder. Once the options have been configured, click on the Install button to begin the installation process.

On versions of Windows with a Start menu, the newly installed Android Studio can be launched from the entry added to that menu during the installation. The executable may be pinned to the task bar for easy access by navigating to the Android Studio\bin directory, right-clicking on the executable and selecting the Pin to Taskbar menu option. Note that the executable is provided in 32-bit (studio) and 64-bit (studio64) executable versions. If you are running a 32-bit system be sure to use the studio executable.

2.3.2 Installation on macOS

Android Studio for macOS is downloaded in the form of a disk image (.dmg) file. Once the android-studio-ide-<version>-mac.dmg file has been downloaded, locate it in a Finder window and double-click on it to open it as shown in Figure 2-1:

Figure 2-1

To install the package, simply drag the Android Studio icon and drop it onto the Applications folder. The Android Studio package will then be installed into the Applications folder of the system, a process which will typically take a few minutes to complete.

To launch Android Studio, locate the executable in the Applications folder using a Finder window and double-click on it.

For future easier access to the tool, drag the Android Studio icon from the Finder window and drop it onto the dock.

2.3.3 Installation on Linux

Having downloaded the Linux Android Studio package, open a terminal window, change directory to the location where Android Studio is to be installed and execute the following command:

unzip /<path to package>/android-studio-ide-<version>-linux.zip

Note that the Android Studio bundle will be installed into a sub-directory named android-studio. Assuming, therefore, that the above command was executed in /home/demo, the software packages will be unpacked into /home/demo/android-studio.

To launch Android Studio, open a terminal window, change directory to the android-studio/bin sub-directory and execute the following command:

./studio.sh

When running on a 64-bit Linux system, it will be necessary to install some 32-bit support libraries before Android Studio will run. On Ubuntu these libraries can be installed using the following command:

sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 lib32z1 libbz2-1.0:i386

On Red Hat and Fedora based 64-bit systems, use the following command:

sudo yum install zlib.i686 ncurses-libs.i686 bzip2-libs.i686

2.4 The Android Studio Setup Wizard

The first time that Android Studio is launched after being installed, a dialog will appear providing the option to import settings from a previous Android Studio version. If you have settings from a previous version and would like to import them into the latest installation, select the appropriate option and location. Alternatively, indicate that you do not need to import any previous settings and click on the OK button to proceed.

Next, the setup wizard may appear as shown in Figure 2-2 though this dialog does not appear on all platforms:

Figure 2-2

If the wizard appears, click on the Next button, choose the Standard installation option and click on Next once again.

Android Studio will proceed to download and configure the latest Android SDK and some additional components and packages. Once this process has completed, click on the Finish button in the Downloading Components dialog at which point the Welcome to Android Studio screen should then appear:

Figure 2-3

2.5 Installing Additional Android SDK Packages

The steps performed so far have installed Java, the Android Studio IDE and the current set of default Android SDK packages. Before proceeding, it is worth taking some time to verify which packages are installed and to install any missing or updated packages.

This task can be performed using the Android SDK Settingsscreen, which may be launched from within the Android Studio tool by selecting the Configure -> SDK Manager option from within the Android Studio welcome dialog. Once invoked, the Android SDK screen of the default settings dialog will appear as shown in Figure 2-4:

Figure 2-4

Immediately after installing Android Studio for the first time it is likely that only the latest released version of the Android SDK has been installed. To install older versions of the Android SDK simply select the checkboxes corresponding to the versions and click on the Apply button.

It is also possible that updates will be listed as being available for the latest SDK. To access detailed information about the packages that are available for update, enable the Show Package Details option located in the lower right-hand corner of the screen. This will display information similar to that shown in Figure 2-5:

Figure 2-5

The above figure highlights the availability of an update. To install the updates, enable the checkbox to the left of the item name and click on the Apply button.

In addition to the Android SDK packages, a number of tools are also installed for building Android applications. To view the currently installed packages and check for updates, remain within the SDK settings screen and select the SDK Tools tab as shown in Figure 2-6:

Figure 2-6

Within the Android SDK Tools screen, make sure that the following packages are listed as Installed in the Status column:

•Android SDK Build-tools

•Android Emulator

•Android SDK Platform-tools

•Android SDK Tools

•Google Play Services

•Intel x86 Emulator Accelerator (HAXM installer)

•Google USB Driver (Windows only)

In the event that any of the above packages are listed as Not Installed or requiring an update, simply select the checkboxes next to those packages and click on the Apply button to initiate the installation process.

Once the installation is complete, review the package list and make sure that the selected packages are now listed as Installed in the Status column. If any are listed as Not installed, make sure they are selected and click on the Apply button again.

2.6 Making the Android SDK Tools Command-line Accessible

Most of the time, the underlying tools of the Android SDK will be accessed from within the Android Studio environment. That being said, however, there will also be instances where it will be useful to be able to invoke those tools from a command prompt or terminal window. In order for the operating system on which you are developing to be able to find these tools, it will be necessary to add them to the system’s PATH environment variable.

Regardless of operating system, the PATH variable needs to be configured to include the following paths (where <path_to_android_sdk_installation> represents the file system location into which the Android SDK was installed):

<path_to_android_sdk_installation>/sdk/tools

<path_to_android_sdk_installation>/sdk/tools/bin

<path_to_android_sdk_installation>/sdk/platform-tools

The location of the SDK on your system can be identified by launching the SDK Manager and referring to the Android SDK Location: field located at the top of the settings panel as highlighted in Figure 2-7:

Figure 2-7

Once the location of the SDK has been identified, the steps to add this to the PATH variable are operating system dependent:

2.6.1 Windows 7

1. Right-click on Computer in the desktop start menu and select Properties from the resulting menu.

2. In the properties panel, select the Advanced System Settings link and, in the resulting dialog, click on the Environment Variables… button.

3. In the Environment Variables dialog, locate the Path variable in the System variables list, select it and click on the Edit… button. Using the New button in the edit dialog, add three new entries to the path. For example, assuming the Android SDK was installed into C:\Users\demo\AppData\Local\Android\Sdk, the following entries would need to be added:

C:\Users\demo\AppData\Local\Android\Sdk\platform-tools

C:\Users\demo\AppData\Local\Android\Sdk\tools

C:\Users\demo\AppData\Local\Android\Sdk\tools\bin

4. Click on OK in each dialog box and close the system properties control panel.

Once the above steps are complete, verify that the path is correctly set by opening a Command Prompt window (Start -> All Programs -> Accessories -> Command Prompt) and at the prompt enter:

echo %Path%

The returned path variable value should include the paths to the Android SDK platform tools folders. Verify that the platform-tools value is correct by attempting to run the adb tool as follows:

adb

The tool should output a list of command line options when executed.

Similarly, check the tools path setting by attempting to launch the AVD Manager command line tool (don’t worry if the avdmanager tool reports a problem with Java - this will be addressed later):

avdmanager

In the event that a message similar to the following message appears for one or both of the commands, it is most likely that an incorrect path was appended to the Path environment variable:

'adb' is not recognized as an internal or external command,

operable program or batch file.

2.6.2 Windows 8.1

1. On the start screen, move the mouse to the bottom right-hand corner of the screen and select Search from the resulting menu. In the search box, enter Control Panel. When the Control Panel icon appears in the results area, click on it to launch the tool on the desktop.

2. Within the Control Panel, use the Category menu to change the display to Large Icons. From the list of icons select the one labeled System.

3. Follow the steps outlined for Windows 7 starting from step 2 through to step 4.

Open the command prompt window (move the mouse to the bottom right-hand corner of the screen, select the Search option and enter cmd into the search box). Select Command Prompt from the search results.

Within the Command Prompt window, enter:

echo %Path%

The returned path variable value should include the paths to the Android SDK platform tools folders. Verify that the platform-tools value is correct by attempting to run the adb tool as follows:

adb

The tool should output a list of command line options when executed.

Similarly, check the tools path setting by attempting to run the AVD Manager command line tool (don’t worry if the avdmanager tool reports a problem with Java - this will be addressed later):

avdmanager

In the event that a message similar to the following message appears for one or both of the commands, it is most likely that an incorrect path was appended to the Path environment variable:

'adb' is not recognized as an internal or external command,

operable program or batch file.

2.6.3 Windows 10

Right-click on the Start menu, select Settings from the resulting menu and enter “Edit the system environment variables” into the Find a setting text field. In the System Properties dialog, click the Environment Variables... button. Follow the steps outlined for Windows 7 starting from step 3.

2.6.4 Linux

On Linux, this configuration can typically be achieved by adding a command to the .bashrc file in your home directory (specifics may differ depending on the particular Linux distribution in use). Assuming that the Android SDK bundle package was installed into /home/demo/Android/sdk, the export line in the .bashrc file would read as follows:

export PATH=/home/demo/Android/sdk/platform-tools:/home/demo/Android/sdk/tools:/home/demo/Android/sdk/tools/bin:/home/demo/android-studio/bin:$PATH

Note also that the above command adds the android-studio/bin directory to the PATH variable. This will enable the studio.sh script to be executed regardless of the current directory within a terminal window.

2.6.5 macOS

A number of techniques may be employed to modify the $PATH environment variable on macOS. Arguably the cleanest method is to add a new file in the /etc/paths.d directory containing the paths to be added to $PATH. Assuming an Android SDK installation location of /Users/demo/Library/Android/sdk, the path may be configured by creating a new file named android-sdk in the /etc/paths.d directory containing the following lines:

/Users/demo/Library/Android/sdk/tools

/Users/demo/Library/Android/sdk/tools/bin

/Users/demo/Library/Android/sdk/platform-tools

Note that since this is a system directory it will be necessary to use the sudo command when creating the file. For example:

sudo vi /etc/paths.d/android-sdk

2.7 Android Studio Memory Management

Android Studio is a large and complex software application that consists of many background processes. Although Android Studio has been criticized in the past for providing less than optimal performance, Google has made significant performance improvements in recent releases and continues to do so with each new version. Part of these improvements include allowing the user to configure the amount of memory used by both the Android Studio IDE and the background processes used to build and run apps. This allows the software to take advantage of systems with larger amounts of RAM.

If you are running Android Studio on a system with sufficient unused RAM to increase these values (this feature is only available on 64-bit systems with 5GB or more of RAM) and find that Android Studio performance appears to be degraded it may be worth experimenting with these memory settings. Android Studio may also notify you that performance can be increased via a dialog similar to the one shown below:

Figure 2-8

To view and modify the current memory configuration, select the File -> Settings... (Android Studio -> Preferences... on macOS) menu option and, in the resulting dialog, select the Memory Settings option listed under System Settings in the left-hand navigation panel as illustrated in Figure 2-9 below.

When changing the memory allocation, be sure not to allocate more memory than necessary or than your system can spare without slowing down other processes.

Figure 2-9

The IDE memory setting adjusts the memory allocated to Android Studio and applies regardless of the currently loaded project. When a project is built and run from within Android Studio, on the other hand, a number of background processes (referred to as daemons) perform the task of compiling and running the app. When compiling and running large and complex projects, build time may potentially be improved by adjusting the daemon heap settings. Unlike the IDE heap settings, these settings apply only to the current project.

2.8 Updating Android Studio and the SDK

From time to time new versions of Android Studio and the Android SDK are released. New versions of the SDK are installed using the Android SDK Manager. Android Studio will typically notify you when an update is ready to be installed.

To manually check for Android Studio updates, click on the Configure -> Check for Updates menu option within the Android Studio welcome screen, or use the Help -> Check for Updates... (Android Studio -> Check for Updates... on macOS) menu option accessible from within the Android Studio main window.

2.9 Summary

Prior to beginning the development of Android based applications, the first step is to set up a suitable development environment. This consists of the Android SDKs and Android Studio IDE (which also includes the OpenJDK development environment). In this chapter, we have covered the steps necessary to install these packages on Windows, macOS and Linux.

3. Creating an Example Android App in Android Studio

The preceding chapters of this book have covered the steps necessary to configure an environment suitable for the development of Android applications using the Android Studio IDE. Before moving on to slightly more advanced topics, now is a good time to validate that all of the required development packages are installed and functioning correctly. The best way to achieve this goal is to create an Android application and compile and run it. This chapter will cover the creation of a simple Android application project using Android Studio. Once the project has been created, a later chapter will explore the use of the Android emulator environment to perform a test run of the application.

3.1 About the Project

The project created in this chapter takes the form of a very simple currency conversion calculator (so simple, in fact, that it only converts from dollars to euros and does so using an estimated conversion rate). The project will also make use of one of the most basic of Android Studio project templates. This simplicity allows us to introduce some of the key aspects of Android app development without overwhelming the beginner by trying to introduce too many concepts, such as the recommended app architecture and Android architecture components, at once. When following the tutorial in this chapter, rest assured that all of the techniques and code used in this initial example project will be covered in much greater detail in later chapters.

3.2 Creating a New Android Project

The first step in the application development process is to create a new project within the Android Studio environment. Begin, therefore, by launching Android Studio so that the “Welcome to Android Studio” screen appears as illustrated in Figure 3-1:

Figure 3-1

Once this window appears, Android Studio is ready for a new project to be created. To create the new project, simply click on the Start a new Android Studio project option to display the first screen of the New Project wizard.

3.3 Creating an Activity

The first step is to define the type of initial activity that is to be created for the application. Options are available to create projects for Phone and Tablet, Wear OS, TV, Android Audio or Android Things. A range of different activity types is available when developing Android applications, many of which will be covered extensively in later chapters. For the purposes of this example, however, simply select the option to create an Empty Activity on the Phone and Tablet screen. The Empty Activity option creates a template user interface consisting of a single TextView object.

Figure 3-2

With the Empty Activity option selected, click Next to continue with the project configuration.

3.4 Defining the Project and SDK Settings

In the project configuration window (Figure 3-3), set the Name field to AndroidSample. The application name is the name by which the application will be referenced and identified within Android Studio and is also the name that would be used if the completed application were to go on sale in the Google Play store.

The Package nameis used to uniquely identify the application within the Android application ecosystem. Although this can be set to any string that uniquely identifies your app, it is traditionally based on the reversed URL of your domain name followed by the name of the application. For example, if your domain is www.mycompany.com, and the application has been named AndroidSample, then the package name might be specified as follows:

com.mycompany.androidsample

If you do not have a domain name you can enter any other string into the Company Domain field, or you may use example.com for the purposes of testing, though this will need to be changed before an application can be published:

com.example.androidsample

The Save location setting will default to a location in the folder named AndroidStudioProjects located in your home directory and may be changed by clicking on the folder icon to the right of the text field containing the current path setting.

Set the minimum SDK setting to API 26: Android 8.0 (Oreo). This is the SDK that will be used in most of the projects created in this book unless a necessary feature is only available in a more recent version.

Figure 3-3

Finally, change the Language menu to Kotlin and click on Finish to initiate the project creation process.

3.5 Modifying the Example Application

At this point, Android Studio has created a minimal example application project and opened the main window.

Figure 3-4

The newly created project and references to associated files are listed in the Project tool windowlocated on the left-hand side of the main project window. The Project tool window has a number of modes in which information can be displayed. By default, this panel should be in Android mode. This setting is controlled by the menu at the top of the panel as highlighted in Figure 3-5. If the panel is not currently in Android mode, use the menu to switch mode:

Figure 3-5

3.6 Modifying the User Interface

The user interface design for our activity is stored in a file named activity_main.xml which, in turn, is located under app -> res -> layout in the project file hierarchy. Once located in the Project tool window, double-click on thefile to load it into the user interface Layout Editor tool which will appear in the center panel of the Android Studio main window:

Figure 3-6

In the toolbar across the top of the Layout Editor window is a menu (currently set to Pixel in the above figure) which is reflected in the visual representation of the device within the Layout Editor panel. A wide range of other device options are available for selection by clicking on this menu.

To change the orientation of the device representation between landscape and portrait simply use the drop down menu immediately to the left of the device selection menu showing the icon.

As can be seen in the device screen, the content layout already includes a label that displays a “Hello World!” message. Running down the left-hand side of the panel is a palette containing different categories of user interface components that may be used to construct a user interface, such as buttons, labels and text fields. It should be noted, however, that not all user interface components are obviously visible to the user. One such category consists of layouts. Android supports a variety of layouts that provide different levels of control over how visual user interface components are positioned and managed on the screen. Though it is difficult to tell from looking at the visual representation of the user interface, the current design has been created using a ConstraintLayout. This can be confirmed by reviewing the information in the