Vermeiden Sie das Einbetten externer Bibliotheken in Ihr Projekt

Sie können oft den Satz hören: „Warum schreiben Sie Ihr Fahrrad? Nimm eine fertige Bibliothek und benutze sie! Alles wurde bereits für Sie geschrieben. " Besonders unerfahrene Entwickler hören solche Ausdrücke. Wenn sie ein Problem lösen, beginnen sie, vorgefertigte Bibliotheken zu betrachten und sie gedankenlos in ihr Projekt einzubeziehen. In diesem Artikel erfahren Sie, zu welchen Konsequenzen eine gedankenlose Einführung von Bibliotheken von Drittanbietern führen kann.



Potenzielle Probleme



Ich empfehle dringend, dass Sie Ihrem Projekt keine externen Bibliotheken hinzufügen. Dies bedeutet jedoch nicht, dass die Verwendung von Bibliotheken böse ist und Ihre Gradle-Datei vollständig von externen Abhängigkeiten befreit werden sollte! Ich möchte die Idee vermitteln, dass eine sehr ernsthafte Analyse durchgeführt werden muss, bevor eine neue Bibliothek hinzugefügt wird. Um zu verstehen, wie Bibliotheken analysiert werden, werfen wir einen Blick auf die potenziellen Probleme, die beim Hinzufügen einer neuen Bibliothek zu Ihrem Projekt auftreten können.



Anwendungsgröße



Die meisten Bibliotheken erhöhen die Größe Ihrer Anwendung nicht wesentlich. Aber es gibt solche Bibliotheken, nach deren Hinzufügen Ihre Anwendung erheblich zunehmen wird! Beispielsweise kann die Realm- Bibliothek die APK-Größe von 4 MB auf 12 MB erhöhen. Im Durchschnitt wiegt die Anwendung 100 MB bis 200 MB, und die zusätzlichen 8 MB sind möglicherweise nicht erkennbar. Beachten Sie jedoch, dass Realm nicht die einzige Bibliothek ist, die sich negativ auf die APK-Größe auswirkt. Ist es möglich, die Größe der APK mithilfe dieser Abhängigkeit zu reduzieren? Ja, Sie können apk nach Prozessorarchitekturen aufteilen. Dies führt jedoch zum nächsten Problem (Punkt 2).



Wartbarkeit des Codes



Projekte wachsen, werden immer logischer und manchmal wird es schwieriger, sie zu verstehen. Damit sich jeder neue Entwickler nach mehreren Jahren Projektentwicklung leicht an das Projekt gewöhnen kann, ist eine klare Projektarchitektur erforderlich. Einige Bibliotheken können jedoch die Wartbarkeit von Projekten aufheben. Beispielsweise kann eine falsche Arbeit mit EventBus die Logik Ihrer Anwendung stark verwirren. Es ist wichtig, klar zu unterscheiden, wo und in welchen Fällen Sie diese Bibliothek verwenden. Und auch um sicher zu sein, dass niemand jemals von diesen Regeln abweichen wird. Aber was passiert in der Praxis? Fast jeder Entwickler, der mit EventBus beginnt, verwendet es überall. Dadurch wird das Projekt völlig unlesbar.



Zeit, die Bibliothek zu erkunden



Wenn Sie eine neue Bibliothek hinzufügen, müssen Sie lernen, wie Sie mit ihr interagieren. Es gibt Bibliotheken, die sich in Zukunft sehr negativ auf die Entwicklungsgeschwindigkeit auswirken können.

Zum Beispiel Googles PagingLibrary braucht viel Mühe , um herauszufinden , wie man mit ihm interagieren. Jeder neue Entwickler benötigt 12 bis 20 Stunden, um diese Bibliothek zu finden. Sie verlieren fast 3 Tage! In nur diesen 3 Tagen können Sie Ihre Paginierung aufschreiben und unabhängig von Lösungen von Drittanbietern sein.



Geschwindigkeit aufbauen



Die Erstellungsgeschwindigkeit moderner Anwendungen ist schlecht. Wenn Sie jedoch Ihre Bauzeit noch weiter verlängern möchten, verwenden Sie Dagger ! Ich weiß nicht, warum die Bibliothek nach dem Aufkommen von Kotlin immer noch aktiv genutzt wird. In den meisten Fällen enthält Dolch alle 4 oben beschriebenen Probleme.



Bugs, Bugs, Bugs ...



Nach meiner Erfahrung habe ich in nur einem Projekt 5 Bibliotheken ausgesägt, da darin Fehler vorhanden waren. Denken Sie daran, dass es in Bibliotheken fast immer Fehler gibt. Zum Beispiel:



  • AndroidPdfViewer hinterlässt Speicherlecks und behandelt einige Fälle falsch mit null, wodurch eine NullPointerException ausgelöst wird
  • Die Android-Navigationskomponente funktioniert in einigen Fällen nicht richtig mit Shared Elemant-Animationen
  • Cicerone stürzt manchmal die Anwendung aufgrund abexecutePendingTransactions()


Bedeutet dies, dass sich Bibliotheken nicht lohnen? Nein, Bibliotheken können und sollten verwendet werden, aber es ist wichtig, zumindest sicherzustellen, dass die Problemliste keine kritischen Fehler für Ihr Projekt enthält.



Das Vorhandensein von Schwachstellen in der Bibliothek



