Der traurige Zustand der Android-Fragmentierung: Ein Beispiel, um die Notlage der Entwickler zu verstehen

Der durchschnittliche Android-Benutzer kümmert sich wahrscheinlich schon lange nicht mehr um das „Fragmentierungsproblem“ von Android. Aber das Problem beschäftigt die Entwickler immer noch.

Fragmentierung ist bei Android im wahrsten Sinne des Wortes ein umstrittenes Thema, seit das mobile Betriebssystem angekündigt wurde.

Abgesehen davon, dass sie ein Knüppel für Trolle in Online-Flammenkriegen ist, wird die Vielfalt, die mit der Fragmentierung einhergeht, heute größtenteils als eine solche angesehen netto positiv für die Verbraucher von Android-Geräten. Schließlich haben wir so viel Freiheit bei der Auswahl des Gerätetyps mit der gewünschten Software, dass es für den Durchschnittsverbraucher schwierig ist, sich um Fragmentierung zu kümmern. Durch die Visualisierung der unglaublichen Vielfalt an Android-Geräten entsteht ein wunderschönes Mosaik der vielfältigen Darstellung von Android.

Ein Beispiel für die Fragmentierung von Android-Geräten basierend auf App-Installationen der OpenSignal-App. Quelle: OpenSignal

Aber die Fragmentierung von Hardware und Software macht keinen glücklichen Softwareentwickler aus. Ganz im Gegenteil. Die Entwicklung einer App über so viele verschiedene Hardware- und Softwarekonfigurationen hinweg kann sich beim Debuggen als großes Ärgernis erweisen. OEMs können größere oder subtile Änderungen vornehmen, die bei der Entwicklung einer App berücksichtigt werden müssen, aber für den einzelnen Entwickler gibt es wirklich keine einfache Möglichkeit, sicherzustellen, dass seine App universell funktioniert. Während der Durchschnittsverbraucher die Fragmentierungsdebatte längst vergessen hat, beschäftigt das Problem Android immer noch App-Entwickler und es gibt scheinbar nichts, was man dagegen tun kann, außer es aufzusaugen und die Fehler so zu behandeln, wie sie es tun erscheinen.


Der traurige Zustand der Fragmentierung

Vor allem ein OEM erntet viel Hass für die Kopfschmerzen, die er bei der Entwicklung einer App verursacht – Samsung. Entwickler schimpfen seit Jahren über Samsung, einige schreiben sogar so vernichtende Beiträge wie „In der Android-Hölle gibt es für Samsung einen besonderen Platz", das einen besonders frustrierenden Fehler beschreibt, der auf Folgendes zurückzuführen ist: Samsung-Geräte und die unterstützende Appcompat-Bibliothek. Ich möchte die Aufmerksamkeit besonders auf einen Absatz aus Herrn Ambris Schimpftirade lenken, der hervorragend darlegt, warum Entwickler sich immer noch um Fragmentierung kümmern:

Wenn Sie ein Android-Entwickler sind, ist Ihr Hass auf Samsung-Geräte wahrscheinlich grenzenlos. Mehr als ein durchschnittlicher Benutzer, für den Samsung ein Synonym ist dummer Touchwiz Und übermäßige Bloatware, du verachtest Samsung, weil du keine Wahl hast. Wegen Samsung enormer Marktanteil, Sie können sich einfach nicht dafür entscheiden, Samsung-Geräte nicht zu unterstützen. Und das ist es, was am meisten weh tut; die Tatsache, dass Ihnen diese Wahl genommen wird!

Dies ist auch keine Schimpftirade aus den alten Jahren der Existenz von Android – dieser Beitrag wurde Mitte Dezember letzten Jahres veröffentlicht. Ich möchte ganz offen sagen, dass ich nicht sicher bin, ob dieses Problem bereits offiziell behoben wurde, aber Herr Ambri hat in seinem Beitrag eine Lösung für jeden bereitgestellt, der über eine Google-Suche nach dem auf seine Schimpftirade stößt Insekt. Alles, was Sie tun müssen, ist zu verwenden ProGuard mit der folgenden einzelnen Codezeile:

