Your SlideShare is downloading. ×
0
Quality Android Apps
+Alfredo Morresi
Who I am
ROLE
Developer Relations Program Manager
for Italy
PASSIONS
Community, Development,
Snowboarding, Tiramisu'
REACH...
Design, Develop, Distribute
d.android.com/distribute/googleplay/quality
d.android.com/distribute/googleplay/quality
Criteria
+
Test Procedures
Breaking it down
• Visual Design and User Interaction
• Functionality
• Performance and Stability
• Google Play
Visual Design and User Interaction
Standard Design
d.android.com/about/dashboard

2%

Other
Gingerbread
ICS
Jellybean

28%
49%

21%
d.android.com/about/dashboard

30%

Other
Holo
70%
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...
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
...
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
Screenshots
• Full battery, wifi signals, no
notifications

• Phone + Tablet
• No system buttons on
image (personal preferen...
Feature Graphic
Making a promo video
• Hardware accelerated emulators
• AndroVM
• BlueStacks
• HDMI recorder - (e.g. Blackmagic) or
HDMI -...
What’s New / Improving an App
Google Play Services
Fused Location Provider
Connect the Location Service Client
!

MyActivity

private void connectLBS() {
int gpsExists = GooglePlayServicesUtil.isGo...
Location Update Requests
!

MyActivity

LocationRequest request = LocationRequest.create();
request.setInterval(minTime);
...
Geofencing
Geofencing
List<Geofence> fenceList = new ArrayList<Geofence>();

!

MyActivity

// TODO Repeat for all Geofences
Geofence...
Activity Recognition
Activity Recognition
!

MyActivity

Intent intent = new Intent(this,
ActivityRecognitionIntentService.class);
intent.setAc...
Activity Recognition
! ActivityRecognitionIntentSer
@Override
protected void onHandleIntent(Intent intent) {
if (intent.ge...
Google+ Sign in on the Web
Enables App Install!!
2 Steps
• Enable Google+ APIs access in Google
APIs Console

• Add the apppackagename parameter to
your sign-in button.
Enables App Install!!
Measure the results.

https://developers.google.com/+
/features/play-installs
Google Play Games
Google Play Games
Google Play Games
Google Play Games
Cloud Save
Google Cloud Messaging

Google cloud messaging
Google Cloud Messaging

Google cloud messaging
Your
Service
Google Cloud Messaging

Google cloud messaging
Your
Service
...To summarize
Resources
developer.android.com
developer.android.com/design
developer.android.com/training
android-developers.blogspot.co...
GDL - Google Developers Live
GDL Italia - http://goo.gl/MyQai
http://developersitalia.blogspot.it/
Q+A
+Alfredo Morresi
Copyrights and trademarks
Android, Google are registered trademarks of
Google Inc.
All other trademarks and copyrights are...
High quality Android apps
Upcoming SlideShare
Loading in...5
×

High quality Android apps

727

Published on

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.

Published in: Technology, Business
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
727
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
24
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Transcript of "High quality Android apps"

  1. 1. Quality Android Apps +Alfredo Morresi
  2. 2. Who I am ROLE Developer Relations Program Manager for Italy PASSIONS Community, Development, Snowboarding, Tiramisu' REACH ME alfredomorresi@google.com plus.google.com/+AlfredoMorresi @rainbowbreeze
  3. 3. Design, Develop, Distribute
  4. 4. d.android.com/distribute/googleplay/quality
  5. 5. d.android.com/distribute/googleplay/quality Criteria + Test Procedures
  6. 6. Breaking it down • Visual Design and User Interaction • Functionality • Performance and Stability • Google Play
  7. 7. Visual Design and User Interaction
  8. 8. Standard Design
  9. 9. d.android.com/about/dashboard 2% Other Gingerbread ICS Jellybean 28% 49% 21%
  10. 10. d.android.com/about/dashboard 30% Other Holo 70%
  11. 11. Navigation
  12. 12. Navigation & Notifications
  13. 13. Navigation All dialogs are dismissible using the Back button
  14. 14. 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
  15. 15. Functionality
  16. 16. Permissions Request only the absolute minimum permissions that are needed to support core functionality.
  17. 17. Implicit Permissions
  18. 18. App/Game Audio plays... ...unless it is a core feature
  19. 19. UI
  20. 20. App State • Don’t leave services running while app in background, unless core function • Preserve and Restore User State from recents, device wake, relaunch
  21. 21. Performance and Stability
  22. 22. GPU Overdraw
  23. 23. Profile GPU Rendering
  24. 24. Profile GPU Rendering
  25. 25. Profile GPU Rendering
  26. 26. Performance <android-sdk>/tools/monitor
  27. 27. Hierarchy Viewer
  28. 28. Tracer for OpenGL ES • Devoxx 2012: For Butter or Worse • Curious-Creature.org: Android Performance Case Study
  29. 29. ...exercise break...
  30. 30. Content Policy
  31. 31. App Content Rating
  32. 32. App Rating
  33. 33. App Rating
  34. 34. App Rating
  35. 35. Screenshots • Full battery, wifi signals, no notifications • Phone + Tablet • No system buttons on image (personal preference)
  36. 36. Feature Graphic
  37. 37. Making a promo video • Hardware accelerated emulators • AndroVM • BlueStacks • HDMI recorder - (e.g. Blackmagic) or HDMI -> SD Converter •$ adb shell screenrecord /sdcard/ myclip.mp4 (API 19)
  38. 38. What’s New / Improving an App
  39. 39. Google Play Services
  40. 40. Fused Location Provider
  41. 41. 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(); } } @Override public void onConnected(Bundle connectionHint) { requestUpdates(mlocationClient); }
  42. 42. 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); } });
  43. 43. Geofencing
  44. 44. Geofencing List<Geofence> fenceList = new ArrayList<Geofence>(); ! MyActivity // TODO Repeat for all Geofences Geofence 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,
  45. 45. Activity Recognition
  46. 46. Activity Recognition ! MyActivity 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);
  47. 47. Activity Recognition ! ActivityRecognitionIntentSer @Override protected 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); } } }
  48. 48. Google+ Sign in on the Web
  49. 49. Enables App Install!!
  50. 50. 2 Steps • Enable Google+ APIs access in Google APIs Console • Add the apppackagename parameter to your sign-in button.
  51. 51. Enables App Install!! Measure the results. https://developers.google.com/+ /features/play-installs
  52. 52. Google Play Games
  53. 53. Google Play Games
  54. 54. Google Play Games
  55. 55. Google Play Games
  56. 56. Cloud Save
  57. 57. Google Cloud Messaging Google cloud messaging
  58. 58. Google Cloud Messaging Google cloud messaging Your Service
  59. 59. Google Cloud Messaging Google cloud messaging Your Service
  60. 60. ...To summarize
  61. 61. Resources developer.android.com developer.android.com/design developer.android.com/training android-developers.blogspot.com source.android.com
  62. 62. GDL - Google Developers Live
  63. 63. GDL Italia - http://goo.gl/MyQai
  64. 64. http://developersitalia.blogspot.it/
  65. 65. Q+A +Alfredo Morresi
  66. 66. Copyrights and trademarks Android, Google are registered trademarks of Google Inc. All other trademarks and copyrights are the property of their respective owners.
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×