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 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 — 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 — 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 > 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 > App Info > 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><application></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