# Samsung ruining all nice things-keep class !android.support.v7.view.menu.**, !android.support.design.internal.NavigationMenu, !android.support.design.internal.NavigationMenuPresenter, !android.support.design.internal.NavigationSubMenu, android.support.** {*;}

Das ist doch nicht so schlimm, oder? Das Problem besteht jedoch darin, dass dieser Fix aus Stack Overflow übernommen wurde. Verstehen Sie mich nicht falsch, Stack Overflow ist eine großartige Website. Aber es ist nicht wirklich eine ideale Quelle, um Korrekturen für Ihre Apps zu finden. Um auf Stack Overflow etwas zu finden, muss man oft nach vielen Versuchen und Irrtümern bei Google-Suchen tief in die Links eintauchen. Manchmal bemerken Sie sogar, dass ein anderer Benutzer den gleichen Fehler erwähnt, den Sie hatten, aber ohne dass eine Lösung in Sicht ist. Oder noch frustrierender sind die Zeiten, in denen Sie einen Thread finden, in dem der Originalposter dies behauptet hat habe eine Lösung gefunden, aber sie haben ihren Thread längst aufgegeben, ohne anderen Anweisungen zu geben, wie sie das Problem beheben können Ausgabe.

Quelle: XKCD

Ein Beispiel für ein subtiles Fragmentierungsproblem

Ich bin selbst kein Entwickler, aber nachdem ich jahrelang mit Tasker herumgebastelt habe, bin ich mit den Fähigkeiten von Android so vertraut, dass ich begonnen habe, meine eigenen Lösungen für Probleme, mit denen ich konfrontiert war, pseudozuprogrammieren. Und wenn ich etwas nicht herausfinden kann, google ich es, genau wie alle anderen auch. Während ich gerade dabei war, meinen vorherigen Artikel darüber zu schreiben Suchen Sie in der Einstellungs-App Ihres Telefons nach versteckten Aktivitäten, bin ich auf einen ziemlich seltsamen Fehler gestoßen, den ich nicht erklären konnte. Ein Fehler, der nur bei Huawei-Geräten auftritt.

Immer wenn ich versuchte, bestimmte Aktivitäten (z. B. das Menü „Testen“, das App-Nutzungsstatistiken enthält) innerhalb der Einstellungen-App zu starten, wurde mir immer ein Berechtigungsfehler angezeigt. Insbesondere fehlte der App, mit der ich die Aktivität startete, die Berechtigung Huawei.android.permission. HW_SIGNATURE_OR_SYSTEM. Kein anderes von mir getestetes Gerät benötigte spezielle Berechtigungen zum Starten dieser Einstellungsaktivitäten, sondern nur Telefone mit Huaweis Android-Version (EMUI). Eine Analyse von com.android.settings ergab, dass bestimmte Aktivitäten innerhalb der Einstellungen-App tatsächlich einer Schutzstufe unterliegen, die entweder Folgendes erfordert Signatur oder Systemberechtigung.

Leider bedeutet dies für mich, dass nur Apps installiert sind, die unter /system installiert sind, oder Apps, die damit signiert sind Signatur, da die Einstellungen-App diese Aktivitäten mit der von mir verwendeten Methode öffnen könnte versuchen. Als ich bei Google nach einer Antwort auf diesen Fehler suchte, stieß ich (Sie haben es erraten) auf eine Stapelüberlauf-Thread. Der Entwickler, der sein Problem gepostet hat, ist auf das gleiche Problem gestoßen wie ich (obwohl er gerade dabei war, eine App zu entwickeln). Sein Problem trat auf, als er versuchte, den folgenden Code auszuführen:

