nikogpt_android/README.md
Niko Marmeladkov 898bcb792b
Some checks failed
build / apk (push) Has been cancelled
1.1.0: release signing, App Links, camera and share, update check
- signed release builds via keystore.properties (gitignored)
- Android App Links (https://chat.n1ko.dev/app-auth) verified through
  /.well-known/assetlinks.json; nikogpt:// stays as fallback
- attach sheet with File/Camera (FileProvider)
- Share to NikoGPT (ACTION_SEND text)
- user agent carries the app version so the web UI can offer updates
2026-10-05 18:14:21 +03:00

93 lines
3.5 KiB
Markdown

# NikoGPT for Android
Open-source Android client for the NikoGPT web chat
([chat.n1ko.dev](https://chat.n1ko.dev)) — a thin, auditable WebView shell
around the same web interface that runs in the browser. No analytics, no
trackers, no third-party SDKs: the whole app is one activity and a handful of
resources.
- **Android 10+** (`minSdk 29`), targets Android 15.
- **Everything the web app can do**: conversations, attachments (system file
picker), images, generated files, settings, themes.
- Downloads go through Android's `DownloadManager` (with your session
cookies), links to other sites open in the system browser.
- **Open in the browser only**: `chat.n1ko.dev` loads inside; anything else
leaves the app.
- TLS errors are never bypassed, no cleartext traffic, no backup.
- Day/night theme follows the system; the page keeps its own theme setting.
- Back gesture navigates the chat history, pull-to-refresh reloads.
## Install
Download the APK from the releases page:
**https://git.n1ko.dev/Niko/nikogpt_android/releases**
Latest build:
https://git.n1ko.dev/Niko/nikogpt_android/releases/download/v1.0.0/nikogpt-android-1.0.0.apk
Open the APK on the phone (allow installing apps from this source when Android
asks). The APK is debug-signed for now, so Android may show a warning.
## Build
Requirements: JDK 17, Android SDK (platform 35, build-tools 35.0.0).
```bash
./gradlew assembleDebug # app/build/outputs/apk/debug/app-debug.apk
./gradlew assembleRelease # unsigned; sign it yourself
```
Or just open the project in Android Studio.
### Release signing
The published APKs are signed with the project's release keystore
(`keystore.properties` + the `.jks` file, both outside git). To build them
yourself, create a keystore and point `keystore.properties` at it:
```bash
keytool -genkeypair -v -keystore nikogpt.jks -alias nikogpt \
-keyalg RSA -keysize 2048 -validity 10000
cat > keystore.properties <<EOF
storeFile=../nikogpt.jks
storePassword=...
keyAlias=nikogpt
keyPassword=...
EOF
./gradlew assembleRelease
```
**Installing over a debug-signed build requires uninstalling it first** (the
signatures differ). Add the release certificate's SHA-1 to the Android OAuth
client (Google Cloud) and its SHA-256 to `web.android_cert_sha256` in the bot
config for App Links.
## Google sign-in
Native "Continue with Google" is attempted in this order:
1. **Credential Manager** (modern GMS) — the standard account sheet;
2. **legacy Google Sign-In API** — this is what **microG** implements, so the
native picker works on de-Googled ROMs with microG and a Google account
added there;
3. **browser flow** — used when neither provider is available (no GMS, no
microG, or cancelled); the browser returns to the app through the
`nikogpt://auth` deep link and the session lands in the WebView.
Native sign-in needs an **Android-type OAuth client** in the same Google Cloud
project, with the app's package name (`dev.n1ko.nikogpt`) and the SHA-1 of the
signing certificate. The web client id (from the server) is passed as
`serverClientId`.
## Structure
| Path | Purpose |
|---|---|
| `app/src/main/java/dev/n1ko/nikogpt/MainActivity.kt` | the whole app: WebView setup, file chooser, downloads, back handling |
| `app/src/main/res/layout/activity_main.xml` | WebView + progress bar + retry screen |
| `.forgejo/workflows/build.yml` | CI: builds the APK on tags |
## License
MIT — see [LICENSE](LICENSE). The Tabler-based icons used by the web chat come
from [f.n1ko.dev/assets/ui](https://f.n1ko.dev/assets/ui) (MIT).