Como o Legado Reader Funciona e Por Que um Aplicativo Android Precisa de um Motor JS Embutido
Pessoalmente, raramente presto atenção a leitores de e-books para dispositivos móveis. Geralmente eles são apenas wrappers em torno da renderização de texto do sistema ou aplicativos fechados cheios de anúncios e assinaturas. Mas o repositório Legado chamou minha atenção. Por trás deste leitor Android existe uma arquitetura que você esperaria encontrar mais em um poderoso sistema de extração de dados do lado do servidor do que em um utilitário de leitura de livros para momentos de lazer.
O aplicativo é escrito em Kotlin e distribuído sob a licença GPL-3.0. Essencialmente, é um web scraper, um motor de execução de user scripts e um servidor web local bundled em uma única interface móvel.
O Que Há Dentro de um Scraper Móvel
Se você olhar a lista de dependências no README, fica claro como os autores abordaram o design. Em vez de estar fortemente acoplado a formatos ou sites específicos, eles criaram uma ferramenta flexível para extrair conteúdo de qualquer lugar.
Aqui está como este sistema funciona:
- Parsing de HTML e JSON. O projeto usa Jsoup, JsoupXpath e json-path. O texto dos capítulos, títulos e tabelas de conteúdo são extraídos de páginas web usando consultas XPath e JSONPath.
- Execução de JavaScript. Para lidar com páginas dinâmicas, o aplicativo embute rhino-android (uma porta do motor JS Mozilla Rhino). Se um site entrega conteúdo via scripts do lado do cliente ou usa marcação não trivial, o Legado executa JS personalizado diretamente no dispositivo.
- Servidor web local. Nanohttpd e nanohttpd-websocket são usados. O aplicativo inicia um servidor HTTP e WebSocket diretamente no smartphone. Você pode inserir o endereço IP do celular no navegador do seu computador para ler livros em uma tela grande ou gerenciar regras de parsing.
- Editor de código diretamente na UI. A biblioteca io.github.rosemoe:editor adiciona um editor de código com syntax highlighting. Você pode ajustar uma regra de extração de texto diretamente na tela do celular.
Como Funciona o Conceito de Fontes
O recurso principal do Legado é a separabilidade da fonte de dados do próprio leitor. O aplicativo não contém um banco de dados de livros embutido. Em vez disso, o usuário importa arquivos de configuração em formato JSON.
Cada arquivo descreve a estrutura do site alvo. Ele especifica regras de busca para livros, caminhos para capítulos e seletores para extrair texto. Se um site é protegido por scripts simples, o código JS é embutido no configurador. O resultado é que o leitor se transforma em um flexible content cleaner: ele remove banners, formata parágrafos e monta um EPUB pronto em tempo real.
Para trabalhar com material linguístico, os autores integraram HanLP — uma biblioteca de processamento de linguagem natural. Isso ajuda com textos em chinês, quebra de linha correta e conversão de caracteres.
Desafios Potenciais que Você Pode Encontrar
A documentação no próprio repositório é extremamente escassa. O README se limita a listar as bibliotecas usadas e alguns links. A maior parte da comunidade e das regras de parsing prontas estão concentradas na internet chinesa, então de cara você não encontrará muito em inglês ou russo.
Para configurar a extração de livros de um recurso específico em russo, você precisará entender o formato JSON de fontes do Legado e escrever as regras manualmente. Por outro lado, o editor embutido com highlighting facilita isso se você estiver familiarizado com XPath.
Por Que Estudar o Código Fonte deste Projeto
Mesmo que você não planeje ler romances web, o codebase do Legado é interessante como um estudo de caso técnico.
- Arquitetura de processamento em background. O código demonstra como organizar carregamento e parsing paralelo de páginas sem degradação da UI.
- Embutindo componentes de servidor. Usar NanoHTTPD para comunicação celular-PC fornece um exemplo prático de construção de interfaces híbridas locais.
- Execução segura de JS no Android. O projeto mostra claramente o emparelhamento Kotlin e Rhino para lidar com código de usuário.
Legado é um exemplo interessante de como entusiastas podem transformar um aplicativo móvel familiar em uma plataforma avançada para trabalhar com dados. O projeto vale a pena clonar e estudar para desenvolvedores Android que buscam exemplos práticos de integração de tecnologias web, engines de script e serviços em background em Kotlin.
Projetos relacionados