penguin/narou-android

Simple 縦書き reader for narou

README.md

raw · 6965 bytes

縦書き Reader for Android

A standalone, immersive Narou reader powered by Mozilla GeckoView. The vertical reading extension is bundled inside the APK; Firefox and Mozilla add-on signing are not needed.

Install

Use narou-reader-1.1.0-arm64.apk on a 64-bit ARM Android phone such as a Pixel. Requires Android 8.0 (API 26) or newer. Download the APK on the phone, open it, and allow that browser/file manager to install apps when Android asks.

This is a development-signed build for personal use, not a Play Store release. The download is about 99 MiB because it includes the Firefox engine. Keep this source archive, including signing/debug.keystore, for compatible future updates.

Read

The first launch opens the chapter supplied in the original request: https://ncode.syosetu.com/n0552ep/75/

The screen is reserved for the text while reading. Controls overlay the page, so opening them does not change the text layout. Camera cutouts are respected.

Paragraphs containing only <br> elements or whitespace are removed from the reading copy. Empty span wrappers around breaks are handled too. Paragraphs containing illustrations remain. Paragraph spacing is independent of column spacing, with a 0–2em control and a default of 0.3em.

The app remembers the last Narou URL and saves normalized horizontal progress for up to 200 chapter URLs. Position, font, column/paragraph spacing, theme and auto-opening preference are local to this app. Progress is approximate when the layout or chapter text changes. This version reads online; it does not download whole books for offline use.

You can share a Narou chapter URL from another app to 縦書き Reader. Opening Narou links directly in the app may require enabling supported links in Android App Info, because this personal app does not own or verify the site's domain.

Build on macOS / Linux / Windows

Install a current Android Studio, or OpenJDK 27 (JDK 17 also works) and the Android command-line tools. Install SDK Platform 37.2 and Build Tools 37.0.0 through SDK Manager. In Android Studio open this directory, or set ANDROID_HOME to your SDK location.

The project uses Gradle 9.8.1, Android Gradle Plugin 9.4.1, and GeckoView 158.0.20261007201254. The Gradle wrapper is included. No machine-specific SDK path is included in the source archive.

./build.sh                  # Build only; no adb/device required
./build.sh --install        # Build, then install on one connected device
./build.sh --serial DEVICE  # Build, then install on the selected device
./gradlew :app:lintDebug    # Optional Android lint check

build.sh uses your existing JAVA_HOME or Java from PATH, including OpenJDK 27. It stops immediately on a failed build. Installation is opt-in; it checks for an authorized device and selects ARM64 or x86_64 automatically. The Android bytecode target remains Java 17, independently of the JDK used to run Gradle.

On Windows use gradlew.bat. Output:

app/build/outputs/apk/debug/app-arm64-v8a-debug.apk
app/build/outputs/apk/debug/app-x86_64-debug.apk

The ARM64 build is for current phones; x86_64 is for emulator testing. Native libraries are compressed in the APK to reduce download size. The included development key is deliberately usable by the project; see signing/README.md. Generate and protect a separate release key before any public distribution.

Where to edit

The browser engine is bundled, so updating Firefox on the phone does not update this app. Update the pinned GeckoView dependency and rebuild to ship engine fixes.

Validation and limits

To run the bundled reader regression test, install Node.js and Playwright in a temporary development environment, then run:

npm install --no-save playwright
npx playwright install firefox
node tests/reader.test.cjs

The test uses synthetic Japanese text; no copied novel is included. Japanese fonts are needed for meaningful visual screenshots on Linux.

Privacy and licenses

No app analytics or telemetry is added. Network access loads the original website and its resources; its normal cookies and requests still apply. This app has its own browser profile and does not share Firefox's cookies or logged-in accounts. The reader is injected only on https://ncode.syosetu.com/. Other Syosetu pages can be browsed normally; clicked external HTTPS links open in another browser.

App code is MIT-licensed. GeckoView is MPL 2.0 with third-party notices; see THIRD_PARTY_NOTICES.md and app menu → About / help → Engine licenses.

Changelogs

See CHANGELOG