<span >Intentspan><span > mainIntent span><span >=span><span >newspan><span >Intentspan><span >(span><span >Intentspan><span >.span><span >ACTION_MAINspan><span >,span><span >nullspan><span >);span><span >mainIntentspan><span >.span><span >addCategoryspan><span >(span><span >Intentspan><span >.span><span >CATEGORY_LAUNCHERspan><span >);span><span >Intentspan><span > pickIntent span><span >=span><span >newspan><span >Intentspan><span >(span><span >Intentspan><span >.span><span >ACTION_PICK_ACTIVITYspan><span >);span><span >pickIntentspan><span >.span><span >putExtraspan><span >(span><span >Intentspan><span >.span><span >EXTRA_TITLEspan><span >,span><span >"Pick App to Play in"span><span >);span><span >pickIntentspan><span >.span><span >putExtraspan><span >(span><span >Intentspan><span >.span><span >EXTRA_INTENTspan><span >,span><span > mainIntentspan><span >);span><span >thisspan><span >.span><span >startActivityForResultspan><span >(span><span >pickIntentspan><span >,span><span > REQUEST_PICK_APPLICATIONspan><span >);span>

Den Strings in der Absicht und der Webseite des Entwicklers nach zu urteilen, versuchte er wahrscheinlich, dem Benutzer die Auswahl einer Drittanbieter-App zum Abspielen einiger Medien zu ermöglichen. Der Fix wurde von einem erfahrenen Entwickler bereitgestellt CommonsWare, war ganz einfach: verwenden Absicht. CreateChooser anstatt ACTION_PICK_ACTIVITY. Jedoch, Warum Sollten wir diesen Fix implementieren müssen? Warum Benötigt Huawei diese Erlaubnis überhaupt? Warum Mussten wir mithilfe einer ganz bestimmten Google-Suche eine Antwort auf StackOverflow finden?


Das Paradox der Wahl

Um eine Antwort zu finden, CommonsWare hat einen Fehlerbericht eingereicht auf dem Android-Bug-Tracker und bittet Google, das Problem zu untersuchen. Insbesondere forderte der Entwickler Google auf, undokumentierte Berechtigungsanforderungen zu sperren, um Apps von Drittanbietern den Zugriff auf ACTION_PICK_ACTIVITY zu verweigern. Indem Sie diese Anforderungen eintragen CTS, Huawei wäre gezwungen, diesen Änderungen nachzukommen.

Um ehrlich zu sein, ist dieser Fehler an sich jedoch keine große Sache. Auch wenn keine andere App, die ich ausprobiert habe (z. B. Tasker), diese Berechtigung umgehen konnte Ich war nicht gerade enttäuscht, wenn ich die Anforderung erfüllte und bestimmte Aktivitäten in der Einstellungen-App startete das Ergebnis. Aber als ich mich an die Schimpftirade von Herrn Ambri erinnerte, wurde mir klar, dass es sehr frustrierend sein muss, mit kleinen Veränderungen wie diesen umzugehen denn so winzig sie auch sein mögen, sie sind zweifellosaddieren, manchmal genug, um Kopfschmerzen zu verursachen. Eine kleine Änderung an der App „Einstellungen“ könnte zu einer unverdient negativen Bewertung eines Entwicklers führen. Eine kleine Änderung, die eher schlecht dokumentiert ist und mich dazu zwang, das Internet nach einem Stack Overflow-Thread zu durchsuchen. Wie viele andere kleine Fehler gibt es auf anderen Geräten?

Der zunehmende Wettbewerb im mobilen Bereich hat sich für den Verbraucher als positiv erwiesen, aber nachdem er gesehen hat, wie sich diese subtilen Veränderungen ergeben Da sich die Entwicklung so vieler verschiedener Produktlinien auf Entwickler auswirken kann, habe ich die Sichtweise der Entwickler immer mehr zu schätzen gelernt Zersplitterung. Es ist nicht so, dass die Wahl selbst das Problem ist, sondern vielmehr, dass die Community nicht genug unternimmt, um diese Probleme zu katalogisieren. Wie Herr Ambri in seinem Artikel andeutete, benötigen Android-Entwickler möglicherweise eine eigene Version von caniuse.com oder sdkcritic.com um alle obskuren Fehler in einer Datenbank zu sammeln. Die einzige andere Alternative besteht darin, die OEMs dazu zu bringen, diese Änderungen entweder ordnungsgemäß zu dokumentieren oder sie gar nicht erst vorzunehmen viel Glück damit.

Bildnachweis der Funktion: OpenSignal