# 縦書き 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 ``` ./build.sh ``` This is a development build for personal use, not a Play Store release. The download final apk about 99 MiB because it includes the Firefox engine. Keep `signing/debug.keystore`, for compatible future updates. ## Read The first launch opens this page (because I'm lazy and picked the book I read): https://ncode.syosetu.com/n0552ep/75/ - Swipe right to advance through the columns; swipe left to go back. - Tap a paragraph to focus its text color. Tap the focused paragraph again or tap empty space to show or hide controls. Long-press still selects text. - **文字**: font size; **行間**: column spacing; **段落**: paragraph spacing. - **配色**: paper, white or dark theme. - **自動**: open the reader automatically on chapter pages. - **読書に戻る**: hide controls without changing the text layout. - **元のページ**: show the original website; **縦書き** reopens the reader. - **前へ / 目次 / 次へ**: chapter navigation. - **☰**: open another Narou URL, reload, share, open in a browser, or view help. - Android Back goes back through browsing history, then closes the Activity. - Swipe from the system edge to temporarily reveal Android's system bars. 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 `
` 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. ```sh ./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: ```text 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 - `app/src/main/java/net/astropenguin/naroureader/MainActivity.java`: app UI, immersive mode, URL navigation, back handling, sharing and native menus. - `ReaderApplication.java` alongside it: process-wide Gecko runtime and extension installation. - `app/src/main/assets/reader/content.js`: reading layout, text cleanup, controls, native touch scrolling and saved chapter positions. - `app/src/main/assets/reader/manifest.json`: bundled extension registration. 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: ```sh 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](CHANGELOG.md)