Wie die QuickNovel Webnovel-Reader-App in Kotlin entwickelt wurde
Fans von asiatischen Light Novels und englischsprachiger Fiktion von Royal Road stehen regelmäßig vor demselben Problem. Webromane auf dem Handy über einen Browser zu lesen ist umständlich: Die Seiten sind überladen mit Bannern, Videos starten automatisch, und man kann nicht einmal ein Kapitel in der U-Bahn öffnen, ohne eine Netzwerkverbindung.
Das QuickNovel-Projekt versucht, dieses Problem radikal zu lösen. Es ist eine kostenlose Open-Source-Android-Anwendung, die sauberen Text von Dutzenden von Seiten extrahiert und in ordentliche Offline-Bücher verwandelt.
Warum ein separater Aggregator benötigt wird
Im Gegensatz zu Standard-Readern wie Moon+ Reader übernimmt QuickNovel auch die Inhaltsbereitstellung. Autoren speichern ihre Bücher nicht auf eigenen Servern – die App funktioniert ähnlich wie eine Suchmaschine. Du gibst einen Titel ein, QuickNovel sendet Anfragen an unterstützte Plattformen, ruft HTML-Seiten ab, bereinigt den Müll und assembliert Kapitel zu einer einheitlichen Struktur.
Die Quellliste umfasst etwa vierzig Ressourcen. Darunter befinden sich große englischsprachige Kataloge wie Royal Road, Scribble Hub und Anna's Archive sowie spezifische Übersetzungs-Aggregatoren.
So sieht die App-Oberfläche während der Suche und des Downloads aus:

Was am Quellcode interessant ist
Die App ist vollständig in Kotlin unter der GPL-3.0-Lizenz geschrieben. Wenn du für Android entwickelst, findest du im Repository-Code mehrere praktische Lösungen.
Modulares Parser-System
Der komplexeste Teil solcher Anwendungen ist die Unterstützung vieler verschiedener Seiten. In QuickNovel wird jede Quelle durch eine Provider-Abstraktion beschrieben. Die Basisklasse definiert Regeln für die Suche, das Abrufen von Metadaten und das Parsen von Kapiteltext. Das Hinzufügen einer neuen Seite beschränkt sich auf das Erstellen einer einzelnen Datei mit den korrekten CSS-Selektoren oder JSON-Endpunkten.
Erstellung und Verpackung in EPUB
QuickNovel kann nicht nur Text im integrierten Reader rendern, sondern auch heruntergeladene Kapitel in das Standard-EPUB-Format verpacken. Das ist praktisch, wenn du lieber über Drittanbieter-Reader oder auf einem E-Reader liest.
Das Hauptproblem bei diesem Ansatz
Web-Scraping hat einen unvermeidlichen Nachteil. Sobald Seitenbetreiber das Layout ändern, auf eine neue Domain umziehen oder aggressiven Cloudflare-Schutz aktivieren, funktioniert der Parser nicht mehr.
Im Projekt-Repository gibt es derzeit etwa 250 offene Issues. Die meisten davon betreffen defekte Provider. Die Entwicklung basiert hier auf Community-Aktivität: Jemand bemerkt einen Defekt, korrigiert den CSS-Selektor im Code und reicht einen Pull-Request ein.
Wem dieses Projekt nützt
QuickNovel lohnt sich zu installieren, wenn du aktiv Web-Fiction liest und Werbung sowie Abhängigkeit von Internetverbindungen loswerden möchtest.
Und für Kotlin-Entwickler ist es ein gutes Beispiel dafür, wie man asynchrones Laden von Hunderten von Seiten, Dateisystemoperationen und HTML-Parsing in einer echten mobilen Anwendung organisiert. Der Quellcode ist auf GitHub verfügbar.
Ähnliche Projekte