Как один разработчик переписал читалку ранобэ на Material Design и зачем нам это изучать
Знаете это чувство, когда открываешь старое приложение на Android, а там интерфейс из времён Gingerbread? В 2014 году один разработчик под ником MewX решил, что популярный ресурс Wenku8 достоин лучшего, и начал «для себя» пилить сторонний клиент. В итоге получился проект light-novel-library_Wenku8_Android, который сегодня выглядит как отличный учебник по истории развития Android-разработки.
О чем этот проект
По сути, это читалка легких новелл (ранобэ) с крупнейшего китайского агрегатора Wenku8. Но для нас интереснее не контент, а то, как автор прошел путь от новичка до крепкого разработчика. Проект охватывает эпоху перехода от Eclipse к Android Studio и внедрения Material Design.
В репозитории лежат сразу две версии: старая «классическая» (ветка 0.5.x) и новая на MD (ветка 1.x). Если вам интересно посмотреть, как переписать проект с нуля, сохранив логику работы с данными, — вам сюда.
Что внутри под капотом
Автор не просто выложил код, он подробно расписал структуру хранения данных и логику работы парсеров. Вот что мне показалось наиболее любопытным.
Система кеширования и сохранения
В папке saves реализована самобытная система хранения прогресса. Вместо тяжелых баз данных SQLite здесь используются простые текстовые файлы с кастомными разделителями. Например, прогресс чтения в горизонтальном режиме записывается строкой вида aid:cid:vid:paraid:wordid.
Интересно реализовано хранение учетных данных. Автор не стал использовать стандартный AccountManager, а написал свой велосипед cert.wk8. Пароли там шифруются в несколько этапов: Base64 -> инверсия регистра -> Base64 -> перестановка символов -> Base64. Конечно, это не спасёт от серьезного взлома, но как пример «домашней криптографии» выглядит забавно.
Архитектура и библиотеки
Проект — настоящий музей популярного софта середины 2010-х. Здесь можно найти:
- Universal Image Loader (UIL) для работы с картинками (до того, как Glide и Coil захватили мир).
- Volley для сетевых запросов.
- Material Dialogs от afollestad (классика, которая жива до сих пор).
- Кастомные View для «умного» деления текста на страницы в ридере.

Чему тут можно поучиться
Во-первых, работе с текстом. В ранобэ много иллюстраций, которые вставлены прямо в текст. Автор реализовал парсер, который выцепляет теги картинок и динамически вставляет их в поток чтения, не допуская OutOfMemory. Для этого используется subsampling-scale-image-view, который умеет отображать куски огромных изображений без загрузки всего файла в RAM.
Во-вторых, здесь круто прописана логика синхронизации. Приложение умеет проверять обновления новелл, скачивать только новые главы и докачивать картинки, если они появились позже.
// Пример логики парсера из исходников
public class OldNovelContentParser {
// Разбирает текст и картинки, превращая их в список объектов для адаптера
// Код написан во времена, когда AsyncTask был основным инструментом
}
Почему проект заброшен
Автор честно признается в README: он ушел готовиться к экзаменам в магистратуру, а китайские медиагиганты вроде Tencent начали активно скупать права на ранобэ, закрывая сторонние API. Это грустная, но поучительная история о том, как авторский проект может столкнуться с юридическими и техническими ограничениями больших платформ.
Кстати, в репозитории есть раздел «碎碎念» (мысли вслух), где разработчик делится факапами. Например, он жалуется, что пользователи не находят функцию поиска, если она спрятана в меню, или не понимают, как пользоваться кастомными шрифтами. Это отличный фидбек по UX, который полезно почитать любому мобильному разработчику.
Кому стоит заглянуть в репозиторий
- Новичкам в Java/Android: чтобы увидеть, как устроено реальное приложение «средней руки» со сложной навигацией.
- Тем, кто пишет ридеры: логика разбиения текста на страницы и работа с отступами (line_distance, paragraph_distance) здесь прописана очень подробно.
- Любителям копаться в архивах: чтобы сравнить подходы Eclipse и Android Studio в рамках одного проекта.
Проект не претендует на звание «лучшего архитектурного решения 2024 года», но он живой, честный и содержит массу практических хаков по работе с файловой системой и UI.

Если решите запустить проект сегодня, готовьтесь к долгой пляске с Gradle — зависимости восьмилетней давности могут потребовать старую версию JDK. Но даже простое чтение кода в браузере даст пару идей о том, как организовать локальный кеш данных без лишней мороки с БД.
