|
Some checks are pending
build / apk (push) Waiting to run
- the web app reports the message list's scroll position through the bridge, so pull-to-refresh only fires when the list is really at the top; the trigger distance is bigger (the WebView itself never scrolls) - settings tabs scroll horizontally on narrow screens (all tabs reachable) - version 1.2.2 |
||
|---|---|---|
| .forgejo/workflows | ||
| app | ||
| gradle/wrapper | ||
| .gitignore | ||
| build.gradle.kts | ||
| gradle.properties | ||
| gradlew | ||
| gradlew.bat | ||
| LICENSE | ||
| README.md | ||
| settings.gradle.kts | ||
NikoGPT for Android
Open-source Android client for the NikoGPT web chat (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.devloads 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).
./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:
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:
- Credential Manager (modern GMS) — the standard account sheet;
- 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;
- browser flow — used when neither provider is available (no GMS, no
microG, or cancelled); the browser returns to the app through the
nikogpt://authdeep 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. The Tabler-based icons used by the web chat come from f.n1ko.dev/assets/ui (MIT).