whats new in android jakarta gdg (2015-08-26)

Post on 22-Jan-2018

969 Views

Category:

Engineering

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

What’s New in Android

+Adam Koch

+Ankur Kotwal

AgendaAndroid M ReleaseGoogle Play Services v7.8Android Tools & Libraries

Android M

Android M…?

Android Marshmallow

Available now for Nexus 5/6/9, Player & emulator

developer.android.com/preview

Get your apps ready!

Provide feedback and report bugs

Issue tracker: goo.gl/zcjEj7

Google+ community: goo.gl/BIq1eJ

Android M Developer Preview

On August 17 we released:

- Developer Preview 3 ROMs

- Final Android 6.0 (Marshmallow) SDK

Start publishing to Play today!

M Preview Timeline You are here

Getting Started with Marshmallow

android {

compileSdkVersion 23

buildToolsVersion '23.0.0'

defaultConfig {

applicationId 'com.google.samples.apps.mpreviewtest'

minSdkVersion 23

targetSdkVersion 23

versionCode 1

versionName '1.0'

}

}

Runtime permissions!

Auto Backup

Power-Saving Optimizations

Other behavior changes:- Adoptable Storage Devices

- AndroidHttpClient -> HttpUrlConnection

- OpenSSL -> BoringSSL

- And more: goo.gl/cf4lwy

Android M Behavior Changes

Why should you care?

- Significantly different behavior (after targeting M)

- No permission dialog on install --> less friction

- App updates --> automatic

- Fine grained, revocable permissions --> user feels in

control, improved user experience

Runtime Permissions

targetSdkVersion < M targetSdkVersion = M+

Pre-M deviceInstall time permission dialog

All permissions granted

M deviceInstall time permission dialog

All permissions grantedUser can revoke permissions

No dialog during installNo permissions granted initially

App can request permissionsUser can revoke permissions

Runtime Permissions

Runtime Permissions

Location

Camera

Microphone

Phone

All location permissions

Photo and video permissions

Audio recording

Phone state, dialing, etc.

SMS

Contacts

Calendar

Sensors

Storage

Controlling or reading SMS/MMS/etc.

Managing contacts

Managing calendars

Body sensors

Read, write external storage

Best Practices

Only ask for what you need, when you need it

Don’t overwhelm the user

Consider using system Intents if possible

Explain why you need permissions

Runtime Permissions

Context.checkSelfPermission(String permission)

Activity.requestPermissions(

String[] permissions, int requestCode)

Activity.onRequestPermissionsResult(

int requestCode, String[] permissions,

int[] grantResults)

New permissions methods

ContextCompat.checkSelfPermission(String permission)

ActivityCompat.requestPermissions(

String[] permissions, int requestCode)

ActivityCompat.onRequestPermissionsResult(

int requestCode, String[] permissions,

int[] grantResults)

*Also in Support Library (v23)

static final int LOCATION_PERMISSION_REQUEST_RESULT = 2;

...

if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION)

!= PackageManager.PERMISSION_GRANTED) {

requestPermissions(

new String[]{Manifest.permission.ACCESS_FINE_LOCATION},

LOCATION_PERMISSION_REQUEST_RESULT);

}

Requesting a permission

@Override

public void onRequestPermissionsResult(

int requestCode, String[] permissions, int[] grantResults) {

switch (requestCode) {

case LOCATION_PERMISSION_REQUEST_RESULT: {

if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {

// Granted!

} else {

// Denied!

}

}

}

}

Checking if permission was granted

If shouldShowRequestPermissionRationale()

returns true then show your own in-app UI

explaining why you need the permission.

When does it return true? If the user has denied the

permission in the past (but NOT checked “Don’t ask

again”).

Showing your own explaination

Free and automatic app data backup (and restore)

Up to 25MB per user per app

Occurs every 24 hours

Enabled for *all* apps running on M Preview (but for

M final only targetSdkVersion=M)

Auto Backup for Apps

Use platform APIs correctly, don’t hardcode paths:getFilesDir(), getExternalFilesDir(), etc. will be backed up

getCacheDir(), getExternalCacheDir(), etc. will not be backed up

Exclude device-specific identifiers from backup(eg. GCM registration ID, etc.)

Auto Backup for Apps

Configuring Auto BackupAndroidManifest.xml

<application ...

android:fullBackupContent="@xml/mybackupscheme" />

xml/mybackupscheme.xml

<full-backup-content>

<include domain=["file"|"database"|"sharedpref"|"external"|"root"] path="string" />

<exclude domain=["file"|"database"|"sharedpref"|"external"|"root"] path="string" />

</full-backup-content>

# enable logging

$ adb shell setprop log.tag.BackupXmlParserLogging VERBOSE

# initialize Backup Manager

$ adb shell bmgr run

# trigger backup or restore

$ adb shell bmgr fullbackup <PACKAGE>

$ adb shell bmgr restore <PACKAGE>

Testing Auto Backup

Doze

increase standby time of devices

that aren’t being used

App Standby

reduce overhead of apps that are

installed but not used recently

Power-Saving Optimizations

flickr/trophygeek

Network access disabled (except high priority GCM)

Wake locks are ignored except for alarms set with setAlarmClock()

and setAndAllowWhileIdle()

