• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1page.title=Core App Quality
2page.metaDescription=App quality directly influences the long-term success of your app—in terms of installs, user rating and reviews, engagement, and user retention.
3page.image=/distribute/images/core-quality-guidelines.jpg
4@jd:body
5
6<div id="qv-wrapper"><div id="qv">
7<h2>Quality Criteria</h2>
8  <ol>
9    <li><a href="#ux">Design and Interaction</a></li>
10        <li><a href="#fn">Functionality</a></li>
11        <li><a href="#ps">Performance and Stability</a></li>
12        <li><a href="#listing">Google Play</a></li>
13
14  </ol>
15
16  <h2>Testing</h2>
17  <ol>
18    <li><a href="#test-environment">Setting Up a Test Environment</a></li>
19        <li><a href="#tests">Test Procedures</a></li>
20        </ol>
21
22  <h2>You Should Also Read</h2>
23  <ol>
24    <li><a href="{@docRoot}distribute/essentials/quality/tablets.html">Tablet App Quality</a></li>
25        <li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">Optimize Your App</a></li>
26  </ol>
27
28
29</div>
30</div>
31
32<div class="top-right-float">
33  <img src="{@docRoot}images/gp-core-quality.png" style="margin-left: 20px;">
34</div>
35
36<p>
37  Android users expect high-quality apps. App quality directly influences the
38  long-term success of your app—in terms of installs, user rating and reviews,
39  engagement, and user retention.
40</p>
41
42<p>
43  This document helps you assess basic aspects of quality in your app through a
44  compact set of core app quality criteria and associated tests. All Android
45  apps should meet these criteria.
46</p>
47
48<p>
49  Before publishing your apps, test them against these criteria to ensure that
50  they function well on many devices, meets Android standards for navigation
51  and design, and are prepared for promotional opportunities in the Google Play
52  store. Your testing will go well beyond what's described here—the purpose of
53  this document is to specify the essential quality characteristics all apps
54  should display, so that you can cover them in your test plans.
55</p>
56
57<p>
58  If you're creating apps for tablets and or Google Play for Education there
59  are additional quality criteria you should consider, which are defined in the
60  <a href="{@docRoot}distribute/essentials/quality/tablets.html">Tablet App
61  Quality</a> guidelines and <a href=
62  "{@docRoot}distribute/essentials/gpfe-guidelines.html">Education
63  Guidelines</a>.
64</p>
65
66<div class="headerLine">
67  <h2 id="ux">
68  Visual Design and User Interaction
69  </h2>
70
71
72</div>
73
74<p>
75  These criteria ensure that your app provides standard Android visual design
76  and interaction patterns where appropriate, for a consistent and intuitive
77  user experience.
78</p>
79
80<table>
81  <tr>
82    <th style="width:2px;">
83      Area
84    </th>
85    <th style="width:54px;">
86      ID
87    </th>
88
89
90    <th>
91      Description
92    </th>
93    <th style="width:54px;">
94      Tests
95    </th>
96  </tr>
97  <tr id="UX-B1">
98  <td>Standard design</td>
99  <td>
100    UX-B1
101  </td>
102  <td>
103    <p style="margin-bottom:.5em;">
104    App follows <a href="{@docRoot}design/index.html">Android Design</a>
105    guidelines and uses common <a href=
106    "{@docRoot}design/patterns/index.html">UI patterns and icons</a>:
107    </p>
108
109    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
110    <li>App does not redefine the expected function of a system icon (such
111    as the Back button).
112    </li>
113
114    <li>App does not replace a system icon with a completely different icon
115    if it triggers the standard UI behavior.
116    </li>
117
118    <li>If the app provides a customized version of a standard system icon,
119    the icon strongly resembles the system icon and triggers the standard
120    system behavior.
121    </li>
122
123    <li>App does not redefine or misuse Android UI patterns, such that
124    icons or behaviors could be misleading or confusing to users.
125    </li>
126    </ol>
127  </td>
128  <td>
129    <a href="#core">CR-all</a>
130  </td>
131  </tr>
132
133  <tr>
134  <td rowspan="3">
135    Navigation
136  </td>
137  <td id="UX-N1">
138    UX-N1
139  </td>
140  <td>
141    <p>
142    App supports standard system <a href=
143    "{@docRoot}design/patterns/navigation.html">Back button navigation</a>
144    and does not make use of any custom, on-screen "Back button" prompts.
145    </p>
146  </td>
147  <td>
148    <a href="#core">CR-3</a>
149  </td>
150  </tr>
151
152  <tr>
153  <td id="UX-N2">
154    UX-N2
155  </td>
156  <td>
157    <p>
158    All dialogs are dismissable using the Back button.
159    </p>
160  </td>
161  <td>
162    <a href="#core">CR-3</a>
163  </td>
164  </tr>
165
166  <tr id="UX-N3">
167  <td>
168    UX-N3
169  </td>
170  <td>
171    Pressing the Home button at any point navigates to the Home screen of the
172    device.
173  </td>
174  <td>
175    <a href="#core">CR-1</a>
176  </td>
177  </tr>
178
179  <tr id="UX-S1">
180  <td rowspan="2">
181    Notifications
182  </td>
183  <td>
184    UX-S1
185  </td>
186  <td>
187    <p style="margin-bottom:.5em;">
188    Notifications follow Android Design <a href=
189    "{@docRoot}design/patterns/notifications.html">guidelines</a>. In
190    particular:
191    </p>
192
193    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
194    <li>Multiple notifications are stacked into a single notification
195    object, where possible.
196    </li>
197
198    <li>Notifications are persistent only if related to ongoing events
199    (such as music playback or a phone call).
200    </li>
201
202    <li>Notifications do not contain advertising or content unrelated to
203    the core function of the app, unless the user has opted in.
204    </li>
205    </ol>
206  </td>
207  <td>
208    <a href="#core">CR-11</a>
209  </td>
210  </tr>
211
212  <tr id="UX-S2">
213  <td>
214    UX-S2
215  </td>
216  <td>
217    <p style="margin-bottom:.5em;">
218    App uses notifications only to:
219    </p>
220
221    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
222    <li>Indicate a change in context relating to the user personally (such
223    as an incoming message), or
224    </li>
225
226    <li>Expose information/controls relating to an ongoing event (such as
227    music playback or a phone call).
228    </li>
229    </ol>
230  </td>
231  <td>
232    <a href="#core">CR-11</a>
233  </td>
234  </tr>
235</table>
236
237<h3 class="rel-resources clearfloat">Related resources</h3>
238
239<div class="resource-widget resource-flow-layout col-13" data-query=
240"collection:distribute/essentials/corequalityguidelines/visualdesign"
241data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,6x3,6x3"
242data-maxresults="6">
243</div>
244
245<div class="headerLine">
246  <h2 id="fn">
247  Functionality
248  </h2>
249
250
251</div>
252
253<p>
254  These criteria ensure that your app provides expected functional behavior,
255  with the appropriate level of permissions.
256</p>
257
258<table>
259  <tr>
260  <th style="width:2px;">
261    Area
262  </th>
263  <th style="width:54px;">
264    ID
265  </th>
266  <th>
267    Description
268  </th>
269  <th style="width:54px;">
270    Tests
271  </th>
272  </tr>
273
274  <tr id="FN-P1">
275  <td rowspan="2">
276    Permissions
277  </td>
278  <td>
279    FN-P1
280  </td>
281  <td>
282    App requests only the <em>absolute minimum</em> permissions that it needs
283    to support core functionality.
284  </td>
285  <td rowspan="2">
286    <a href="#core">CR-11</a>
287  </td>
288  </tr>
289
290  <tr id="FN-P2">
291  <td>
292    FN-P2
293  </td>
294  <td>
295    <p style="margin-bottom:.5em;">
296    App does not request permissions to access sensitive data (such as
297    Contacts or the System Log) or services that can cost the user money
298    (such as the Dialer or SMS), unless related to a core capability of the
299    app.
300    </p>
301  </td>
302  </tr>
303
304  <tr id="FN-L1">
305  <td>
306    Install location
307  </td>
308  <td>
309    FN-L1
310  </td>
311  <td>
312    <p style="margin-bottom:.5em;">
313    App functions normally when installed on SD card (if supported by app).
314    </p>
315
316    <p style="margin-bottom:.25em;">
317    Supporting installation to SD card is recommended for most large apps
318    (10MB+). See the <a href=
319    "{@docRoot}guide/topics/data/install-location.html">App Install
320    Location</a> developer guide for information about which types of apps
321    should support installation to SD card.
322    </p>
323  </td>
324  <td>
325    <a href="#SD-1">SD-1</a>
326  </td>
327  </tr>
328
329  <tr id="FN-A1">
330  <td rowspan="4">
331    Audio
332  </td>
333  <td>
334    FN-A1
335  </td>
336  <td>
337    Audio does not play when the screen is off, unless this is a core feature
338    (for example, the app is a music player).
339  </td>
340  <td>
341    <a href="#core">CR-7</a>
342  </td>
343  </tr>
344
345  <tr id="FN-A2">
346  <td>
347    FN-A2
348  </td>
349  <td>
350    Audio does not <a href=
351    "http://android-developers.blogspot.com/2011/11/making-android-games-that-play-nice.html">
352    play behind the lock screen</a>, unless this is a core feature.
353  </td>
354  <td>
355    <a href="#core">CR-8</a>
356  </td>
357  </tr>
358
359  <tr id="FN-A3">
360  <td>
361    FN-A3
362  </td>
363  <td>
364    Audio does not play on the home screen or over another app, unless this
365    is a core feature.
366  </td>
367  <td>
368    <a href="#core">CR-1,<br>
369    CR-2</a>
370  </td>
371  </tr>
372
373  <tr id="FN-A4">
374  <td>
375    FN-A4
376  </td>
377  <td>
378    Audio resumes when the app returns to the foreground, or indicates to the
379    user that playback is in a paused state.
380  </td>
381  <td>
382    <a href="#core">CR-1, CR-8</a>
383  </td>
384  </tr>
385
386  <tr id="FN-U1">
387  <td rowspan="3">
388    UI and Graphics
389  </td>
390  <td>
391    FN-U1
392  </td>
393  <td>
394    <p style="margin-bottom:.5em;">
395    App supports both landscape and portrait orientations (if possible).
396    </p>
397
398    <p style="margin-bottom:.25em;">
399    Orientations expose largely the same features and actions and preserve
400    functional parity. Minor changes in content or views are acceptable.
401    </p>
402  </td>
403  <td>
404    <a href="#core">CR-5</a>
405  </td>
406  </tr>
407
408  <tr id="FN-U2">
409  <td>
410    FN-U2
411  </td>
412  <td>
413    <p style="margin-bottom:.5em;">
414    App uses the whole screen in both orientations and does not letterbox
415    to account for orientation changes.
416    </p>
417
418    <p style="margin-bottom:.25em;">
419    Minor letterboxing to compensate for small variations in screen
420    geometry is acceptable.
421    </p>
422  </td>
423  <td>
424    <a href="#core">CR-5</a>
425  </td>
426  </tr>
427
428  <tr id="FN-U3">
429  <td>
430    FN-U3
431  </td>
432  <td>
433    <p style="margin-bottom:.5em;">
434    App correctly handles rapid transitions between display orientations
435    without rendering problems.
436    </p>
437  </td>
438  <td>
439    <a href="#core">CR-5</a>
440  </td>
441  </tr>
442
443  <tr id="FN-S1">
444  <td rowspan="2">
445    User/app state
446  </td>
447  <td>
448    FN-S1
449  </td>
450  <td>
451    <p style="margin-bottom:.5em;">
452    App should not leave any services running when the app is in the
453    background, unless related to a core capability of the app.
454    </p>
455
456    <p style="margin-bottom:.25em;">
457    For example, the app should not leave services running to maintain a
458    network connection for notifications, to maintain a Bluetooth
459    connection, or to keep the GPS powered-on.
460    </p>
461  </td>
462  <td>
463    <a href="#core">CR-6</a>
464  </td>
465  </tr>
466
467  <tr id="FN-S2">
468  <td>
469    FN-S2
470  </td>
471  <td>
472    <p style="margin-bottom:.5em;">
473    App correctly preserves and restores user or app state.
474    </p>
475
476    <p style="margin-bottom:.25em;">
477    App preserves user or app state when leaving the foreground and
478    prevents accidental data loss due to back-navigation and other state
479    changes. When returning to the foreground, the app must restore the
480    preserved state and any significant stateful transaction that was
481    pending, such as changes to editable fields, game progress, menus,
482    videos, and other sections of the app or game.
483    </p>
484
485    <ol style="margin-bottom:.25em;list-style-type:lower-alpha">
486    <li>When the app is resumed from the Recents app switcher, the app
487    returns the user to the exact state in which it was last used.
488    </li>
489
490    <li>When the app is resumed after the device wakes from sleep (locked)
491    state, the app returns the user to the exact state in which it was last
492    used.
493    </li>
494
495    <li>When the app is relaunched from Home or All Apps, the app restores
496    the app state as closely as possible to the previous state.
497    </li>
498
499    <li>On Back keypresses, the app gives the user the option of saving any
500    app or user state that would otherwise be lost on back-navigation.
501    </li>
502    </ol>
503  </td>
504  <td>
505    <a href="#core">CR-1, CR-3, CR-5</a>
506  </td>
507  </tr>
508</table>
509
510<h3 class="rel-resources clearfloat">Related resources</h3>
511
512<div class="resource-widget resource-flow-layout col-13" data-query=
513"collection:distribute/essentials/corequalityguidelines/functionality"
514data-sortorder="-timestamp" data-cardsizes="6x3" data-maxresults="6">
515</div>
516
517<div class="headerLine">
518  <h2 id="ps">
519  Performance and Stability
520  </h2>
521
522
523</div>
524
525<p>
526  These criteria ensure that apps provide the performance, stability, and
527  responsiveness expected by users.
528</p>
529
530<table>
531  <tr>
532  <th style="width:2px;">
533    Area
534  </th>
535  <th style="width:54px;">
536    ID
537  </th>
538  <th>
539    Description
540  </th>
541  <th style="width:54px;">
542    Tests
543  </th>
544  </tr>
545
546  <tr id="PS-S1">
547  <td>
548    Stability
549  </td>
550  <td>
551    PS-S1
552  </td>
553  <td>
554    App does not crash, force close, freeze, or otherwise function abnormally
555    on any targeted device.
556  </td>
557  <td>
558    <a href="#core">CR-all</a>, <a href="#SD-1">SD-1</a>, <a href=
559    "#HA-1">HA-1</a>
560  </td>
561  </tr>
562
563  <tr id="PS-P1">
564  <td rowspan="2">
565    Performance
566  </td>
567  <td>
568    PS-P1
569  </td>
570  <td>
571    App loads quickly or provides onscreen feedback to the user (a progress
572    indicator or similar cue) if the app takes longer than two seconds to
573    load.
574  </td>
575  <td>
576    <a href="#core">CR-all</a>, <a href="#SD-1">SD-1</a>
577  </td>
578  </tr>
579
580  <tr id="PS-P2">
581  <td>
582    PS-P2
583  </td>
584  <td>
585    With StrictMode enabled (see <a href="#strictmode">StrictMode
586    Testing</a>, below), no red flashes (performance warnings from
587    StrictMode) are visible when exercising the app, including during game
588    play, animations and UI transitions, and any other part of the app.
589  </td>
590  <td>
591    <a href="#PM-1">PM-1</a>
592  </td>
593  </tr>
594
595  <tr id="PS-M1">
596  <td>
597    Media
598  </td>
599  <td>
600    PS-M1
601  </td>
602  <td>
603    Music and video playback is smooth, without crackle, stutter, or other
604    artifacts, during normal app usage and load.
605  </td>
606  <td>
607    <a href="#core">CR-all</a>, <a href="#SD-1">SD-1</a>, <a href=
608    "#HA-1">HA-1</a>
609  </td>
610  </tr>
611
612  <tr id="PS-V1">
613  <td rowspan="2">
614    Visual quality
615  </td>
616  <td>
617    PS-V1
618  </td>
619  <td>
620    <p style="margin-bottom:.5em;">
621    App displays graphics, text, images, and other UI elements without
622    noticeable distortion, blurring, or pixelation.
623    </p>
624
625    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
626    <li>App provides high-quality graphics for all targeted screen sizes
627    and form factors, including for <a href=
628    "{@docRoot}distribute/essentials/quality/tablet.html">larger-screen
629    devices such as tablets</a>.
630    </li>
631
632    <li>No aliasing at the edges of menus, buttons, and other UI elements
633    is visible.
634    </li>
635    </ol>
636  </td>
637  <td rowspan="2">
638    <a href="#core">CR-all</a>
639  </td>
640  </tr>
641
642  <tr id="PS-V2">
643  <td>
644    PS-V2
645  </td>
646  <td>
647    <p style="margin-bottom:.5em;">
648    App displays text and text blocks in an acceptable manner.
649    </p>
650
651    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
652    <li>Composition is acceptable in all supported form factors, including
653    for larger-screen devices such as tablets.
654    </li>
655
656    <li>No cut-off letters or words are visible.
657    </li>
658
659    <li>No improper word wraps within buttons or icons are visible.
660    </li>
661
662    <li>Sufficient spacing between text and surrounding elements.
663    </li>
664    </ol>
665  </td>
666  </tr>
667</table>
668
669<h3 class="rel-resources clearfloat">Related resources</h3>
670
671<div class="resource-widget resource-flow-layout col-13" data-query=
672"collection:distribute/essentials/core/performance" data-sortorder="-timestamp"
673data-cardsizes="6x3" data-maxresults="6">
674</div>
675
676<div class="headerLine">
677  <h2 id="listing">
678  Google Play
679  </h2>
680
681
682</div>
683
684<p>
685  These criteria ensure that your apps are ready to publish on Google Play.
686</p>
687
688<table>
689  <tr>
690  <th style="width:2px;">
691    Area
692  </th>
693  <th style="width:54px;">
694    ID
695  </th>
696  <th>
697    Description
698  </th>
699  <th style="width:54px;">
700    Tests
701  </th>
702  </tr>
703
704  <tr id="GP-P1">
705  <td rowspan="2">
706    Policies
707  </td>
708  <td>
709    GP-P1
710  </td>
711  <td>
712    App strictly adheres to the terms of the <a href=
713    "http://play.google.com/about/developer-content-policy.html">Google Play
714    Developer Content Policy</a> and does not offer inappropriate content,
715    does not use intellectual property or brand of others, and so on.
716  </td>
717  <td>
718    <a href="#gp">GP-all</a>
719  </td>
720  </tr>
721
722  <tr id="GP-P2">
723  <td>
724    GP-P2
725  </td>
726  <td>
727    <p style="margin-bottom:.5em;">
728    App maturity level is set appropriately, based on the <a href=
729    "http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=188189">
730    Content Rating Guidelines</a>.
731    </p>
732
733    <p style="margin-bottom:.25em;">
734    Especially, note that apps that request permission to use the device
735    location cannot be given the maturity level "Everyone".
736    </p>
737  </td>
738  <td>
739    <a href="#gp">GP-1</a>
740  </td>
741  </tr>
742
743  <tr id="GP-D1">
744  <td rowspan="3">
745    App&nbsp;Details Page
746  </td>
747  <td>
748    GP-D1
749  </td>
750  <td>
751    <p style="margin-bottom:.5em;">
752    App feature graphic follows the guidelines outlined in this <a href=
753    "http://android-developers.blogspot.com/2011/10/android-market-featured-image.html">
754    blog post</a>. Make sure that:
755    </p>
756
757    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
758    <li>The app listing includes a high-quality feature graphic.
759    </li>
760
761    <li>The feature graphic does not contain device images, screenshots, or
762    small text that will be illegible when scaled down and displayed on the
763    smallest screen size that your app is targeting.
764    </li>
765
766    <li>The feature graphic does not resemble an advertisement.
767    </li>
768    </ol>
769  </td>
770  <td>
771    <a href="#gp">GP-1, GP-2</a>
772  </td>
773  </tr>
774
775  <tr id="GP-D2">
776  <td>
777    GP-D2
778  </td>
779  <td>
780    App screenshots and videos do not show or reference non-Android devices.
781  </td>
782  <td rowspan="2">
783    <a href="#gp">GP-1</a>
784  </td>
785  </tr>
786
787  <tr id="GP-D3">
788  <td>
789    GP-D3
790  </td>
791  <td>
792    App screenshots or videos do not represent the content and experience of
793    your app in a misleading way.
794  </td>
795  </tr>
796
797  <tr id="GP-X1">
798  <td>
799    User Support
800  </td>
801  <td>
802    GP-X1
803  </td>
804  <td>
805    Common user-reported bugs in the Reviews tab of the Google Play page are
806    addressed if they are reproducible and occur on many different devices.
807    If a bug occurs on only a few devices, you should still address it if
808    those devices are particularly popular or new.
809  </td>
810  <td>
811    <a href="#gp">GP-1</a>
812  </td>
813  </tr>
814</table>
815
816<h3 class="rel-resources clearfloat">Related resources</h3>
817
818<div class="resource-widget resource-flow-layout col-13" data-query=
819"collection:distribute/essentials/core/play" data-sortorder="-timestamp"
820data-cardsizes="6x3,6x3,6x3,6x3,6x3,6x3" data-maxresults="6">
821</div>
822
823<div class="headerLine">
824  <h2 id="test-environment">
825  Setting Up a Test Environment
826  </h2>
827
828
829</div>
830
831<p>
832  To assess the quality of your app, you need to set up a suitable hardware or
833  emulator environment for testing.
834</p>
835
836<p>
837  The ideal test environment would include a small number of actual hardware
838  devices that represent key form factors and hardware/software combinations
839  currently available to consumers. It's not necessary to test on
840  <em>every</em> device that's on the market &mdash; rather, you should focus
841  on a small number of representative devices, even using one or two devices
842  per form factor.
843</p>
844
845<p>
846  If you are not able to obtain actual hardware devices for testing, you should
847  <a href="{@docRoot}tools/devices/index.html">set up emulated devices
848  (AVDs)</a> to represent the most common form factors and hardware/software
849  combinations.
850</p>
851
852<p>
853  To go beyond basic testing, you can add more devices, more form factors, or
854  new hardware/software combinations to your test environment. You can also
855  increase the number or complexity of tests and quality criteria.
856</p>
857
858<div class="headerLine">
859  <h2 id="tests">
860  Test Procedures
861  </h2>
862
863
864</div>
865
866<p>
867  These test procedures help you discover various types of quality issues in
868  your app. You can combine the tests or integrate groups of tests together in
869  your own test plans. See the sections above for references that associate
870  specific criteria with specific tests.
871</p>
872
873<table>
874  <tr>
875  <th style="width:2px;">
876    Type
877  </th>
878  <th style="width:54px;">
879    Test
880  </th>
881  <th>
882    Description
883  </th>
884  </tr>
885
886  <tr>
887  <td rowspan="12" id="core">
888    Core Suite
889  </td>
890  <td>
891    CR-0
892  </td>
893  <td>
894    <p style="margin-bottom:.5em;">
895    Navigate to all parts of the app &mdash; all screens, dialogs,
896    settings, and all user flows.
897    </p>
898
899    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
900    <li>If the application allows for editing or content creation, game
901    play, or media playback, make sure to enter those flows to create or
902    modify content.
903    </li>
904
905    <li>While exercising the app, introduce transient changes in network
906    connectivity, battery function, GPS or location availability, system
907    load, and so on.
908    </li>
909    </ol>
910  </td>
911  </tr>
912
913  <tr id="tg2">
914  <td id="core2">
915    CR-1
916  </td>
917  <td>
918    From each app screen, press the device's Home key, then re-launch the app
919    from the All Apps screen.
920  </td>
921  </tr>
922
923  <tr id="CR-2">
924  <td>
925    CR-2
926  </td>
927  <td>
928    From each app screen, switch to another running app and then return to
929    the app under test using the Recents app switcher.
930  </td>
931  </tr>
932
933  <tr id="CR-3">
934  <td>
935    CR-3
936  </td>
937  <td>
938    From each app screen (and dialogs), press the Back button.
939  </td>
940  </tr>
941
942  <tr id="CR-5">
943  <td>
944    CR-5
945  </td>
946  <td>
947    From each app screen, rotate the device between landscape and portrait
948    orientation at least three times.
949  </td>
950  </tr>
951
952  <tr id="CR-6">
953  <td>
954    CR-6
955  </td>
956  <td>
957    Switch to another app to send the test app into the background. Go to
958    Settings and check whether the test app has any services running while in
959    the background. In Android 4.0 and higher, go to the Apps screen and find
960    the app in the "Running" tab. In earlier versions, use "Manage
961    Applications" to check for running services.
962  </td>
963  </tr>
964
965  <tr id="CR-7">
966  <td>
967    CR-7
968  </td>
969  <td>
970    Press the power button to put the device to sleep, then press the power
971    button again to awaken the screen.
972  </td>
973  </tr>
974
975  <tr id="CR-8">
976  <td>
977    CR-8
978  </td>
979  <td>
980    Set the device to lock when the power button is pressed. Press the power
981    button to put the device to sleep, then press the power button again to
982    awaken the screen, then unlock the device.
983  </td>
984  </tr>
985
986  <tr id="CR-9">
987  <!-- Hardware features -->
988
989  <td>
990    CR-9
991  </td>
992  <td>
993    For devices that have slide-out keyboards, slide the keyboard in and out
994    at least once. For devices that have keyboard docks, attach the device to
995    the keyboard dock.
996  </td>
997  </tr>
998
999  <tr id="CR-10">
1000  <td>
1001    CR-10
1002  </td>
1003  <td>
1004    For devices that have an external display port, plug-in the external
1005    display.
1006  </td>
1007  </tr>
1008
1009  <tr id="CR-11">
1010  <td>
1011    CR-11
1012  </td>
1013  <td>
1014    Trigger and observe in the notications drawer all types of notifications
1015    that the app can display. Expand notifications where applicable (Android
1016    4.1 and higher), and tap all actions offered.
1017  </td>
1018  </tr>
1019
1020  <tr id="CR-12">
1021  <td>
1022    CR-12
1023  </td>
1024  <td>
1025    Examine the permissions requested by the app by going to Settings &gt;
1026    App Info.
1027  </td>
1028  </tr>
1029
1030  <tr id="tg3">
1031  <td>
1032    Install on SD Card
1033  </td>
1034  <td>
1035    SD-1
1036  </td>
1037  <td>
1038    <p style="margin-bottom:.5em;">
1039    Repeat <em>Core Suite</em> with app installed to <a href=
1040    "{@docRoot}guide/topics/data/install-location.html">device SD card</a>
1041    (if supported by app).
1042    </p>
1043
1044    <p style="margin-bottom:.25em;">
1045    To move the app to SD card, you can use Settings &gt; App Info &gt;
1046    Move to SD Card.
1047    </p>
1048  </td>
1049  </tr>
1050
1051  <tr id="tg32">
1052  <td>
1053    Hardware acceleration
1054  </td>
1055  <td>
1056    HA-1
1057  </td>
1058  <td>
1059    <p style="margin-bottom:.5em;">
1060    Repeat <em>Core Suite</em> with hardware acceleration enabled.
1061    </p>
1062
1063    <p style="margin-bottom:.25em;">
1064    To force-enable hardware acceleration (where supported by device), add
1065    <code>hardware-accelerated="true"</code> to the
1066    <code>&lt;application&gt;</code> in the app manifest and recompile.
1067    </p>
1068  </td>
1069  </tr>
1070
1071  <tr id="tg33">
1072  <td>
1073    Performance Monitoring
1074  </td>
1075  <td>
1076    PM-1
1077  </td>
1078  <td>
1079    <p style="margin-bottom:.5em;">
1080    Repeat <em>Core Suite</em> with StrictMode profiling enabled <a href=
1081    "#strictmode">as described below</a>.
1082    </p>
1083
1084    <p style="margin-bottom:.25em;">
1085    Pay close attention to garbage collection and its impact on the user
1086    experience.
1087    </p>
1088  </td>
1089  </tr>
1090
1091  <tr id="gp">
1092  <td rowspan="3">
1093    Google Play
1094  </td>
1095  <td>
1096    GP-1
1097  </td>
1098  <td>
1099    Sign into the <a href="https://play.google.com/apps/publish/">Developer
1100    Console</a> to review your developer profile, app description,
1101    screenshots, feature graphic, maturity settings, and user feedback.
1102  </td>
1103  </tr>
1104
1105  <tr id="GP-2">
1106  <td>
1107    GP-2
1108  </td>
1109  <td>
1110    Download your feature graphic and screenshots and scale them down to
1111    match the display sizes on the devices and form factors you are
1112    targeting.
1113  </td>
1114  </tr>
1115
1116  <tr id="GP-3">
1117  <td>
1118    GP-3
1119  </td>
1120  <td>
1121    Review all graphical assets, media, text, code libraries, and other
1122    content packaged in the app or expansion file download.
1123  </td>
1124  </tr>
1125
1126  <tr id="GP-4">
1127  <td>
1128    Payments
1129  </td>
1130  <td>
1131    GP-4
1132  </td>
1133  <td>
1134    Navigate to all screens of your app and enter all in-app purchase flows.
1135  </td>
1136  </tr>
1137</table>
1138
1139<h3 id="strictmode">
1140  Testing with StrictMode
1141</h3>
1142
1143<p>
1144  For performance testing, we recommend enabling {@link android.os.StrictMode}
1145  in your app and using it to catch operations on the main thread and other
1146  threads that could affect performance, network accesses, file reads/writes,
1147  and so on.
1148</p>
1149
1150<p>
1151  You can set up a monitoring policy per thread using {@link
1152  android.os.StrictMode.ThreadPolicy.Builder} and enable all supported
1153  monitoring in the <code>ThreadPolicy</code> using {@link
1154  android.os.StrictMode.ThreadPolicy.Builder#detectAll()}.
1155</p>
1156
1157<p>
1158  Make sure to enable <strong>visual notification</strong> of policy violations
1159  for the <code>ThreadPolicy</code> using {@link
1160  android.os.StrictMode.ThreadPolicy.Builder#penaltyFlashScreen()
1161  penaltyFlashScreen()}.
1162</p>
1163