Some checks failed
build / apk (push) Has been cancelled
- 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
93 lines
3.5 KiB
Markdown
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).
|