Wenn du die grundlegenden Qualitätsrichtlinien für Apps befolgst, schaffst du eine solide Grundlage für eine hochwertige App.
In den Richtlinien ist die Mindestqualität definiert, die alle Apps erfüllen sollten.
Qualität adaptiver Apps
Android-Apps laufen auf einer Vielzahl von Geräten – von kompakten Smartphones über Tablets, Foldables, Desktops, Smart Displays, Infotainmentsysteme im Auto, Fernseher bis hin zu XR-Geräten. In Fenstermodi wie dem Splitscreen-Modus und dem Desktop-Freiform-Fenster können Apps in Bereichen des Bildschirms ausgeführt werden, deren Größe sich anpassen lässt.
Beachten Sie die Qualitätsrichtlinien für adaptive Apps in Verbindung mit den Qualitätsrichtlinien für Apps, um:
- Apps erstellen, die für alle Formfaktoren und Displaygrößen optimiert sind
- Höheres Ranking Ihrer Apps in Google Play-Einträgen und in der Suche
- Mehr Nutzer gewinnen und die Nutzerbindung erhöhen
Richtlinien
Die folgenden grundlegenden Richtlinien helfen Ihnen, eine einfache, hochwertige App zu entwickeln.
Nutzererfahrung
Die standardmäßigen visuellen Design- und Interaktionsmuster von Android sorgen für eine einheitliche und intuitive Nutzererfahrung.
Verwenden Sie nach Möglichkeit Material Design-Komponenten anstelle von Android-Plattformkomponenten, um die Benutzeroberfläche Ihrer App zu erstellen. Material Design bietet ein modernes Android-Design und eine einheitliche Benutzeroberfläche für alle Android-Versionen.
Nutzerfreundlichkeit
| ID | Tests | Beschreibung |
|---|---|---|
| Consistent_UX | T-Consistent_UX, T-SD_Card |
Die App bietet eine einheitliche Nutzererfahrung für alle Anwendungsfälle der App auf allen Formfaktoren. |
| App_Switcher | T-App_Switcher, T-SD_Card |
Die App wird in den Hintergrund verschoben, wenn der Fokus zu einer anderen App wechselt. Sie kehrt in den Vordergrund zurück, wenn sie über die App-Auswahl Zuletzt verwendet wieder aktiviert wird. |
| Sleep_Resume | T-Sleep_Resume, T-SD_Card |
Wenn die App im Vordergrund ausgeführt wird, wird sie pausiert, wenn das Gerät in den Ruhemodus wechselt, und fortgesetzt, wenn das Gerät wieder aktiv wird. |
| Lock_Resume | T-Lock_Resume, T-SD_Card |
Wenn die App im Vordergrund ausgeführt wird, wird sie pausiert, wenn das Gerät gesperrt wird, und fortgesetzt, wenn das Gerät entsperrt wird. |
Benutzeroberfläche
| ID | Tests | Beschreibung |
|---|---|---|
| Display_State_Parity | T-Orientation_Transitions |
Displayausrichtungen und Klappzustände bieten im Wesentlichen dieselben Funktionen und Aktionen und sorgen für funktionale Parität. |
| Fullscreen_Display | T-Orientation_Transitions |
Die App füllt das App-Fenster in beiden Ausrichtungen aus und wird aufgrund von Konfigurationsänderungen, einschließlich des Auf- und Zuklappens des Geräts, nicht im Letterbox-Format angezeigt. Geringfügiges Letterboxing zum Ausgleich kleiner Abweichungen bei der Bildschirmgeometrie ist akzeptabel. |
| Orientation_Transitions | T-Orientation_Transitions | Die App verarbeitet schnelle Übergänge zwischen Bildschirmausrichtungen und das Auf- und Zuklappen des Geräts ohne Probleme beim Rendern des Displays und ohne Verlust des Status. |
Visuelle Qualität
| ID | Tests | Beschreibung |
|---|---|---|
| Graphic_Quality | T-Graphic_Quality |
Die App zeigt Grafiken, Text, Bilder und andere UI-Elemente ohne erkennbare Verzerrung, Unschärfe oder Pixelbildung an.
|
| Line_Length | T-Line_Length | Die App sorgt für die Lesbarkeit von Text und Textblöcken, indem die Zeilenlänge für jede der unterstützten Sprachen der App auf 45–75 Zeichen (einschließlich Leerzeichen) begrenzt wird. |
| Theme_Support | T-Theme_Support | Die Inhalte der App und alle Webinhalte, auf die die App zugreift, unterstützen sowohl das helle als auch das dunkle Design. |
Navigation
| ID | Tests | Beschreibung |
|---|---|---|
| Back_Button_Nav | T-Back_Nav | Die App unterstützt die standardmäßige Navigation mit dem Button „Zurück“ und verwendet keine benutzerdefinierten Aufforderungen zur Verwendung des Buttons „Zurück“ auf dem Bildschirm. |
| Back_Gesture_Nav | T-Back_Nav | Die App unterstützt die Bedienung über Gesten, um zurückzugehen und den Startbildschirm aufzurufen. |
| State_Preservation | T-State_Preservation, T-Back_Nav |
Die App behält den Nutzer- oder App-Status bei, wenn sie den Vordergrund verlässt, und verhindert versehentlichen Datenverlust durch Rückwärtsnavigation und sonstige Statusänderungen. Wenn die App in den Vordergrund zurückkehrt, stellt sie den gespeicherten Status und alle ausstehenden zustandsorientierten Transaktionen wieder her. Beispiele hierfür sind Änderungen an bearbeitbaren Feldern, am Spielfortschritt, an Menüs, Videos und anderen Bereichen der App.
|
Benachrichtigungen
| ID | Tests | Beschreibung |
|---|---|---|
| Notification_Quality | T-Notification_Quality |
Benachrichtigungen enthalten relevante Informationen zu Ihrer App.
|
| Conversation_Quality | T-Notification_Quality |
Für Messaging-Apps, Social Apps und Unterhaltungen:
|
Bedienungshilfen
| ID | Tests | Beschreibung |
|---|---|---|
| Touch_Target_Size | T-Touch_Target_Size | Berührungszielbereiche sind mindestens 48 dp groß. Weitere Informationen finden Sie in den Material Design-Richtlinien zu Zielgrößen. |
| Visual_Contrast | T-Visual_Contrast |
Für App-Text und Vordergrundinhalte gelten die folgenden Kontrastverhältnisse zum App-Hintergrund:
|
| Content_Description | T-Content_Description | Beschreiben Sie jedes UI-Element mit Ausnahme von TextView mit contentDescription. |
Funktionalität
Ihre App sollte das folgende funktionale Verhalten implementieren.
Audio
| ID | Tests | Beschreibung |
|---|---|---|
| Audio_Playback_Start | T-Audio_Playback_Start |
Wenn der Nutzer die Audiowiedergabe startet, sollte die App innerhalb einer Sekunde eine der folgenden Aktionen ausführen:
|
| Audio_Focus_Request | T-Audio_Focus_Request | Die App sollte den Audiofokus anfordern, wenn die Audiowiedergabe beginnt, und den Audiofokus aufgeben, wenn die Wiedergabe beendet wird. |
| Audio_Focus_Change | T-Audio_Focus_Change | Die App sollte Anfragen anderer Apps für den Audiofokus verarbeiten. Beispielsweise kann eine App die Wiedergabelautstärke verringern, wenn eine andere App Sprache wiedergibt. |
| Audio_Playback_Background | T-Audio_Playback_Background | Die App sollte die Wiedergabe im Hintergrund unterstützen. Die App muss einen Dienst im Vordergrund verwenden, um zu verhindern, dass das System den App-Prozess beendet, sobald die App nicht mehr sichtbar ist. Die App muss außerdem eine dauerhafte, nicht schließbare Benachrichtigung in der Statusleiste oder auf dem Sperrbildschirm anzeigen, um den Nutzer darüber zu informieren, dass die App ausgeführt wird. Nutzer sollten die Wiedergabe über die Benachrichtigungs- oder Sperrbildschirm-Steuerelemente oder die Steuerelemente eines verbundenen Zubehörs steuern können. |
| Audio_Notification_Style | T-Audio_Notification_Style | Wenn die App Audio im Hintergrund wiedergibt, muss sie eine Benachrichtigung im Stil von MediaStyle erstellen. |
| Audio_Playback_Resume | T-Audio_Playback_Resume | Wenn sich die App im Hintergrund befindet und die Audiowiedergabe pausiert ist, wird die Audiowiedergabe fortgesetzt, wenn die App wieder in den Vordergrund wechselt, oder die App muss dem Nutzer anzeigen, dass die Wiedergabe pausiert ist. |
Video
| ID | Tests | Beschreibung |
|---|---|---|
| Video_PiP | T-Video_PiP | Wenn in der App Videos wiedergegeben werden, sollte die Bild-im-Bild-Wiedergabe unterstützt werden. |
| Video_Encoding | T-Video_Encoding | Wenn die App Videos codiert, sollte sie dazu den HEVC-Videokomprimierungsstandard verwenden. |
| Video_Playback_Background | T-Video_Playback_Background | Die App unterstützt die Hintergrundwiedergabe von Videos, wenn sie nicht die oberste App ist, einschließlich wenn das App-Fenster:
|
Teilen
| ID | Tests | Beschreibung |
|---|---|---|
| System_Sharesheet | T-System_Sharesheet | Die App sollte das Android-Sharesheet verwenden, wenn Inhalte geteilt werden. Die App kann Ziele vorschlagen, die für benutzerdefinierte Lösungen nicht verfügbar sind. |
Hintergrunddienste
| ID | Tests | Beschreibung |
|---|---|---|
| Background_Service_Optimization | T-Background_Service_Optimization |
Die App vermeidet es, unnötig lange Dienste im Hintergrund auszuführen, damit das Gerät des Nutzers reibungslos funktioniert. Hinweis:Das System wendet verschiedene Einschränkungen für Hintergrunddienste an. Die folgenden Beispiele zeigen, wie Hintergrunddienste nicht verwendet werden sollten:
Weitere Informationen finden Sie unter Hintergrundaufgaben – Übersicht. |
Leistung und Stabilität
Ihre App sollte optimale Leistung, Stabilität, Kompatibilität und Reaktionsschnelligkeit bieten.
Leistung
| ID | Tests | Beschreibung |
|---|---|---|
| App_Startup_Time | T-App_Startup_Time | Die App wird schnell geladen oder es wird ein Feedback auf dem Bildschirm angezeigt (eine Fortschrittsanzeige oder ein ähnlicher Hinweis), wenn das Laden der App länger als zwei Sekunden dauert. |
| Rendering_Performance | T-Rendering_Performance | Die App rendert alle 16 Millisekunden (oder weniger) Frames, um mindestens 60 Bilder pro Sekunde anzuzeigen. Hilfe bei Rendering-Problemen finden Sie unter Langsames Rendering. |
| StrictMode_Compliance | T-StrictMode_Compliance | Wenn StrictMode aktiviert ist (siehe Abschnitt zum Testen von StrictMode), werden beim Testen der App keine roten Blitze (Leistungswarnungen von StrictMode) angezeigt. |
Stabilität
| ID | Tests | Beschreibung |
|---|---|---|
| Stability_ANR | T-Stability_ANR | Die App stürzt nicht ab und blockiert nicht den UI-Thread, was zu ANR-Fehlern (Android Not Responding) führen würde. Verwenden Sie den Pre-Launch-Bericht von Google Play, um potenzielle Stabilitätsprobleme zu erkennen. Behalten Sie nach der Bereitstellung die Seite Android Vitals in der Google Play Console im Blick. |
SDK
| ID | Tests | Beschreibung |
|---|---|---|
| Android_Platform_Compatibility | T-Android_Platform_Compatibility | Die App läuft auf der neuesten öffentlichen Version der Android-Plattform, ohne abzustürzen oder die Hauptfunktionen stark zu beeinträchtigen. |
| Target_SDK_Version | T-Target_SDK_Version | Die App ist auf das neueste Android SDK ausgerichtet, das erforderlich ist, um die Google Play-Anforderungen zu erfüllen. Dazu wird der Wert targetSdk in der Datei build.gradle des App-Moduls festgelegt. |
| Compile_SDK_Version | T-Target_SDK_Version | Die App wurde mit dem neuesten Android SDK erstellt, indem der Wert compileSdk in der Datei build.gradle des App-Moduls festgelegt wurde. |
| SDK_Maintenance | T-SDK_Maintenance, T-Non_SDK_Interfaces |
Alle verwendeten Google- oder Drittanbieter-SDKs sind auf dem neuesten Stand. Alle Verbesserungen an diesen SDKs in Bezug auf Stabilität, Kompatibilität oder Sicherheit sollten Nutzern zeitnah zur Verfügung gestellt werden. Verwenden Sie für Google SDKs nach Möglichkeit SDKs, die von den Google Play-Diensten unterstützt werden. Diese SDKs sind abwärtskompatibel, erhalten automatische Updates, reduzieren die Größe Ihres App-Pakets und nutzen die Ressourcen auf dem Gerät effizient. |
| Non_SDK_Interfaces | T-Non_SDK_Interfaces | Die App verwendet keine Nicht-SDK-Schnittstellen. |
| Production_Build_Quality | T-Production_Build_Quality | In der Produktions-App sind keine Debug-Bibliotheken enthalten. Debug-Bibliotheken in der App können zu Leistungs- und Sicherheitsproblemen führen. |
Akku
| ID | Tests | Beschreibung |
|---|---|---|
| Power_Management | T-Power_Management |
Die App unterstützt die Energieverwaltungsfunktionen Stromsparmodus und App-Standby ordnungsgemäß. Apps können eine Ausnahme von der Energiesparfunktion anfordern. Weitere Informationen finden Sie unter Unterstützung für andere Anwendungsfälle im Artikel Für den Stromsparmodus und App-Standby optimieren. |
Datenschutz und Sicherheit
Die App verarbeitet Nutzerdaten und personenbezogene Daten auf sichere Weise und bietet angemessene Berechtigungsstufen.
Im Google Play Store veröffentlichte Anwendungen müssen außerdem die Google Play-Richtlinien zu Nutzerdaten einhalten, um den Datenschutz der Nutzer zu gewährleisten.
Berechtigungen
| ID | Tests | Beschreibung |
|---|---|---|
| Minimize_Permissions | T-Minimize_Permissions | Die App fordert nur die absolut notwendigen Berechtigungen an, die für den aktuellen Anwendungsfall erforderlich sind. Bei einigen Berechtigungen, z. B. für den Standort, verwendet die App nach Möglichkeit eine grobe Angabe anstelle einer genauen. Weitere Informationen finden Sie unter Berechtigungsanfragen minimieren. |
| Sensitive_Permissions | T-Sensitive_Permissions |
Die App fordert nur dann die Berechtigung für den Zugriff auf sensible Daten (z. B. Berechtigungsgruppen für SMS oder Anrufliste oder Standort) oder kostenpflichtige Dienste (z. B. Telefon oder SMS) an, wenn dies direkt mit den Hauptanwendungsfällen der App zusammenhängt. Die Auswirkungen dieser Berechtigungen müssen dem Nutzer deutlich offengelegt werden. Je nachdem, wie Ihre App die Berechtigungen verwendet, gibt es möglicherweise eine alternative Möglichkeit, den Anwendungsfall Ihrer App zu erfüllen, ohne auf vertrauliche Informationen zugreifen zu müssen. Anstatt beispielsweise Berechtigungen für die Kontakte eines Nutzers anzufordern, können Sie einen impliziten Intent verwenden, um Zugriff anzufordern. |
| Runtime_Permissions | T-Runtime_Permissions | Die App fordert Laufzeitberechtigungen an, wenn die entsprechende Funktion angefordert wird, und nicht beim Start der App. |
| Permission_Rationale | T-Permission_Rationale | In der App wird klar erklärt, warum Berechtigungen erforderlich sind. |
| Graceful_Degradation | T-Graceful_Degradation | Die App bietet graduelle Fehlertoleranz, wenn Nutzer eine Berechtigung ablehnen oder widerrufen. Die App darf den Nutzerzugriff nicht vollständig verhindern. |
Daten und Dateien
| ID | Tests | Beschreibung |
|---|---|---|
| Sensitive_Data_Storage | T-Sensitive_Data_Storage, T-Sensitive_Data_Handling |
Alle sensiblen Daten werden im internen Speicher der App gespeichert. |
| Sensitive_Data_Logging | T-Sensitive_Data_Logging | Keine personenbezogenen oder vertraulichen Nutzerdaten werden im Systemprotokoll oder in einem App-spezifischen Protokoll erfasst. |
| Hardware_IDs | T-Hardware_IDs | Die App verwendet keine nicht rücksetzbaren Hardware-IDs wie die IMEI zu Identifikationszwecken. |
Datensicherung und -wiederherstellung
| ID | Tests | Beschreibung |
|---|---|---|
| App_Data_Backup | T-App_Data_Backup |
Die App behält Nutzerdaten, Einstellungen und den App-Status bei Cloud-Sicherungen und Übertragungen von Gerät zu Gerät bei. Implementiere die automatische Sicherung und konfiguriere |
| App_Logins_Restoration | T-App_Logins_Restoration |
Die App stellt Nutzerkonten und den Anmeldestatus automatisch wieder her, wenn ein Nutzer ein neues Gerät einrichtet. Implementieren Sie die Anmeldedaten-Wiederherstellung mit dem Credential Manager, um Nutzer automatisch neu zu authentifizieren, ohne dass sie sich manuell anmelden oder Kontowiederherstellungsabläufe durchlaufen müssen. |
Identität
| ID | Tests | Beschreibung |
|---|---|---|
| Autofill_Hints | T-Autofill_Hints | Die App bietet Vorschläge zum automatischen Ausfüllen von Anmeldedaten und anderen vertraulichen Informationen wie Kreditkartendaten, Postanschrift und Telefonnummer. |
| Credential_Manager | T-Credential_Manager | Die App ist in den Anmeldedaten-Manager für Android eingebunden, um eine nahtlose Anmeldung zu ermöglichen, die die Unterstützung für Passkeys, föderierte Identitäten und Passwörter vereinheitlicht. |
| Biometrische_Authentifizierung | T-Biometric_Authentication | Die App unterstützt die biometrische Authentifizierung, um Finanztransaktionen oder vertrauliche Informationen wie wichtige Nutzerdokumente zu schützen. |
App-Komponenten
| ID | Tests | Beschreibung |
|---|---|---|
| Component_Export | T-Component_Export |
Die App legt das Attribut Nur Anwendungskomponenten, die Daten mit anderen Apps teilen, oder Komponenten, die von anderen Apps aufgerufen werden sollen, werden exportiert. |
| Component_Permissions | T-Component_Permissions |
Alle Intents und Broadcasts entsprechen den Best Practices:
|
| Component_Protection | T-Component_Protection |
Alle Komponenten, die Inhalte zwischen Apps teilen, verwenden Apps sollten nicht auf den Zugriff auf eine Liste installierter Pakete angewiesen sein. |
Netzwerk
| ID | Tests | Beschreibung |
|---|---|---|
| Network_Security_Traffic | T-Network_Security_Traffic | Der gesamte Netzwerkverkehr wird über SSL gesendet. |
| Network_Security_Configuration | T-Network_Security_Configuration | Die App deklariert eine Netzwerksicherheitskonfiguration. |
| Security_Provider_Initialization | T-Security_Provider_Initialization | Wenn die App Google Play-Dienste verwendet, wird der Sicherheitsanbieter beim Start der Anwendung initialisiert. |
WebViews
| ID | Tests | Beschreibung |
|---|---|---|
| WebView_Asset_Loader | T-WebView_Asset_Loader, T-WebView_Navigation |
Verwenden Sie nicht setAllowUniversalAccessFromFileURLs() , um auf lokale Inhalte zuzugreifen. Verwenden Sie stattdessen WebViewAssetLoader. |
| WebView_JavaScript | T-WebView_JavaScript, T-WebView_Navigation |
WebViews verwenden Verwenden Sie unter Android 6.0 (API-Level 23 und höher) stattdessen HTML-Nachrichtenkanäle. |
Ausführung
| ID | Tests | Beschreibung |
|---|---|---|
| App_Bundles | T-App_Bundles |
Die App lädt keinen Code dynamisch von außerhalb des APK der App. Verwenden Sie Android App Bundles, die Play Feature Delivery und Play Asset Delivery enthalten. Seit August 2021 ist die Verwendung von Android App Bundles für alle neuen Apps im Google Play Store obligatorisch. |
Kryptografie
| ID | Tests | Beschreibung |
|---|---|---|
| Cryptographic_Algorithms | T-Cryptographic_Algorithms | Die App verwendet starke, von der Plattform bereitgestellte kryptografische Algorithmen und einen Zufallszahlengenerator. Außerdem werden in der App keine benutzerdefinierten Algorithmen implementiert. |
Google Play
Ihre App kann bei Google Play veröffentlicht werden.
Richtlinien
| ID | Tests | Beschreibung |
|---|---|---|
| Play_Content_Policies | T-Play_Content_Policies | Die App hält sich strikt an die Bedingungen der Inhaltsrichtlinien für Google Play-Entwickler, bietet keine unangemessenen Inhalte und verwendet nicht das geistige Eigentum oder die Marke anderer. |
| Play_Content_Rating | T-Play_Content_Policies | Die Altersfreigabe der App ist gemäß den Richtlinien zur Altersfreigabe angemessen festgelegt. |
App-Detailseite
| ID | Tests | Beschreibung |
|---|---|---|
| Play_Feature_Graphic | T-Play_Feature_Graphic, T-Play_Graphic_Assets |
Die Vorstellungsgrafik der App entspricht den Richtlinien in diesem Hilfeartikel. Prüfe Folgendes:
|
| Play_Device_References | T-Play_Graphic_Assets | In App-Screenshots und ‑Videos werden keine Nicht-Android-Geräte gezeigt oder erwähnt. |
| Play_Misleading_Content | T-Play_Graphic_Assets | Die Screenshots oder Videos der App stellen den Inhalt und die Nutzung Ihrer App nicht irreführend dar. |
Nutzer-Support
| ID | Tests | Beschreibung |
|---|---|---|
| Play_User_Reviews | T-Play_Content_Policies | Von Nutzern häufig gemeldete Fehler auf dem Tab Rezensionen der Google Play-Seite werden berücksichtigt, wenn sie reproduzierbar sind und auf vielen verschiedenen Geräten auftreten. Wenn ein Fehler nur auf wenigen Geräten auftritt, sollten Sie ihn trotzdem beheben, wenn diese Geräte besonders beliebt oder neu sind. |
Testumgebung
Richten Sie eine Testumgebung so ein:
Emulator-Tests:Mit dem Android-Emulator können Sie Ihre App unter verschiedenen Android-Versionen und Bildschirmauflösungen testen. Richte emulierte Geräte (AVDs) ein, die die gängigsten Formfaktoren und Hardware-/Softwarekombinationen für deine Zielgruppe darstellen. Testen Sie verschiedene Formfaktoren mit mindestens den folgenden Emulatoren:
- Faltbare Geräte: 7,6" faltbares Display mit äußerem Display (im AVD Manager unter „Smartphones“ aufgeführt)
- Tablet: Pixel C 9,94" (2.560 px × 1.800 px)
- Testen von Benachrichtigungen in mobilen Apps: Mobilgerät / Emulator mit Wear OS-Emulator koppeln: Wear OS Round 1,84"
Hardwaregeräte: Ihre Testumgebung sollte eine kleine Anzahl von tatsächlichen Hardwaregeräten enthalten, die die wichtigsten Formfaktoren und Hardware-/Softwarekombinationen repräsentieren, die für Verbraucher verfügbar sind. Sie müssen nicht auf jedem Gerät testen, das auf dem Markt ist. Konzentrieren Sie sich auf eine kleine Anzahl repräsentativer Geräte, sogar auf ein oder zwei Geräte pro Formfaktor.
Gerätetestlabore:Du kannst auch Drittanbieterdienste wie Firebase Test Lab verwenden, um deine App auf einer Vielzahl von Geräten zu testen.
Mit der neuesten Android-Version testen:Neben dem Testen repräsentativer Android-Versionen für deine Zielgruppe solltest du immer auch mit der neuesten Android-Version testen, um sicherzustellen, dass die neuesten Verhaltensänderungen die Nutzerfreundlichkeit deiner App nicht beeinträchtigen.
Weitere Informationen zu Tests, einschließlich Unittests, Integrationstests und UI-Tests, finden Sie unter Grundlagen zum Testen von Android-Apps.
StrictMode
Aktivieren Sie für Leistungstests StrictMode in Ihrer App. Verwenden Sie StrictMode, um Vorgänge zu erfassen, die sich auf die Leistung, Netzwerkzugriffe sowie Lese- und Schreibvorgänge für Dateien auswirken könnten. Suchen Sie sowohl im Hauptthread als auch in anderen Threads nach potenziell problematischen Vorgängen.
Richten Sie mit StrictMode.ThreadPolicy.Builder eine Monitoring-Richtlinie pro Thread ein und aktivieren Sie mit detectAll() alle unterstützten Monitoring-Funktionen in der ThreadPolicy.
Aktivieren Sie die visuelle Benachrichtigung über Richtlinienverstöße für ThreadPolicy mit penaltyFlashScreen().
Tests
Mit den Tests zur grundlegenden App-Qualität können Sie die grundlegende Qualität Ihrer App beurteilen. Sie können die Tests kombinieren oder Gruppen von Tests in Ihren Testplan einbinden.
Nutzererfahrung
Testen Sie, ob die Nutzererfahrung einheitlich und intuitiv ist.
Nutzerfreundlichkeit
| ID | Funktion | Beschreibung |
|---|---|---|
| T-Consistent_UX | Consistent_UX |
Rufen Sie alle Bereiche der App auf – alle Bildschirme, Dialogfelder, Einstellungen und alle User-Flows. Gehen Sie dazu so vor:
|
| T-App_Switcher | App_Switcher | Wechseln Sie von jedem App-Bildschirm zu einer anderen laufenden App und kehren Sie dann über den App-Schnellzugriff Zuletzt verwendet zur zu testenden App zurück. |
| T-Sleep_Resume | Sleep_Resume | Drücke die Ein/Aus-Taste, um das Gerät in den Ruhemodus zu versetzen, und drücke sie dann noch einmal, um den Ruhemodus zu beenden. |
| T-Lock_Resume | Lock_Resume | Richten Sie eine Displaysperre auf dem Gerät ein. Drücke die Ein/Aus-Taste, um das Gerät in den Ruhemodus zu versetzen (wodurch es gesperrt wird). Drücke dann die Ein/Aus-Taste noch einmal, um das Display zu aktivieren und das Gerät zu entsperren. |
SD-Karte
| ID | Funktion | Beschreibung |
|---|---|---|
| T-SD_Card | Consistent_UX |
Führe Tests der Hauptfunktionen mit der App durch, die auf der SD-Karte eines Geräts installiert ist (sofern die App diese Installationsmethode unterstützt). Wenn Sie die App auf eine SD-Karte verschieben möchten, rufen Sie die Einstellungen der App auf. |
Benutzeroberfläche
| ID | Funktion | Beschreibung |
|---|---|---|
| T-Orientation_Transitions | Display_State_Parity, Fullscreen_Display, Orientation_Transitions |
Drehen Sie das Gerät auf jedem App-Bildschirm mindestens dreimal zwischen Quer- und Hochformat sowie zwischen zu- und aufgeklapptem Zustand. Prüfen Sie, ob die App Folgendes tut:
|
Visuelle Qualität
| ID | Funktion | Beschreibung |
|---|---|---|
| T-Graphic_Quality | Graphic_Quality | Verwenden Sie alle Funktionen Ihrer App. Prüfen Sie, ob alle visuellen Elemente, einschließlich Grafiken, Text, Bilder und anderer UI-Elemente, frei von Verzerrungen, Unschärfe oder Verpixelung sind. |
| T-Line_Length | Line_Length |
Prüfen Sie alle Textblöcke in der App. Die Zeilenlänge von Text und Textblöcken sollte aus Gründen der Lesbarkeit auf 45–75 Zeichen (einschließlich Leerzeichen) begrenzt sein. Überprüfen Sie Folgendes:
|
| T-Theme_Support | Theme_Support | Prüfen Sie, ob der gesamte Text sowohl im hellen als auch im dunklen Design lesbar ist. Prüfen Sie, ob alle visuellen Elemente in hellen und dunklen Designs gut erkennbar und ästhetisch sind. |
Navigation
| ID | Funktion | Beschreibung |
|---|---|---|
| T-Back_Nav | Back_Button_Nav, Back_Gesture_Nav |
Rufen Sie alle Bereiche der App auf – alle Bildschirme, Dialogfelder, Einstellungen und alle User-Flows. Drücke auf jedem App-Bildschirm die Zurück-Taste oder wische zurück. Die App sollte zum vorherigen Bildschirm oder zum Startbildschirm zurückkehren. |
| T-State_Preservation | State_Preservation | Drücke auf jedem App-Bildschirm die Startbildschirmtaste des Geräts oder wische in der Bedienung über Gesten nach oben und starte die App dann über den Bildschirm Alle Apps neu. |
Benachrichtigungen
| ID | Funktion | Beschreibung |
|---|---|---|
| T-Notification_Quality | Notification_Quality, Conversation_Quality |
Lösen Sie alle Arten von Benachrichtigungen aus, die die App anzeigen kann, und beobachten Sie sie im Benachrichtigungsbereich. Maximieren Sie gegebenenfalls Benachrichtigungen (Android 4.1 und höher) und tippen Sie auf alle verfügbaren Aktionen. |
Bedienungshilfen
| ID | Funktion | Beschreibung |
|---|---|---|
| T-Touch_Target_Size | Touch_Target_Size | Prüfen Sie, ob die Berührungszielbereiche für alle Displaygrößen und ‑konfigurationen eine einheitliche, barrierefreie Größe und Position haben. Informationen zur Barrierefreiheit im Internet finden Sie unter Accessibility Scanner. |
| T-Visual_Contrast | Visual_Contrast | Überprüfen Sie den Kontrast aller visuellen Elemente. |
| T-Content_Description | Content_Description | Prüfen Sie, ob alle UI-Elemente außer TextView Inhaltsbeschreibungen haben. |
Funktionalität
Prüfen Sie, ob Ihre App das folgende funktionale Verhalten implementiert.
Audio
| ID | Funktion | Beschreibung |
|---|---|---|
| T-Audio_Playback_Start | Audio_Playback_Start | Audiowiedergabe starten Prüfe, ob die App innerhalb einer Sekunde mit der Audiowiedergabe beginnt oder visuell anzeigt, dass die Audiodaten für die Wiedergabe vorbereitet werden. |
| T-Audio_Focus_Request | Audio_Focus_Request | Audiowiedergabe starten Die App sollte den Audiofokus anfordern. Wenn die Audiowiedergabe beendet wird, sollte die App den Audiofokus aufgeben. Bei Apps, die auf Android 12 (API-Level 31) und höher ausgerichtet sind, geschieht dies automatisch. |
| T-Audio_Focus_Change | Audio_Focus_Change | Audiowiedergabe starten Starten Sie die Audiowiedergabe in einer anderen App. Ihre App sollte auf die Änderung des Audiofokus reagieren und die Audiowiedergabe beenden oder die Wiedergabelautstärke reduzieren. |
| T-Audio_Playback_Background | Audio_Playback_Background | Audiowiedergabe starten Interagiere mit einer anderen Nicht-Audio-App als App im Vordergrund. Die App sollte weiterhin Audio im Hintergrund wiedergeben und eine Benachrichtigung in der Statusleiste anzeigen. Prüfe, ob du die Wiedergabe über die Steuerelemente in der Benachrichtigung steuern kannst. Sperren Sie das Display des Geräts. Die App sollte die Audiowiedergabe im Hintergrund fortsetzen und eine Benachrichtigung auf dem Sperrbildschirm anzeigen. Prüfe, ob du die Wiedergabe über die Steuerelemente in der Benachrichtigung steuern kannst. |
| T-Audio_Notification_Style | Audio_Notification_Style | Audiowiedergabe starten Interagiere mit einer anderen Nicht-Audio-App als App im Vordergrund. Prüfe, ob deine App weiterhin Audio im Hintergrund wiedergibt und eine Benachrichtigung mit dem Stil MediaStyle erstellt hat. Weitere Informationen findest du unter Playing nicely with media controls. |
| T-Audio_Playback_Resume | Audio_Playback_Resume | Audiowiedergabe starten Interagieren Sie mit einer anderen App, die keine Audio-App ist, als App im Vordergrund. Interagieren Sie mit Ihrer App, um sie zur App im Vordergrund zu machen. Die Audiowiedergabe sollte fortgesetzt oder die Lautstärke wiederhergestellt werden. Andernfalls sollte die App dem Nutzer anzeigen, dass die Wiedergabe pausiert ist. |
Video
| ID | Funktion | Beschreibung |
|---|---|---|
| T-Video_PiP | Video_PiP | Aktiviere die Videowiedergabe im Bild-im-Bild-Modus für die App. |
| T-Video_Encoding | Video_Encoding | Prüfen Sie, ob die App Videos mit dem HEVC-Videokomprimierungsstandard codiert. |
| T-Video_Playback_Background | Video_Playback_Background | Videowiedergabe starten Minimieren Sie das App-Fenster oder öffnen Sie eine andere App, um das App-Fenster in den Hintergrund zu verschieben. Verschieben Sie auf desktopfähigen Geräten das App-Fenster aus dem sichtbaren Desktopbereich. Prüfen Sie, ob die Videowiedergabe in allen Fällen ohne Unterbrechung fortgesetzt wird. |
Teilen
| ID | Funktion | Beschreibung |
|---|---|---|
| T-System_Sharesheet | System_Sharesheet | Erstelle einen Intent und starte eine Aktivität, indem du startActivity() mit dem Intent als Argument aufrufst. Weitere Informationen finden Sie unter Android-Sharesheet verwenden. In Ihrer App sollte das Android-Sharesheet angezeigt werden. |
Hintergrunddienste
| ID | Funktion | Beschreibung |
|---|---|---|
| T-Background_Service_Optimization | Background_Service_Optimization | Verwenden Sie alle wichtigen Funktionen Ihrer App. Prüfen Sie, ob keine lang laufenden Hintergrunddienste gestartet werden. Wechseln Sie zu einer anderen App, um die App in den Hintergrund zu verschieben. Gehen Sie zu den Einstellungen und prüfen Sie, ob im Hintergrund Dienste Ihrer App ausgeführt werden. Rufen Sie unter Android 4.0 und höher den Bildschirm Apps auf und suchen Sie auf dem Tab Aktiv nach der App. |
Leistung und Stabilität
Überprüfe Leistung, Stabilität und die pixelgenaue Darstellung.
Leistung
| ID | Funktion | Beschreibung |
|---|---|---|
| T-App_Startup_Time | App_Startup_Time | Starten Sie Ihre App. Prüfen Sie, ob die App schnell geladen wird oder ob eine Fortschrittsanzeige oder ein ähnlicher Hinweis eingeblendet wird, wenn das Laden der App länger als zwei Sekunden dauert. |
| T-Rendering_Performance | Rendering_Performance | Verwenden Sie alle wichtigen Funktionen Ihrer App. Prüfen Sie, ob die App mindestens 60 Bilder pro Sekunde rendert. Verwenden Sie die Option HWUI-Rendering profilieren, um Ihre App zu testen. |
| T-StrictMode_Compliance | StrictMode_Compliance |
Aktivieren Sie Achten Sie besonders auf die automatische Speicherbereinigung und ihre Auswirkungen auf die Nutzerfreundlichkeit. |
Stabilität
| ID | Funktion | Beschreibung |
|---|---|---|
| T-Stability_ANR | Stability_ANR | Verwenden Sie alle wichtigen Funktionen Ihrer App. Prüfen Sie, ob die App abstürzt oder den UI-Thread blockiert, was zu ANR-Fehlern (Android Not Responding) führt. Sehen Sie sich den Pre-Launch-Bericht von Google Play an, um potenzielle Stabilitätsprobleme zu identifizieren. |
SDK
| ID | Funktion | Beschreibung |
|---|---|---|
| T-Android_Platform_Compatibility | Android_Platform_Compatibility | Führe deine App auf der neuesten öffentlichen Version der Android-Plattform aus. Alle wichtigen Funktionen verwenden. Prüfen Sie, ob die App abstürzt und ob sie ohne Verlust der Hauptfunktionen ausgeführt wird. |
| T-Target_SDK_Version | Target_SDK_Version, Compile_SDK_Version |
Prüfen Sie die Android-Manifestdatei und die Build-Konfiguration, um sicherzustellen, dass die Anwendung mit dem neuesten verfügbaren SDK (targetSdk und compileSdk) erstellt wird. |
| T-SDK_Maintenance | SDK_Maintenance | Prüfen Sie die Datei build.gradle Ihrer App auf veraltete Abhängigkeiten. |
| T-Non_SDK_Interfaces | Non_SDK_Interfaces | Verwenden Sie das Lint-Tool von Android Studio, um die Verwendung von Nicht-SDK-Schnittstellen zu erkennen. Informationen zu alternativen Testmethoden finden Sie unter Einschränkungen für Nicht-SDK-Schnittstellen. |
| T-Production_Build_Quality | Production_Build_Quality | Prüfen Sie die build.gradle-Datei Ihrer App auf enthaltene Debug-Bibliotheken. |
Akku
| ID | Funktion | Beschreibung |
|---|---|---|
| T-Power_Management | Power_Management |
Alle wichtigen App-Funktionen im Stromsparmodus und im App-Standby-Modus verwenden. Prüfe, ob Wecker, Timer, Benachrichtigungen und Synchronisierungen im Wartungsfenster des Stromsparmodus und beim Beenden des App-Stand-by-Modus ordnungsgemäß funktionieren. Testen Sie das Verhalten des Stromsparmodus und des App-Standbys mit ADB-Befehlen. Anforderungen und Richtlinien finden Sie unter Mit Stromsparmodus und App-Standby testen. Wenn du die Ursache für einen unerwartet hohen Akkuverbrauch ermitteln möchtest, kannst du den Power Profiler von Android Studio oder das Tool Battery Historian in Kombination mit geplanten Hintergrundaufgaben verwenden. |
Datenschutz und Sicherheit
Testen Sie die von Nutzern erwarteten Datenschutz- und Sicherheitsmaßnahmen.
Berechtigungen
| ID | Funktion | Beschreibung |
|---|---|---|
| T-Minimize_Permissions | Minimize_Permissions | Prüfen Sie alle Berechtigungen, die Ihre App benötigt, in der Manifestdatei, zur Laufzeit und in den App-Einstellungen auf dem Gerät (Einstellungen > App-Info). |
| T-Sensitive_Permissions | Sensitive_Permissions | Verwenden Sie alle Funktionen Ihrer App, für die Berechtigungen erforderlich sind. Prüfen Sie, ob die App nur für die Hauptanwendungsfälle der App die Berechtigung zum Zugriff auf sensible Daten oder Dienste anfordert. Prüfen Sie, ob die Auswirkungen der Erteilung von Berechtigungen für vertrauliche Daten und Dienste dem Nutzer klar mitgeteilt werden. |
| T-Runtime_Permissions | Runtime_Permissions | Verwenden Sie alle Funktionen Ihrer App, für die Berechtigungen erforderlich sind. Prüfen Sie, ob die Berechtigungen verzögert angefordert werden, d. h. nur dann, wenn auf die Funktionen zugegriffen wird, und nicht beim Start der App. |
| T-Permission_Rationale | Permission_Rationale | Verwenden Sie alle Funktionen Ihrer App, für die Berechtigungen erforderlich sind. Prüfen Sie, ob in der App erklärt wird, warum die Berechtigungen erforderlich sind. |
| T-Graceful_Degradation | Graceful_Degradation | Verwenden Sie alle Funktionen Ihrer App, für die Berechtigungen erforderlich sind. Berechtigungen ablehnen oder widerrufen Prüfen Sie, ob die App einen alternativen Anwendungsfall bietet und weiterhin funktioniert. |
Daten und Dateien
| ID | Funktion | Beschreibung |
|---|---|---|
| T-Sensitive_Data_Storage | Sensitive_Data_Storage | Prüfen Sie alle im internen Speicher gespeicherten Daten. Prüfen Sie, ob es sich bei den extern gespeicherten Daten um sensible Daten handelt. |
| T-Sensitive_Data_Handling | Sensitive_Data_Storage | Prüfen Sie, wie die aus dem externen Speicher geladenen Daten verarbeitet werden. |
| T-Sensitive_Data_Logging | Sensitive_Data_Logging | Verwende alle wichtigen App-Funktionen, während du das Geräteprotokoll im Blick behältst. Prüfen Sie, ob keine privaten Nutzerinformationen protokolliert werden. |
| T-Hardware_IDs | Hardware_IDs | Alle wichtigen App-Funktionen verwenden. Prüfen Sie, ob die App keine Hardware-IDs wie die IMEI zur Identifizierung verwendet. |
Datensicherung und -wiederherstellung
| ID | Funktion | Beschreibung |
|---|---|---|
| T-App_Data_Backup | App_Data_Backup |
Lokale Einstellungen, Datenbanken und App-Einstellungen auf einem primären Gerät konfigurieren. Führe eine Cloud-Sicherung oder eine Übertragung zwischen Geräten auf ein neues Gerät durch. Starte die App nach der Übertragung auf dem Zielgerät und prüfe, ob die lokalen Einstellungen, der Datenbankstatus und die Nutzereinstellungen gemäß deinen Regeln für die automatische Sicherung korrekt wiederhergestellt wurden. Detaillierte Testverfahren finden Sie unter Sicherung und Wiederherstellung testen. |
| T-App_Logins_Restoration | App_Logins_Restoration |
Richten Sie auf einem primären Gerät eine angemeldete Sitzung mit Passkeys, Passwörtern oder Google Log-in ein. Führe eine Cloud-Sicherung oder eine Übertragung zwischen Geräten auf ein neues Gerät durch. Starte die App nach der Übertragung auf dem Zielgerät und prüfe, ob die Authentifizierung automatisch über die Funktion „Anmeldedaten wiederherstellen“ wiederhergestellt wird, ohne dass Anmeldebildschirme angezeigt werden oder eine Kontowiederherstellung erforderlich ist. Eine ausführliche Anleitung zum Testen finden Sie unter Anmeldedaten für die Wiederherstellung testen. |
Identität
| ID | Funktion | Beschreibung |
|---|---|---|
| T-Autofill_Hints | Autofill_Hints | Verwenden Sie alle App-Funktionen, für die eine Nutzereingabe erforderlich ist. Prüfen Sie, ob die App Vorschläge zum automatischen Ausfüllen von Eingabefeldern für Daten wie Anmeldedaten und andere vertrauliche Informationen bietet. |
| T-Credential_Manager | Credential_Manager | Melden Sie sich in Ihrer App an. Prüfen Sie, ob der Credential Manager für Android in die App eingebunden ist, um eine Anmeldung zu ermöglichen, die die Unterstützung für Passkeys, föderierte Identitäten und Passwörter vereinheitlicht. |
| T-Biometric_Authentication | Biometric_Authentication | Verwenden Sie alle App-Funktionen, für die eine Authentifizierung erforderlich ist. Prüfen Sie, ob die App Finanztransaktionen oder vertrauliche Informationen wie wichtige Nutzerdokumente mit biometrischer Authentifizierung schützt. |
App-Komponenten
| ID | Funktion | Beschreibung |
|---|---|---|
| T-Component_Export | Component_Export | Prüfen Sie alle in der Android-Manifestdatei definierten Anwendungskomponenten auf den entsprechenden Exportstatus. Das exportierte Attribut muss für alle Komponenten explizit festgelegt werden. |
| T-Component_Permissions | Component_Permissions | Prüfen Sie alle Berechtigungen, die Ihre App benötigt, in der Manifestdatei, zur Laufzeit und in den App-Einstellungen auf dem Gerät (Einstellungen > App-Info). |
| T-Component_Protection | Component_Protection | Überprüfen Sie alle in der Android-Manifestdatei definierten Contentanbieter. Achten Sie darauf, dass jeder Anbieter eine entsprechende protectionLevel hat. |
Netzwerk
| ID | Funktion | Beschreibung |
|---|---|---|
| T-Network_Security_Traffic | Network_Security_Traffic | Deklarieren Sie eine Netzwerksicherheitskonfiguration, die Klartext-Traffic deaktiviert, und testen Sie die App dann. |
| T-Network_Security_Configuration | Network_Security_Configuration | Prüfen Sie die Netzwerksicherheitskonfiguration der App. Prüfen Sie, ob alle Lint-Prüfungen für die Konfiguration erfolgreich sind. |
| T-Security_Provider_Initialization | Security_Provider_Initialization | Prüfen Sie, ob der Sicherheitsanbieter beim Start der Anwendung für die Google Play-Dienste initialisiert wird. |
WebViews
| ID | Funktion | Beschreibung |
|---|---|---|
| T-WebView_Asset_Loader | WebView_Asset_Loader | Prüfen Sie die Netzwerksicherheitskonfiguration der App. Prüfen Sie, ob alle Lint-Prüfungen für die Konfiguration erfolgreich sind. |
| T-WebView_JavaScript | WebView_JavaScript | Rufen Sie für jeden WebView eine Seite auf, für die JavaScript erforderlich ist. |
| T-WebView_Navigation | WebView_Asset_Loader, WebView_JavaScript |
Versuchen Sie, in jeder WebView zu Websites und Inhalten zu navigieren, die nicht direkt von Ihrer App geladen werden. |
Ausführung
| ID | Funktion | Beschreibung |
|---|---|---|
| T-App_Bundles | App_Bundles | Prüfen Sie, ob die App Android App Bundles verwendet und keinen Code von außerhalb des APK der App dynamisch lädt. |
Kryptografie
| ID | Funktion | Beschreibung |
|---|---|---|
| T-Cryptographic_Algorithms | Cryptographic_Algorithms | Prüfen Sie, ob die App starke, von der Plattform bereitgestellte kryptografische Algorithmen und einen Zufallszahlengenerator verwendet. Prüfen Sie außerdem, ob die App benutzerdefinierte Algorithmen implementiert. |
Google Play
Prüfen Sie, ob Ihre App für Google Play bereit ist.
Richtlinien
| ID | Funktion | Beschreibung |
|---|---|---|
| T-Play_Content_Policies | Play_Content_Policies, Play_Content_Rating, Play_User_Reviews |
Melden Sie sich in der Google Play Console an, um Ihr Entwicklerprofil, die App-Beschreibung, Screenshots, das Funktionsgrafik, die Altersfreigabe und das Nutzerfeedback zu prüfen. |
App-Detailseite
| ID | Funktion | Beschreibung |
|---|---|---|
| T-Play_Feature_Graphic | Play_Feature_Graphic | Laden Sie Ihre Werbegrafik und Screenshots herunter und skalieren Sie sie auf die Displaygrößen der Geräte und Formfaktoren, die Sie ansprechen möchten. |
| T-Play_Graphic_Assets | Play_Feature_Graphic, Play_Device_References, Play_Misleading_Content |
Prüfen Sie alle Grafikinhalte, Medien, Texte, Codebibliotheken und anderen Inhalte, die in der App oder im Download der Erweiterungsdatei enthalten sind. |
Archivieren
Frühere Versionen der Qualitätsrichtlinien für Apps: