Das Symptom
Eine Android-App ist seit Jahren im Play Store, läuft auf Telefonen und Tablets ohne Beschwerden. Dann meldet sich eine Schule, ein Kunde oder ein Kollege mit Chromebook: Die App sei im Play Store auf dem Gerät nicht zu finden. Kein Hinweis, keine Fehlermeldung, bei der Suche taucht sie schlicht nicht auf. Auf dem Telefon desselben Nutzers mit demselben Konto ist sie da.
Im Team beginnt das Rätselraten. Liegt es an einer Ländersperre, an einer falschen Kategorie, an einer Einstellung in der Play Console? Manche vermuten, Chromebooks könnten Android-Apps grundsätzlich nur eingeschränkt. Dabei hat niemand am Store etwas verstellt. Die Ursache steht in der eigenen Manifest-Datei, oft in einer Zeile, die mit Chromebooks scheinbar nichts zu tun hat.
Die „Layer 8“-Wahrheit
Google Play zeigt eine App nur Geräten, die alle Merkmale haben, die die App als erforderlich erklärt. Der Leitfaden zum Manifest-Element uses-feature formuliert es ohne Umschweife: Fehlt einem Gerät ein solches Merkmal, filtert Google Play die App, sodass sie dort weder sichtbar noch herunterladbar ist. Für Chromebooks hat Google eine eigene Seite veröffentlicht, die aufzählt, was dort fehlt: unter anderem die rückwärtige Kamera mit Autofokus und Blitz, GPS, NFC, Infrarot, Barometer, Telefonie und der USB-Host-Modus. Der Kernsatz der Seite lautet: „If your app requires specific features that aren’t supported on Chromebooks, it won’t be available for installation on Chromebooks.“
Der Teil, der fast jeden überrascht, sind die Berechtigungen. Eine App, die nur gelegentlich ein Foto aufnehmen will, fordert die Berechtigung CAMERA an und erklärt keine Kamera als Pflicht. Google Play ergänzt die Pflicht trotzdem: Wer CAMERA anfordert, verlangt in den Augen des Stores eine rückwärtige Kamera, auch ohne eigenes uses-feature-Element. Die Chromebook-Seite listet das in einer Tabelle, CAMERA führt zu Kamera und Autofokus, eine ganze Reihe von Telefon- und SMS-Berechtigungen zu Telefonie. Die Seite schreibt dazu: „By requesting these permissions, you prevent your app from being installed on Chromebooks.“
Die Reparatur ist klein. Jedes Merkmal, das die App nutzen kann, aber nicht zwingend braucht, wird im Manifest ausdrücklich als nicht erforderlich gekennzeichnet, auch die Merkmale, die sich nur aus Berechtigungen ergeben. Android Studio prüft das mit einer eigenen Lint-Regel für ChromeOS. Der Preis dafür ist eine Pflicht im Code: Die App muss damit rechnen, dass die Kamera oder das GPS auf dem Gerät wirklich fehlt, und die Funktion dann sinnvoll weglassen.
Wer das Problem in die andere Richtung baut, macht es nicht besser. Das Merkmal android.hardware.type.pc ist für Chromebooks gedacht und schaltet die Eingabeemulation für Maus und Touchpad ab. Ohne die Kennzeichnung als nicht erforderlich läuft die App laut Google danach nur noch auf Chromebooks. Wer ein Manifest ändert, sieht deshalb hinterher im Store auf beiden Geräteklassen nach, nicht nur auf der, für die er gerade repariert hat.