High quality Android apps

Preview:

DESCRIPTION

Quali sono gli elementi su cui focalizzarsi per creare un’applicazione Android di qualità? In questo talk ne affronteremo diversi, partendo dal design e arrivando alla pubblicazione, senza tralasciare sviluppo e debug.

Citation preview

+Alfredo Morresi

Android AppsQuality

ROLEDeveloper Relations Program Manager for Italy

PASSIONSCommunity, Development, Snowboarding, Tiramisu'

REACH MEalfredomorresi@google.complus.google.com/+AlfredoMorresi@rainbowbreeze

Who I am

Design, Develop, Distribute

d.android.com/distribute/googleplay/quality

d.android.com/distribute/googleplay/quality

Criteria+

Test Procedures

• Visual Design and User Interaction

• Functionality

• Performance and Stability

• Google Play

Breaking it down

Visual Design and User Interaction

Standard Design

2%

28%

21%

49%

OtherGingerbreadICSJellybean

d.android.com/about/dashboard

30%

70%

OtherHolo

d.android.com/about/dashboard

Navigation

Navigation & Notifications

Navigation

All dialogs are dismissible using the Back button

Notifications

Notifications: • are persistent only if related to ongoing events• only contain content related to the core function of the app*• do not contain advertising*

* unless opted in

Functionality

Permissions

Request only the absolute minimum

permissions that are needed to support core

functionality.

Implicit Permissions

App/Game Audio plays...

...unless it is a core feature

UI

App State

• Don’t leave services running while app in background, unless core function

• Preserve and Restore User State from recents, device wake, relaunch

Performance and Stability

GPU Overdraw

Profile GPU Rendering

Profile GPU Rendering

Profile GPU Rendering

Performance

<android-sdk>/tools/monitor

Hierarchy Viewer

Tracer for OpenGL ES

• Devoxx 2012: For Butter or Worse• Curious-Creature.org: Android Performance Case Study

...exercise break...

Content Policy

App Content Rating

App Rating

App Rating

App Rating

• Full battery, wifi signals, no notifications

• Phone + Tablet

• No system buttons on image (personal preference)

Screenshots

Feature Graphic

• Hardware accelerated emulators• AndroVM• BlueStacks• HDMI recorder - (e.g. Blackmagic) or HDMI -> SD Converter •$ adb shell screenrecord /sdcard/myclip.mp4 (API 19)

Making a promo video

What’s New / Improving an App

Google Play Services

Fused Location Provider

Connect the Location Service Client! MyActivity

private void connectLBS() { int gpsExists = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this); if (gpsExists == ConnectionResult.SUCCESS) { mLocationClient = new LocationClient(this, this, this); mlocationClient.connect(); }}

@Overridepublic void onConnected(Bundle connectionHint) { requestUpdates(mlocationClient);}

Location Update Requests! MyActivity

LocationRequest request = LocationRequest.create();request.setInterval(minTime);request.setPriority(lowPowerMoreImportantThanAccuracy ? LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY : LocationRequest.PRIORITY_HIGH_ACCURACY);

mlocationClient.requestLocationUpdates(request, new LocationListener() { @Override public void onLocationChanged(Location location) { updateLocation(location); }});

Geofencing

! MyActivityList<Geofence> fenceList = new ArrayList<Geofence>();

// TODO Repeat for all GeofencesGeofence geofence = new Geofence.Builder() .setRequestId(myKey) .setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER | Geofence.GEOFENCE_TRANSITION_EXIT) .setCircularRegion(latitude, longitude, GEOFENCE_RADIUS) .setExpirationDuration(Geofence.NEVER_EXPIRE) .build();

fenceList.add(geofence);

mLocationClient.addGeofences(fenceList, pendingIntent,

Geofencing

Activity Recognition

! MyActivity

Activity Recognition

Intent intent = new Intent(this, ActivityRecognitionIntentService.class);intent.setAction(MyActivity.ACTION_STRING);

PendingIntent pi = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

mActivityRecognitionClient.requestActivityUpdates(interval, pi);

!ActivityRecognitionIntentSer@Overrideprotected void onHandleIntent(Intent intent) { if (intent.getAction() == MyActivity.ACTION_STRING) { if (ActivityRecognitionResult.hasResult(intent)) { ActivityRecognitionResult result = ActivityRecognitionResult.extractResult(intent); DetectedActivity detectedActivity = result.getMostProbableActivity(); int activityType = detectedActivity.getType(); if (activityType == DetectedActivity.STILL) setUpdateSpeed(PAUSED); else if (activityType == DetectedActivity.IN_VEHICLE) setUpdateSpeed(FASTER); else setUpdateSpeed(REGULAR); } }}

Activity Recognition

Google+ Sign in on the Web

Enables App Install!!

• Enable Google+ APIs access in Google APIs Console

• Add the apppackagename parameter to your sign-in button.

2 Steps

Enables App Install!!

https://developers.google.com/+/features/play-installs

Measure the results.

Google Play Games

Google Play Games

Google Play Games

Google Play Games

Cloud Save

Google cloud messaging

Google Cloud Messaging

Your Service

Google cloud messaging

Google Cloud Messaging

Google cloud messagingYour

Service

Google Cloud Messaging

...To summarize

Resourcesdeveloper.android.comdeveloper.android.com/designdeveloper.android.com/trainingandroid-developers.blogspot.comsource.android.com

GDL - Google Developers Live

GDL Italia - http://goo.gl/MyQai

http://developersitalia.blogspot.it/

+Alfredo Morresi

Q+A

Copyrights and trademarksAndroid, Google are registered trademarks of Google Inc.

All other trademarks and copyrights are the property of their respective owners.