Kennen Sie den einfachsten Weg, mehrere Anwendungen gleichzeitig zu hacken, indem Sie nur einen Quellcode untersuchen? Wir müssen einen Fehler in einer großen Bibliothek finden, die von vielen Entwicklern verwendet wird. Und durch diese Sicherheitsanfälligkeit erhalten Sie Zugriff auf die Daten Ihrer Anwendung. Wenn Sie keine Anwendung entwickeln, bei der die Sicherheit des Benutzers stärker berücksichtigt werden muss, können Sie diesen Punkt ignorieren. Wenn nicht, suchen Sie nach einem Problem, das potenzielle Schwachstellen behebt.



Bibliotheksunterstützung



Wenn die Bibliothek seit einem Jahr nicht mehr aktualisiert wurde, stellen Sie eine Frage, ob es sich lohnt, sie zu verwenden. Tatsache ist, dass es regelmäßig Fehler in den Bibliotheken gibt. Wenn diese Fehler nicht behoben sind, lohnt es sich dann, diese Bibliothek zu verwenden? Es ist durchaus möglich, dass Sie in naher Zukunft auf einen Bibliotheksfehler stoßen und nach alternativen Möglichkeiten suchen müssen, um die Funktion zu implementieren. Es gibt einige Bibliotheken, die sich an die Funktionen der aktuellen Android-API anpassen müssen. Wenn beispielsweise ein neues Element in Android angezeigt wurde, müssen Sie Unterstützung dafür hinzufügen. Diese Bibliotheken enthalten Anko , das nicht mehr unterstützt wird. Jetzt macht es keinen Sinn, diese Bibliothek in großen Projekten zu verwenden.



Die Bibliothek ist in allen Ebenen des Projekts vorhanden



Bibliotheken wie RxJava oder PagingLibrary zwingen den Entwickler, ihre API auf jeder Ebene der Anwendung zu verwenden. Wenn Sie sicher sind, dass sich die Bibliothek immer im Projekt befindet, gibt es kein Problem. Aber wenn Sie aus irgendeinem Grund die Bibliothek ausschneiden müssen, werden Sie kolossale Anstrengungen unternehmen! Sie müssen die Hälfte des Projekts neu schreiben.



Bibliotheksbeschränkungen



Jede Bibliothek bietet eine API , die sowohl durch die Verfügbarkeit öffentlicher Methoden als auch durch die interne Implementierung eingeschränkt ist. Stellen Sie sicher, dass die Bibliotheksfunktionen für Sie vollständig ausreichen. Zum Beispiel ist die beliebte Android Navigation Component- Bibliothek für Entwickler sehr praktisch. Es werden keine Methoden zum Anzeigen, Ausblenden und Hinzufügen bereitgestellt (über die FragmentTransaction verfügt). Darüber hinaus erschwert die Bibliothek die Arbeit mit BottomNavigationView, wenn der Verlauf von Registerkarten gespeichert werden muss.



Riesige Gradle-Datei mit Abhängigkeiten



Wenn ich zu einem neuen Projekt komme, schaue ich mir zuerst die Abhängigkeiten in der Gradle-Datei an. Es macht deutlich, was die Anwendung kann und wie bestimmte Aufgaben gelöst werden. Aber ich war überrascht, als ich sah, dass sowohl OkHttp als auch Retrofit und Volley (Gabel) für die Arbeit mit dem Netzwerk verwendet werden. Und das ist nur Networking. Die Gradle-Datei selbst besteht aus einer Vielzahl von Bibliotheken, deren Unterstützung längst eingestellt wurde. Wenn ein Entwickler alleine ist, kann er das gesamte Projekt im Kopf behalten, aber wenn neue Entwickler kommen, wird es äußerst schwierig, ein solches Projekt zu verstehen.



Checkliste mit Fragen vor der Implementierung der Bibliothek



  1. Welches Problem hat diese Bibliothek? Sind sie für mein Projekt kritisch?
  2. Wie getestet ist diese Bibliothek / Technologie von der Entwicklergemeinde? Wie viele Sterne hat sie auf GitHub?
  3. Wie oft reagiert ein Entwickler auf ein Problem?
  4. Wie oft aktualisiert der Entwickler die Bibliothek?
  5. Wie viel Zeit werden neue Entwickler damit verbringen, die verwendete Technologie zu erlernen?
  6. Wie wirkt sich die Bibliothek auf die Größe der Anwendung aus?
  7. Wie wirkt sich die Bibliothek auf die Geschwindigkeit der Anwendung aus?
  8. Wie wirkt sich die Bibliothek auf die Erstellungsgeschwindigkeit aus? Hilft es Ihnen, Entwicklungszeit zu sparen?
  9. Hat die Bibliothek Schwachstellen?
  10. Wird die Bibliothek auf jeder Ebene des Projekts vorhanden sein? Wie kritisch ist das?
  11. Wie die Bibliothek die Optionen des Entwicklers einschränkt (fast immer). Ist es gut oder schlecht?
  12. Kann ich selbst eine Lösung schreiben, die innerhalb eines angemessenen Zeitraums für mein Projekt geschärft wird?


Es ist sehr interessant zu hören, wonach Sie bei der Auswahl einer Bibliothek noch suchen können. Ich freue mich auf Kommentare, Feedback und Fragen!



All Articles