Files
cxyz/cxyz-android/README.md
T
nsrb a7c6058540 Add cxyz Android project structure and initial configuration
- Introduced a new Flutter project for the cxyz Android manga/comic reader, including essential files such as pubspec.yaml, AndroidManifest.xml, and Gradle configuration.
- Added .gitignore files to exclude unnecessary files and directories for both the main project and Android-specific files.
- Implemented initial README.md with project description, features, setup instructions, and API details for ComicLand, MangaRead, and MangaTown.
- Configured analysis options and dependencies in pubspec.yaml to support Flutter development.
- Established a pnpm workspace and lockfile for dependency management.
- Included various Android resources such as icons, styles, and launch backgrounds for a complete application setup.
2026-08-29 17:50:31 +07:00

92 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# cxyz Android (Flutter)
On-device manga/comic reader/downloader — Flutter reimplementation of [cxyz](../) adapters for Android.
## Features (v1)
- **Catalog**: source picker → per-source menus (not one shared tab bar)
- **Sources** (build-time): ComicLand, MangaRead, and/or MangaTown via `--dart-define=SOURCES=…` (or `SOURCES=all`)
- **Series**: chapter list, sync, multi-select / download-all (unread filter)
- **Reader**: gapless vertical webtoon + horizontal paged mode; progress + star
- **Library**: starred series only; **History**: recently read
- **Downloads**: running job + queue link; CBZ under public `Download/Comics/`
- **Settings**: RTL + WebDAV sync (progress, library, history)
## Stack
Flutter 3 · Riverpod · go_router · Dio · Drift (SQLite) · archive (CBZ) · cached_network_image · html
## Setup
Use a local Flutter SDK (this repo may use `../.tools/flutter-sdk` on the machine that cloned it):
```bash
export PATH="/Users/Shared/LocalData/Projects/cxyz/.tools/bin:/Users/Shared/LocalData/Projects/cxyz/.tools/flutter-sdk/bin:$PATH"
export CI=true BOT=true
cd cxyz-android
flutter pub get
dart run build_runner build --delete-conflicting-outputs
flutter run
```
Sideload APK only (not Play Store–friendly).
## Build-time sources (`SOURCES`)
Compile with Flutter `--dart-define`. Unset / invalid → **ComicLand only** (not all sources).
Prefer the helper (copies a tagged filename and prints the path):
```bash
./scripts/build_apk.sh # → …/cxyz-comicland-release.apk
./scripts/build_apk.sh mangaread # → …/cxyz-mangaread-release.apk
./scripts/build_apk.sh comicland,mangaread # → …/cxyz-comicland-mangaread-release.apk
./scripts/build_apk.sh all # → …/cxyz-all-release.apk
./scripts/build_apk.sh mangaread --debug # → …/cxyz-mangaread-debug.apk
```
Or call Flutter directly (always writes `app-release.apk` / `app-debug.apk`):
```bash
flutter build apk
flutter build apk --dart-define=SOURCES=mangaread
flutter build apk --dart-define=SOURCES=comicland,mangaread,mangatown
flutter build apk --dart-define=SOURCES=all
flutter run --dart-define=SOURCES=all
```
With two or more sources enabled, Catalog opens a **source picker**; each source shows only its own menus (e.g. ComicLand: Newest / Popular / …; MangaRead: Latest / Search; MangaTown: Latest / Hot / Directory / …). A single-source build skips the picker and opens that source’s home.
## ComicLand API
Base: `https://api.comicland.org/api`
| Endpoint | Use |
|---|---|
| `GET /comics/popular` | Popular shelf |
| `GET /comics?offset&limit` | Latest / browse |
| `GET /comic/search?q&offset&limit` | Search |
| `GET /comic/detail?slug=` | Series + chapters |
| `GET /chapter/pages_by_index?slug&index` | Page image URLs |
CDN images need Referer/Origin `https://comicland.org/`.
## MangaRead (HTML / Madara)
Origin: `https://www.mangaread.org/`
- Series: listing HTML `li.wp-manga-chapter`, fallback `POST …/ajax/chapters/`
- Pages: chapter HTML with mobile UA → `img.wp-manga-chapter-img`
- Catalog: Latest (`/manga/?m_orderby=latest`) + Search (`?s=&post_type=wp-manga`)
- Cloudflare: direct Dio only; HTTP 403 surfaces a clear error (no FlareSolverr on phone)
## MangaTown (HTML / mobile)
Origin: `https://m.mangatown.com`
- Catalog: Latest (`/latest`), Hot (`/hot`, `?tviews.za` / `?wviews.za` / `?mviews.za`), Directory (`/directory/{demo}-{genre}-0-{status}-{letter}-0`), Search (`/search?name=`)
- Series: `/manga/{slug}` → `ul.detail-ch-list`
- Pages: one image per reader page (`#viewer img#image`); page N at `/manga/{slug}/c005/N.html`
- CDN images need Referer `https://m.mangatown.com/`