# SSH Mobile Client — Android A proper, interactive SSH client for Android, built natively in Kotlin. Designed like Termux-style terminals so **vim, nano, htop, tmux, top, ssh, and other interactive CLIs** work correctly over a real PTY. > **Status: ter-build & terverifikasi.** Pada 2026-08-30 proyek ini berhasil dikompilasi > penuh (Gradle `assembleDebug`) dan diproduksi APK (11 MB). Repo berisi project > Kotlin/AndroidStudio lengkap — tinggal buka di Android Studio atau build via CLI. ## ✨ Fitur (versi 1.0) | Area | Dukungan | |------|----------| | **SSH 2.x** | sshj 0.38 (SSH-2), handshake modern (RSA/ECDSA/ED25519) | | **PTY interaktif** | `xterm-256color` PTY, shell interaktif penuh | | **ANSI warna** | 16 + 256 + TrueColor (24-bit) SGR — parser ditulis sendiri | | **Font custom** | ukuran font diatur (pinch-to-zoom 14–60px), monospace | | **Tema terminal** | 6 tema built-in (Hijau, Tango, Solarized×2, Gruvbox, Material) + Dark UI | | **Keyboard khusus** | Baris Ctrl/Alt/Esc/Tab/panah/PgUp/PgDn/Del | | **Copy/paste & seleksi** | Seleksi teks → salin ke clipboard, tempel ke sesi | | **Autentikasi** | Password / private key (+passphrase) | | **Profil server** | Simpan banyak profil (nama, host, port, user, tema, ukuran font) | | **Kredensial aman** | `EncryptedSharedPreferences` (Tink/GCM) — semua tersimpan terenkripsi | | **Reconnect & keep-alive** | Reconnect otomatis dengan backoff + keep-alive SSH (60s) | | **Orientasi** | Portrait & landscape — PTY di-resize otomatis mengikuti layout | > **Backlog:** SFTP browser, host-key pinning (known_hosts), manajemen key dari file, > toggle Dark/Light saat runtime. ## 🏗️ Arsitektur ``` app/src/main/java/com/kosbarokah/sshclient/ ├── data/ │ ├── ServerProfile.kt # model profil + ThemePreset (16-warna & tema) │ └── SecureStore.kt # simpan profil + kredensial terenkripsi ├── ssh/ │ └── SshEngine.kt # koneksi SSH (sshj), PTY, auth, reconnect, keep-alive ├── terminal/ │ ├── TerminalModel.kt # buffer layar + scrollback + sel (warna/atribut) │ ├── TerminalParser.kt # parser ANSI/VT100 (16/256/TrueColor, cursor, clear) │ ├── TerminalView.kt # View custom: render, seleksi, copy, pinch-zoom │ ├── TerminalScheme.kt # data skema warna (palette + bg/fg/cursor) │ └── TerminalController.kt # perekat: parser ↔ SSH ↔ View ├── keyboard/ │ └── KeySequences.kt # byte sequence key khusus (Esc, panah, Ctrl, dst) └── ui/ ├── ConnectActivity.kt # daftar profil ter-simpan ├── ProfileEditorActivity.kt # tambah/edit/delete profil + kredensial └── TerminalActivity.kt # layar terminal + toolbar + key bar ``` ## 🚀 Cara Membangun (Android Studio) 1. **Buka** folder ini di Android Studio (Flutter? Tidak — ini native Kotlin/Gradle). 2. Pastikan SDK `android-34` & build-tools `34.0.0` terinstal (Android Studio akan menawarkan secara otomatis). 3. Sync Gradle — semua dependensi (sshj, security-crypto, Material, coroutines) diambil dari Maven Central / Google. 4. **Run** di emulator atau perangkat Android (minSdk 26 / Android 8.0+). Bisa juga via **command-line** (tanpa Android Studio): ```bash # Prasyarat di mesin pengembang: # - JDK 17 # - Android SDK command-line tools (platform android-34, build-tools 34.0.0) # - Gradle 8.9 (atau buka di Android Studio yang membawa Gradle sendiri) export ANDROID_HOME=/path/to/Sdk # sesuaikan dengan lokasi SDK-mu gradle :app:assembleDebug # hasil: app/build/outputs/apk/debug/app-debug.apk ``` > Catatan: tidak ada `gradlew` wrapper di proyek ini; gunakan Gradle yang terinstal > (8.9) atau buka via Android Studio (yang menyediakan Gradle sendiri). ## 🧪 Verifikasi Build Pada 2026-08-30 yang lalu, hasil build di jalur produksi: - `gradle :app:assembleDebug` → **BUILD SUCCESSFUL**, APK 11 MB diproduksi - `gradle :app:lintDebug` → **0 error** (hanya warning versi dependency yang tidak wajib di-*upgrade*) - Struktur lengkap: 13 file Kotlin, 10 resource XML, `AndroidManifest.xml`, Gradle config > Catatan: terminal emulator **diimplementasikan sendiri** (tanpa library pihak ketiga) > supaya build bersih & dependable. `TerminalParser` menangani subset ANSI yang cukup > untuk vim/nano/htop/tmux/top: SGR warna (16/256/TrueColor), cursor movement/clear, > scrollback, dan OSC (ignored body). Karena tidak ada emulator Android di lingkungan > build ini, verifikasi dibatasi pada compile + resource + lint; uji runtime tetap perlu > di perangkat/emulator. ## 🔐 Keamanan - Semua profil & kredensial disimpan lewat `EncryptedSharedPreferences` (master key AES256-GCM dari Android Keystore, nilai dienkripsi AES256-GCM). - Private key & passphrase tidak pernah diserialisasi sebagai teks polos ke disk. - Host key verifier v1 bersifat "terima semua" dengan catatan TODO untuk pinning known_hosts di rilis berikut (terbilang di backlog). ## 🖥️ Skenario Penggunaan - SSH ke server/cantor untuk akses shell jarak jauh. - Menjalankan editor terkesan: `vim`, `nano`, `htop`, `tmux`, `ssh`, `kubectl`. - Warna penuh untuk `ls -la --color`, `bat`, `lsd`, `fzf`, `grep --color`. - Simpan beberapa profil server untuk akses satu-ketukan. ## 📄 Lisensi Kode contoh internal — untuk digunakan oleh project Kos Barokah.