Syncs and JobScheduler tasks are not allowed to run

Test with:

Doze

$ adb shell dumpsys battery unplug

$ adb shell dumpsys deviceidle step

$ adb shell dumpsys deviceidle -h

Apps considered idle unless:- explicitly launched by user

- has a foreground process

- visible notification

- user asks for the app to be exempt

Idle apps are restricted:- network access disabled

- syncs and background jobs suspended

App Standby

Android M New Platform Features

Direct Share

Fingerprint API & Confirm Credentials

Voice Interactions & Assist API

App Linking

Text Selection

And much more:- Bluetooth Stylus, 4K Display, MIDI, Camera,

Android for Work...

Other Smaller Additions

Other Small Additions

After:<LinearLayout

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:foreground="@drawable/selector">

...

</LinearLayout>

Before:<FrameLayout

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:foreground="@drawable/selector">

<LinearLayout

android:layout_width="wrap_content"

android:layout_height="wrap_content">

...

</LinearLayout>

</FrameLayout>

Other Small Additions

Notifications

New android.graphics.drawable.Icon,

- Icon.createWithBitmap(Bitmap) for dynamic icons

Notification.Builder.setSmall/LargeIcon(Icon)

getActiveNotifications()

And lots more...

Fingerprint API & Confirm Credentials

Voice Interactions & Assist API

App Linking

Text Selection

Bluetooth Stylus

4K Display

MIDI

Camera

Android for Work…

Themeable ColorStateLists

Google Play Services v7.8

Nearby Messages

Find nearby devices or beacons and

share messages

Cross platform supportAndroid & iOS

Unauthenticated(Does not require a Google account)

Uses a variety of tech under the hoodBluetooth, Bluetooth Low Energy, Wi-Fi and an

ultrasonic modem

Face API & Barcode API

Mobile Vision API

Smart Lock for Passwords

Credentials API● auth.credentials.save

● auth.credentials.request

com.google.android.gms.auth.api.c

redentials.CredentialsApi

Creates a unique ID per app per install

Generate security tokens for services (suited for user by GCM)

Verify app authenticity & check if app install is active via web API

InstanceID

// Get InstanceID

String iid = InstanceID.getInstance().getID();

Topic based subscriptions

New base classes for receiving GCM messages

GCM Network Manager

Google Cloud Messaging

Android Tools & Libraries

C/C++ support (coming soon)- integrated debugging,

code completion, refactoring

Debugger improvements

Separate unit testing module

Speed improvements

Visual theme editor, layout editor improvements

Android Studio

Android Studio

Drawable ResourcesBitmap Vector

compile 'com.android.support:design:23.0.0'

Android Design Support Library

Floating labels for hint and error text

Built-in animations

Wrap EditText in a TextInputLayout

TextInputLayout

Providing lightweight quick feedback to your users

Snackbar

.make(parentLayout, “My Text”, Snackbar.LENGTH_LONG)

.setAction(“My Action”, myOnClickListener)

.show(); //Don’t forget to show!

Snackbar

Top level navigation or grouping content

tabGravity = center, fill

tabMode = scrollable, fixed

TabLayout

● Component to create view inside Navigation Drawer

● Used with DrawerLayout

● Load items from menu resources

NavigationView

Built-in component for FAB, follows design spec

Default color = ?attr/colorAccent

fabSize = full, mini

Floating Action Button (FAB)

Provide additional level of control between child

views

Coordinate different Views- FloatingActionButton

- Snackbar

- Toolbar, Tabs

Each View sets own behavior- CoordinatorLayout.Behavior

CoordinatorLayout

compile 'com.android.support:percent:23.0.0'

Managing percent based dimensions

<android.support.percent.PercentFrameLayout ...>

<ImageView app:layout_widthPercent="50%"

app:layout_heightPercent="50%"

app:layout_marginTopPercent="25%"

app:layout_marginLeftPercent="25%"/>

</android.support.percent.PercentFrameLayout>

Percent Support Library

Placing a FAB - Before

private void addFloatingActionButton() {

final int fabSize =

getResources().getDimensionPixelSize(R.dimen.fab_size);

int bottomOfQuestionView =

findViewById(R.id.question_view).getBottom();

final LayoutParams fabLayoutParams =

new LayoutParams(fabSize, fabSize, Gravity.END | Gravity.TOP);

final int fabPadding =

getResources().getDimensionPixelSize(R.dimen.padding_fab);

final int halfAFab = fabSize / 2;

fabLayoutParams.setMargins(0, // left

bottomOfQuestionView - halfAFab, //top

0, // right

fabPadding); // bottom

addView(mSubmitAnswer, fabLayoutParams);

}

<android.support.design.widget.CoordinatorLayout ...>

<TextView android:id="@+id/textLayout" />

<android.support.design.widget.FloatingActionButton ...

android:src="@drawable/ic_action_map"

app:layout_anchor="@id/textLayout"

app:layout_anchorGravity="bottom|start" />

</android.support.design.widget.CoordinatorLayout>

Placing a FAB - After

Android Developer Blog Post

goo.gl/THH9OA

DevByte Video

goo.gl/0jhXFb

Cheesesquare Sample

github.com/chrisbanes/cheesesquare

Resources

Thank You!

Questions?

+Adam Koch +Ankur Kotwal

top related