High quality Android apps

67
+Alfredo Morresi Android Apps Quality

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.

Transcript of High quality Android apps

Page 1: High quality Android apps

+Alfredo Morresi

Android AppsQuality

Page 2: High quality Android apps

ROLEDeveloper Relations Program Manager for Italy

PASSIONSCommunity, Development, Snowboarding, Tiramisu'

REACH [email protected]/+AlfredoMorresi@rainbowbreeze

Who I am

Page 3: High quality Android apps

Design, Develop, Distribute

Page 4: High quality Android apps

d.android.com/distribute/googleplay/quality

Page 5: High quality Android apps

d.android.com/distribute/googleplay/quality

Criteria+

Test Procedures

Page 6: High quality Android apps

• Visual Design and User Interaction

• Functionality

• Performance and Stability

• Google Play

Breaking it down

Page 7: High quality Android apps

Visual Design and User Interaction

Page 8: High quality Android apps

Standard Design

Page 9: High quality Android apps

2%

28%

21%

49%

OtherGingerbreadICSJellybean

d.android.com/about/dashboard

Page 10: High quality Android apps

30%

70%

OtherHolo

d.android.com/about/dashboard

Page 11: High quality Android apps

Navigation

Page 12: High quality Android apps

Navigation & Notifications

Page 13: High quality Android apps

Navigation

All dialogs are dismissible using the Back button

Page 14: High quality Android apps

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

Page 15: High quality Android apps

Functionality

Page 16: High quality Android apps

Permissions

Request only the absolute minimum

permissions that are needed to support core

functionality.

Page 17: High quality Android apps

Implicit Permissions

Page 18: High quality Android apps

App/Game Audio plays...

...unless it is a core feature

Page 19: High quality Android apps

UI

Page 20: High quality Android apps

App State

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

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

Page 21: High quality Android apps

Performance and Stability

Page 22: High quality Android apps

GPU Overdraw

Page 23: High quality Android apps

Profile GPU Rendering

Page 24: High quality Android apps

Profile GPU Rendering

Page 25: High quality Android apps

Profile GPU Rendering

Page 26: High quality Android apps

Performance

<android-sdk>/tools/monitor

Page 27: High quality Android apps

Hierarchy Viewer

Page 28: High quality Android apps

Tracer for OpenGL ES

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

Page 29: High quality Android apps

...exercise break...

Page 30: High quality Android apps

Content Policy

Page 31: High quality Android apps

App Content Rating

Page 32: High quality Android apps

App Rating

Page 33: High quality Android apps

App Rating

Page 34: High quality Android apps

App Rating

Page 35: High quality Android apps

• Full battery, wifi signals, no notifications

• Phone + Tablet

• No system buttons on image (personal preference)

Screenshots

Page 36: High quality Android apps

Feature Graphic

Page 37: High quality Android apps

• 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

Page 38: High quality Android apps

What’s New / Improving an App

Page 39: High quality Android apps

Google Play Services

Page 40: High quality Android apps

Fused Location Provider

Page 41: High quality Android apps

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

Page 42: High quality Android apps

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

Page 43: High quality Android apps

Geofencing

Page 44: High quality Android apps

! 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

Page 45: High quality Android apps

Activity Recognition

Page 46: High quality Android apps

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

Page 47: High quality Android apps

!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

Page 48: High quality Android apps

Google+ Sign in on the Web

Page 49: High quality Android apps

Enables App Install!!

Page 50: High quality Android apps

• Enable Google+ APIs access in Google APIs Console

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

2 Steps

Page 51: High quality Android apps

Enables App Install!!

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

Measure the results.

Page 52: High quality Android apps
Page 53: High quality Android apps

Google Play Games

Page 54: High quality Android apps

Google Play Games

Page 55: High quality Android apps

Google Play Games

Page 56: High quality Android apps

Google Play Games

Page 57: High quality Android apps

Cloud Save

Page 58: High quality Android apps

Google cloud messaging

Google Cloud Messaging

Page 59: High quality Android apps

Your Service

Google cloud messaging

Google Cloud Messaging

Page 60: High quality Android apps

Google cloud messagingYour

Service

Google Cloud Messaging

Page 61: High quality Android apps

...To summarize

Page 62: High quality Android apps

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

Page 63: High quality Android apps

GDL - Google Developers Live

Page 64: High quality Android apps

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

Page 65: High quality Android apps

http://developersitalia.blogspot.it/

Page 66: High quality Android apps

+Alfredo Morresi

Q+A

Page 67: High quality Android apps

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

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