EhViewer is a high-performance Android client for browsing, reading, and downloading galleries from the E-Hentai / ExHentai image hosting sites. It is a modern fork of the classic EhViewer app, built entirely with Kotlin Multiplatform for shared logic and Jetpack Compose with Material Design 3 for the UI. The architecture is modular (app, core/common, core/data, core/ui, core/i18n) and leverages Rust via JNI for performance-critical HTML parsing and image processing (border detection, QR code detection, WebP animation). The app features a full-featured reader with multiple reading modes, a foreground download service with speed tracking, comprehensive offline support via Room/SQLite, and integration with GitHub releases for updates. The codebase is actively maintained, uses the latest Kotlin, Compose, and Ktor versions, and demonstrates strong engineering practices with clean abstractions, coroutine-based reactive state, and type-safe preferences. It is a dedicated application project with no data science or research components.
EhViewer_CN_SXJ is an Android application for browsing, searching, and downloading content from E-Hentai (a manga/doujinshi platform). It provides a full-featured gallery viewer with offline download management, image caching, and archive extraction. The app integrates native C/C++ libraries (libjpeg-turbo, libpng, libwebp, giflib) via JNI for high-performance image decoding, and uses a custom OpenGL-based rendering framework (GLView) for smooth gallery navigation. The architecture is a monolith with a scene-based UI navigation system, a SQLite-backed persistence layer (greenDAO), and a custom HTTP client built on OkHttp with proxy and cookie management. The codebase is a mix of Java and Kotlin, with extensive native code for image processing and SIMD optimizations (SSE, NEON, MIPS). While the app is functional and actively maintained, it exhibits significant technical debt: tight coupling to E-Hentai's HTML structure, deprecated Android API usage, a forked Android-like environment, and heavy vendored native libraries that require ongoing security updates. The project demonstrates some reusable patterns (Conaco caching, UniFile abstraction, custom collections) but overall is a domain-specific application with limited generalizability.