>_ DevTrendsde

Sprache

Start

Sprachen

Bereiche

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embedded Sicherheit
Kotlin

Wie Legado Reader funktioniert und warum eine Android-App eine integrierte JS-Engine braucht

Persönlich achte ich selten auf mobile E-Reader. Meistens handelt es sich entweder um Wrapper für die System-Textdarstellung oder um geschlossene Apps, vollgepackt mit Werbung und Abonnements. Aber das Legado-Repository hat meine Aufmerksamkeit erregt. Unter der Haube dieses Android-Readers verbirgt sich eine Architektur, die man eher in einem serverseitigen Datenerfassungs-Giganten erwarten würde als in einem Freizeit-Lesewerkzeug.

Die App ist in Kotlin geschrieben und unter der GPL-3.0-Lizenz verfügbar. Im Wesentlichen handelt es sich um einen Webseiten-Scraper, eine User-Script-Ausführungsmaschine und einen lokalen Webserver, die in einer einzigen mobilen Oberfläche gebündelt sind.

Was steckt in einem mobilen Scraper

Wenn man sich die Abhängigkeitsliste in der README ansieht, wird klar, wie die Autoren an das Design herangegangen sind. Anstatt eng an bestimmte Formate oder Websites gekoppelt zu sein, haben sie ein flexibles Tool zur Inhaltsgewinnung von überall her geschaffen.

So funktioniert dieses System:

  • HTML- und JSON-Parsing. Das Projekt verwendet Jsoup, JsoupXpath und json-path. Kapiteltext, Titel und Inhaltsverzeichnisse werden von Webseiten mittels XPath- und JSONPath-Abfragen extrahiert.
  • JavaScript-Ausführung. Um dynamische Seiten zu verarbeiten, bettet die App rhino-android ein (ein Port der Mozilla Rhino JS-Engine). Wenn eine Seite Inhalte über clientseitige Scripts liefert oder nicht-triviales Markup verwendet, führt Legado benutzerdefiniertes JS direkt auf dem Gerät aus.
  • Lokaler Webserver. Nanohttpd und nanohttpd-websocket werden verwendet. Die App startet einen HTTP- und WebSocket-Server direkt auf dem Smartphone. Man kann die IP-Adresse des Telefons im Browser des Computers eingeben, um Bücher auf einem großen Bildschirm zu lesen oder Parsing-Regeln zu verwalten.
  • Code-Editor direkt in der UI. Die io.github.rosemoe:editor-Bibliothek fügt einen Code-Editor mit Syntax-Highlighting hinzu. Man kann eine Text-Extraktionsregel direkt vom Telefonbildschirm aus anpassen.
idea

Wie das Quellkonzept funktioniert

Legados Hauptmerkmal ist die Trennbarkeit der Datenquelle vom Reader selbst. Die App enthält keine eingebaute Buchdatenbank. Stattdessen importiert der Benutzer Konfigurationsdateien im JSON-Format.

Jede solche Datei beschreibt die Struktur der Zielseite. Sie legt Suchregeln für Bücher, Pfade zu Kapiteln und Selektoren zur Textextraktion fest. Wenn eine Seite durch einfache Scripts geschützt ist, wird JS-Code direkt in den Konfigurator eingebettet. Das Ergebnis ist, dass der Reader zu einem flexiblen Content-Cleaner wird: Er entfernt Banner, formatiert Absätze und assembliert bei Bedarf ein fertiges EPUB.

Für die Arbeit mit linguistischem Material haben die Autoren HanLP integriert — eine Bibliothek zur Verarbeitung natürlicher Sprache. Dies hilft bei chinesischen Texten, korrekter Silbentrennung und Zeichenumwandlung.

Mögliche Herausforderungen

Die Dokumentation im Repository selbst ist extrem spärlich. Die README beschränkt sich auf die Auflistung der verwendeten Bibliotheken und ein paar Links. Der Großteil der Community und fertiger Parsing-Regeln konzentriert sich im chinesischen Internet, daher findet man out-of-the-box nicht viel auf Englisch oder Russisch.

Um die Buchgewinnung von einer bestimmten russischsprachigen Ressource einzurichten, muss man das JSON-Quellformat von Legado verstehen und die Regeln manuell schreiben. Andererseits erleichtert der eingebaute Editor mit Highlighting dies, wenn man sich mit XPath auskennt.

Warum den Quellcode dieses Projekts studieren

Selbst wenn man nicht vorhat, Webromane zu lesen, ist die Legado-Codebasis als technische Fallstudie interessant.

  1. Architektur für Hintergrundverarbeitung. Der Code zeigt, wie man paralleles Laden und Parsen von Seiten ohne UI-Degradation organisiert.
  2. Einbettung von Server-Komponenten. Die Verwendung von NanoHTTPD für die Kommunikation zwischen Phone und PC bietet ein praktisches Beispiel für den Aufbau lokaler Hybrid-Schnittstellen.
  3. Sichere JS-Ausführung auf Android. Das Projekt zeigt deutlich das Kotlin- und Rhino-Paar für die Handhabung von Benutzercode.

Legado ist ein interessantes Beispiel dafür, wie Enthusiasten eine vertraute mobile App in eine fortschrittliche Plattform zur Datenverarbeitung verwandeln können. Das Projekt lohnt sich zum Klonen und Studieren für Android-Entwickler, die praktische Beispiele für die Integration von Webtechnologien, Scripting-Engines und Hintergrunddiensten in Kotlin suchen.

Ähnliche Projekte