67
+Alfredo Morresi Android Apps Quality

High quality Android apps

Embed Size (px)

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

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.