38 KiB
Z.AI Chat for Android
Full-stack AI chat client for the Z.AI GLM Coding Plan
Native Android app with Chat, Coding, Brainstorm & Agentic modes.
| Dark Mode | Light Mode |
|
|
|
Get 10% OFF your Z.AI Coding Plan
World-class GLM-5.1 models for coding agents. Monthly access from just $18/mo.
Use the link above for an exclusive 10% discount on your subscription.
Table of Contents
- Overview
- Architecture
- Technology Stack
- Features
- Design System
- Development Process
- Project Structure
- Building from Source
- Configuration
- API Reference
- Changelog
- License
Overview
Z.AI Chat for Android is a self-contained, production-ready Android application that connects to the Z.AI GLM Coding Plan API. It provides four specialized AI interaction modes — general Chat, Coding assistant, Brainstorm partner, and autonomous Agentic coding — all accessible from a single native Android app.
The app targets Android 15 (API 35) and Android 16 (API 36), built with Capacitor for the hybrid architecture, wrapping a performant single-page web application inside a native Android WebView.
Key Differentiators
| Feature | Implementation |
|---|---|
| Zero-config start | Enter your Z.AI coding plan token and start chatting immediately |
| 4 Specialized Modes | Each mode has a tailored system prompt optimized for its use case |
| Real-time Streaming | Server-Sent Events (SSE) for token-by-token response rendering |
| Dark & Light Themes | Full theme system with 30+ CSS custom properties per palette |
| Conversation Management | Multi-conversation sidebar with auto-titling and JSON export |
| Markdown + Code | Full GFM markdown with syntax highlighting and copy buttons |
| 940 KB Release APK | Minified, shrunk, ProGuard-optimized, self-signed |
Architecture
High-Level Architecture
┌─────────────────────────────────────────────────────┐
│ Android APK │
│ │
│ ┌───────────────────────────────────────────────┐ │
│ │ Capacitor Shell │ │
│ │ ┌─────────────┐ ┌────────────────────────┐ │ │
│ │ │ MainActivity│ │ WebView (Chrome-based) │ │ │
│ │ │ (Java) │──│ │ │ │
│ │ └─────────────┘ │ ┌──────────────────┐ │ │ │
│ │ │ │ SPA (HTML/CSS/JS)│ │ │ │
│ │ ┌─────────────┐ │ │ │ │ │ │
│ │ │ Capacitor │ │ │ ┌────────────┐ │ │ │ │
│ │ │ Bridge │◄─┤ │ │ Chat UI │ │ │ │ │
│ │ └─────────────┘ │ │ │ (Vue-like) │ │ │ │ │
│ │ │ │ └────────────┘ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ ┌────────────┐ │ │ │ │
│ │ │ │ │ API Layer │ │ │ │ │
│ │ │ │ │ (fetch) │ │ │ │ │
│ │ │ │ └──────┬─────┘ │ │ │ │
│ │ │ └─────────┼────────┘ │ │ │
│ │ └────────────┼────────────┘ │ │
│ └───────────────────────────────┼────────────────┘ │
│ │ HTTPS │
└──────────────────────────────────┼────────────────────┘
│
┌──────────────▼──────────────┐
│ Z.AI Coding Plan API │
│ api.z.ai/api/coding/paas/v4 │
│ │
│ OpenAI-compatible endpoint │
│ Models: GLM-5.1, GLM-5, │
│ GLM-4.7, GLM-4.5-air │
└─────────────────────────────┘
Component Architecture
www/
├── index.html ← Entry point, all screens defined
├── css/styles.css ← 30+ CSS custom properties, dual theme system
└── js/
├── app.js ← Core application logic (state machine, API, UI)
├── marked.min.js ← Markdown parser (GFM compatible)
└── highlight.min.js← Syntax highlighting for 180+ languages
The app uses a state-machine pattern with three screens:
- Setup Screen — API key entry, endpoint selection, mode overview
- Chat Screen — Message history, mode selector, input area, sidebar
- Settings Screen — API config, model tuning, theme, data management, changelog
Data Flow
User Input → State Manager → API Request Builder → fetch() → Z.AI API
│
User Sees ← Markdown Renderer ← SSE Parser ← Stream Response ◄┘
│
└→ Syntax Highlighter → Code Headers (Copy button)
State Management
All state is persisted in localStorage with the zai_chat_ prefix:
state = {
apiKey, // Bearer token for Z.AI API
baseUrl, // API endpoint (coding plan vs general)
model, // GLM model selection
temperature, // 0.0 - 1.0 randomness control
maxTokens, // 256 - 16384 response length
streaming, // SSE toggle
webSearch, // web_search tool toggle
currentMode, // chat | coding | brainstorm | agentic
theme, // dark | light
conversations[], // Full message history
activeConversationId
}
Technology Stack
Frontend (WebView SPA)
| Technology | Version | Purpose |
|---|---|---|
| HTML5 | Living Standard | Semantic markup, meta viewport, PWA-ready |
| CSS3 | Custom Properties, Grid, Flexbox | Dual-theme design system with 30+ variables |
| Vanilla JavaScript | ES2020 (IIFE pattern) | Zero-dependency state management, async/await |
| Marked.js | Latest | GitHub-Flavored Markdown parsing |
| Highlight.js | 11.9.0 | Syntax highlighting for 180+ programming languages |
Android Native Layer
| Technology | Version | Purpose |
|---|---|---|
| Capacitor | 8.3.4 | Hybrid app framework, WebView bridge |
| Android SDK | API 36 | Targeting Android 16 (Baklava) |
| Gradle | 8.14.3 | Build automation |
| Android Gradle Plugin | 8.13.0 | Compilation, resource processing |
| JDK | 21 | Java compilation |
| ProGuard | Android Optimize | Release APK minification and shrinking |
API Integration
| Protocol | Implementation |
|---|---|
| OpenAI Chat Completions | POST /chat/completions with Bearer auth |
| Server-Sent Events (SSE) | stream: true with ReadableStream parsing |
| Web Search | Tool calling via web_search tool type |
Build & Signing
| Component | Details |
|---|---|
| Debug Keystore | debug.keystore — android / androiddebugkey |
| Release Keystore | release.keystore — zaichat / zai-chat |
| RSA Key Size | 2048-bit |
| Validity | 10,000 days |
Features
1. Four Specialized Chat Modes
Each mode injects a purpose-built system prompt:
| Mode | System Prompt Strategy | Use Case |
|---|---|---|
| Chat | Concise, knowledgeable assistant | General Q&A, explanations |
| Coding | Expert coder; markdown code blocks, edge cases, error handling | Code generation, debugging |
| Brainstorm | Creative partner; diverse ideas, trade-off evaluation | Ideation, planning |
| Agentic | Autonomous agent; step-by-step tasks, tool-calling format | Complex multi-step coding |
2. Real-Time Streaming
- Uses
fetch()withReadableStreamfor SSE parsing - Token-by-token rendering with Markdown re-parsing on each chunk
- Abort support via
AbortController— stop generation at any time
3. Dark & Light Theme System
30+ CSS Custom Properties per Theme
├── Backgrounds (7 levels: primary → code)
├── Text (3 levels: primary → muted)
├── Accent (main, hover, dim)
├── Borders
├── Status colors (danger, success, warning)
└── UI chrome (shadows, overlays, scrollbars)
Theme is toggled via:
- Header button — sun/moon icon, instant toggle
- Settings toggle — Dark Mode switch
- Persisted —
localStoragesurvives app restarts
4. Conversation Management
- Unlimited conversations stored in
localStorage - Auto-titling from first message (first 50 chars)
- Sidebar with conversation list, active indicator, swipe-to-delete
- JSON export for backup/migration
5. Markdown & Code Rendering
- Full GitHub-Flavored Markdown (tables, task lists, strikethrough)
- Syntax highlighting for 180+ languages via Highlight.js
- Code block headers with language label and copy button
- Inline code with distinct styling
6. Network Security
network_security_config.xmlwhitelists only Z.AI domains- HTTPS-only communication
android:usesCleartextTraffic="false"
Design System
Color Palette
Dark Theme (Default)
| Token | Hex | Usage |
|---|---|---|
--bg-primary |
#0f0f23 |
Main background |
--bg-secondary |
#1a1a2e |
Headers, cards |
--bg-tertiary |
#16213e |
Tertiary surfaces |
--accent |
#6c63ff |
Primary brand color |
--text-primary |
#e0e0ff |
Main text |
--border |
#2a2a4a |
Dividers |
Light Theme
| Token | Hex | Usage |
|---|---|---|
--bg-primary |
#f5f5fa |
Main background |
--bg-secondary |
#ffffff |
Headers, cards |
--bg-tertiary |
#eef0f6 |
Tertiary surfaces |
--accent |
#6c63ff |
Primary brand color (shared) |
--text-primary |
#1a1a2e |
Main text |
--border |
#d8dae6 |
Dividers |
Typography
- Font Stack:
-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif - Base Size: 15px
- Code Font:
'Fira Code', 'JetBrains Mono', 'Cascadia Code', monospace - Code Size: 13px
Spacing & Sizing
| Token | Value | Usage |
|---|---|---|
--radius |
16px | Message bubbles, cards |
--radius-sm |
10px | Buttons, inputs |
--transition |
0.2s ease | All interactive elements |
Development Process
This project was built end-to-end using a systematic Plan → Code → Test → Iterate workflow powered by the Z.AI GLM-5.1 model itself (meta: the tool that built this app is powered by the same API it targets).
Phase 1: Research & Planning
Objective: Understand the Z.AI API surface and design the app architecture.
-
API Research: Fetched and analyzed the z-ai-sdk-python repository to understand:
- Authentication flow (Bearer token)
- Endpoint structure (OpenAI-compatible
/chat/completions) - Streaming protocol (SSE with
data:lines) - Available models and their capabilities
- Tool calling format (web search)
-
Endpoint Discovery: Discovered from Z.AI docs that the Coding Plan uses a dedicated endpoint:
- Coding Plan:
https://api.z.ai/api/coding/paas/v4 - General API:
https://api.z.ai/api/paas/v4 - This distinction was critical — using the wrong endpoint would not consume the coding plan quota.
- Coding Plan:
-
Architecture Decision: Chose Capacitor (over Cordova/React Native) because:
- Zero-framework frontend (vanilla JS) for minimal APK size
- Direct access to native Android WebView
- Smaller learning curve for a single-developer project
- Production-ready Android project scaffolding
Phase 2: Frontend Development
Objective: Build the complete web application (HTML/CSS/JS).
Step 1: HTML Structure (index.html)
- Designed three-screen layout: Setup → Chat → Settings
- Semantic HTML with proper ARIA considerations
- Mode selector, sidebar, conversation list
- Theme toggle integration
Step 2: CSS Design System (styles.css)
- Started with CSS Custom Properties for theming
- Built component library: buttons, inputs, toggles, cards
- Implemented responsive layout (mobile-first)
- Added animations:
fadeInfor messages,bouncefor thinking dots,spinfor loaders
Step 3: JavaScript Application (app.js)
- IIFE pattern to avoid global scope pollution
- State machine with localStorage persistence
- API layer:
apiRequest()for non-streaming callsstreamResponse()withReadableStream+TextDecoderfor SSEAbortControllerfor cancellation support
- Markdown pipeline:
marked.parse()→hljs.highlight()→ DOM injection - Theme engine:
data-themeattribute switching with CSS custom properties
Step 4: Theme System (v1.2.0)
- Extended
:rootvariables into dual theme blocks [data-theme="light"]override block with 30+ light-palette values- Added
applyTheme()function that:- Sets
data-themeon<html> - Updates meta
theme-colorfor browser chrome - Toggles header button icon (sun/moon)
- Syncs settings toggle
- Persists to localStorage
- Sets
Phase 3: Android Build Pipeline
Objective: Create a signed, optimized APK.
Step 1: Environment Setup
- Downloaded JDK 21 (required by Capacitor 8.x — JDK 17 fails with
invalid source release: 21) - Downloaded Android SDK Command-Line Tools (146 MB)
- Installed SDK components:
platforms;android-36,build-tools;36.0.0,platform-tools
Step 2: Project Scaffolding
npm init→ Capacitor initializationnpx cap add android— generates full Android project- Customized
AndroidManifest.xmlwith network security config - Added
network_security_config.xmlfor domain whitelisting
Step 3: Build Configuration
- Created debug and release keystores with
keytool - Configured
signingConfigsinapp/build.gradle - Enabled ProGuard minification + resource shrinking for release
- Set Java 17 compatibility
Step 4: Build & Sign
./gradlew assembleRelease --no-daemon # → 940 KB release APK
./gradlew assembleDebug --no-daemon # → 4.0 MB debug APK
Phase 4: Testing & Validation
| Test | Method | Result |
|---|---|---|
| APK install | Manual (Android 15 emulator) | Pass |
| API connection | testConnection() with real key |
Pass |
| Streaming | SSE parsing with real API | Pass |
| Theme persistence | Kill/restart app | Pass |
| Conversation save | Kill/restart app | Pass |
| Multi-conversation | Create/switch/delete | Pass |
| Code rendering | Python, JS, Go code blocks | Pass |
| Copy button | Clipboard API | Pass |
| Export | JSON file download | Pass |
| Light mode contrast | Visual inspection | Pass |
| ProGuard release | 940 KB (77% size reduction) | Pass |
Project Structure
zai-chat/
├── www/ # Web application (SPA)
│ ├── index.html # Entry point with all 3 screens
│ ├── css/
│ │ └── styles.css # Full design system + dual themes
│ └── js/
│ ├── app.js # Core application logic
│ ├── marked.min.js # Markdown parser
│ └── highlight.min.js # Syntax highlighter
│
├── android/ # Native Android project
│ ├── app/
│ │ ├── build.gradle # App-level build config + signing
│ │ ├── proguard-rules.pro # ProGuard keep rules
│ │ ├── debug.keystore # Debug signing key
│ │ ├── release.keystore # Release signing key
│ │ └── src/main/
│ │ ├── AndroidManifest.xml # Permissions, activities, config
│ │ ├── assets/public/ # WebView assets (copied from www/)
│ │ └── res/
│ │ ├── xml/
│ │ │ └── network_security_config.xml
│ │ ├── values/
│ │ │ ├── strings.xml
│ │ │ ├── colors.xml
│ │ │ └── styles.xml
│ │ └── mipmap-*/ # App icons
│ ├── build.gradle # Root build config
│ ├── variables.gradle # SDK version constants
│ ├── settings.gradle # Module includes
│ └── gradle/wrapper/ # Gradle wrapper
│
├── capacitor.config.json # Capacitor configuration
├── package.json # NPM dependencies
└── README.md # This file
Building from Source
Prerequisites
| Requirement | Version |
|---|---|
| Node.js | 18+ |
| JDK | 21 |
| Android SDK | Platform 36, Build-Tools 36.0.0 |
| npm | 9+ |
Quick Build
# Clone the repository
git clone https://github.rommark.dev/admin/Z.AI-Chat-for-Android.git
cd Z.AI-Chat-for-Android/zai-chat
# Install dependencies
npm install
# Sync web assets to Android
npx cap sync android
# Build debug APK
cd android && ./gradlew assembleDebug
# Build release APK (signed)
./gradlew assembleRelease
# APKs will be at:
# android/app/build/outputs/apk/debug/app-debug.apk
# android/app/build/outputs/apk/release/app-release.apk
Environment Setup (from scratch)
# 1. Install JDK 21
curl -fsSL "https://download.java.net/java/GA/jdk21.0.2/f2283984656d49d69e91c558476027ac/13/GPL/openjdk-21.0.2_linux-x64_bin.tar.gz" | tar xz -C /opt/
export JAVA_HOME=/opt/jdk-21.0.2
# 2. Install Android SDK
mkdir -p ~/android-sdk/cmdline-tools
curl -fsSL "https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip" -o /tmp/cmdline-tools.zip
unzip /tmp/cmdline-tools.zip -d ~/android-sdk/cmdline-tools/
mv ~/android-sdk/cmdline-tools/cmdline-tools ~/android-sdk/cmdline-tools/latest
# 3. Install SDK components
export ANDROID_HOME=~/android-sdk
yes | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager \
--sdk_root=$ANDROID_HOME \
"platforms;android-36" "build-tools;36.0.0" "platform-tools"
# 4. Set environment
export PATH=$JAVA_HOME/bin:$ANDROID_HOME/platform-tools:$ANDROID_HOME/cmdline-tools/latest/bin:$PATH
Configuration
API Endpoints
| Name | URL | Purpose |
|---|---|---|
| Coding Plan | https://api.z.ai/api/coding/paas/v4 |
GLM Coding Plan subscription |
| General API | https://api.z.ai/api/paas/v4 |
Pay-per-use API |
| China | https://open.bigmodel.cn/api/paas/v4 |
Zhipu AI (mainland China) |
Available Models
| Model | Description | Recommended For |
|---|---|---|
glm-5.1 |
Flagship foundation model | Complex coding, agentic tasks |
glm-5-turbo |
Faster variant | Quick queries |
glm-4.7 |
Previous generation | General purpose |
glm-4.5-air |
Lightweight, fast | Speed-critical tasks |
glm-5v-turbo |
Vision model | Image understanding |
System Prompts
Chat Mode
You are a helpful, knowledgeable AI assistant. Be concise and accurate.
Coding Mode
You are an expert coding assistant. Write clean, efficient, well-documented code.
Always use markdown code blocks with language tags. Explain your approach briefly
before and after code. Handle edge cases and errors properly.
Brainstorm Mode
You are a creative brainstorming partner. Generate diverse ideas, explore
unconventional angles, build on concepts, and help evaluate trade-offs. Think
freely and expansively. Present ideas in organized lists or tables when appropriate.
Agentic Mode
You are an autonomous coding agent. Break down complex tasks into clear steps.
Write production-quality code with proper error handling, tests, and documentation.
Think through the architecture before coding. Use tool-calling format when appropriate:
[SEARCH], [CREATE_FILE], [EDIT_FILE], [RUN_COMMAND]. Always verify your work.
API Reference
POST /chat/completions
Request:
{
"model": "glm-5.1",
"messages": [
{"role": "system", "content": "..."},
{"role": "user", "content": "..."},
{"role": "assistant", "content": "..."}
],
"temperature": 0.7,
"max_tokens": 4096,
"stream": true,
"tools": [{"type": "web_search", "web_search": {"search_query": "...", "search_result": true}}]
}
Streaming Response (SSE):
data: {"choices":[{"delta":{"content":"Hello"},"index":0}]}
data: {"choices":[{"delta":{"content":" world"},"index":0}]}
data: [DONE]
Non-Streaming Response:
{
"choices": [{
"message": {"role": "assistant", "content": "Hello world"},
"finish_reason": "stop"
}]
}
Changelog
v3.3.1 (2026-05-21)
- HTML Preview — HTML code blocks no longer render inside chat and break the flow
- Added sandboxed iframe preview panel with Preview button
- Added Open in Browser button for full-screen HTML preview
v3.3.0 (2026-05-21)
- File Manager — browse device files (App Files, Downloads, Camera, Storage), open/preview any file, install APKs directly
- SSH / Remote Access — AI can SSH into external machines, SCP upload/download, curl URLs
- Approval Gate — all sensitive actions (SSH, SCP, curl, adb, pip, npm, etc.) require explicit user approval via in-app dialog
- New Action Tags —
[SSH_EXEC],[SSH_UPLOAD],[SSH_DOWNLOAD],[REMOTE_EXEC],[CURL_EXEC] - Agentic Mode — updated system prompt with full external access documentation
v3.2.0 (2026-05-20)
- Full Internal Virtual Environment —
BootstrapPlugin.setupVirtualEnv()now provisions an app-contained Python venv under app storage, no external Termux app required - In-App Module Installation —
BootstrapPlugin.venvPipInstall()installs Python modules directly into the internal venv - New AI Automation Tags —
[VENV_SETUP]and[VENV_PIP_INSTALL package]available in coding and agentic modes - Critical Runtime Fix — replaced invalid JS
new File(...).existscheck with shell-based file existence test in PRoot strategy - Concurrency Fix —
ShellPlugin.activeProcessesmigrated toConcurrentHashMapto avoid race/corruption under parallel process events - Wake Stability — added null-safe activity handling and power service guards in
WakePlugin - Bootstrap Resource Safety — fixed major stream and descriptor leaks in download/extract paths (
downloadFile,extractBootstrap) - Accessibility Labels — added missing
aria-labelattributes for icon-only controls in UI - Version sync — About screen and package/build versions updated to 3.2.0
v3.1.0 (2026-05-20)
- AutoGLM Device Control —
AccessibilityServicefor full device automation: tap, swipe, long press, type text, screenshot, UI tree - Navigation Controls — press Back, Home, Recents, Notifications, Quick Settings, Power Dialog via global actions
- App Control — launch apps, get current foreground app, read full accessibility node tree with bounds/text/clickable state
- Click by Text/ID —
clickByText()andclickNode()for semantic UI interaction without coordinates - Hermes Agent —
installHermes()creates Python venv and installs hermes-agent via pip;hermesExec()runs Hermes commands - AI Tool Tags —
[DEVICE_*](17 tags) and[HERMES_*](2 tags) parsed in both coding and agentic modes - AutoGLMPlugin — Capacitor plugin exposing all device control methods to JavaScript
- Accessibility Setup UI — one-tap enable button in Dev Setup screen with live status indicator
- Hermes Install UI — install button in Dev Setup screen
- v2 APK Signing — release APK signed with APK Signature Scheme v2 (required for targetSdk 36)
v2.3.0 (2026-05-20)
- Java Virtual Environment —
ecj.jar(3.2MB) andapksigner.jar(1.1MB) bundled as APK assets, extracted at runtime - app_process Wrappers — wrapper scripts use
/system/bin/app_processto run JARs (bypasses SELinuxexecverestrictions entirely) - d8.jar Runtime Download — downloads DEX compiler (~18MB) from Google build-tools at first use
- installAapt2 Plugin —
BootstrapPlugin.installAapt2()downloads aapt2 + aapt + dependencies from Termux repo, extracts to$TOOLS - extractAsset/downloadFile Plugins — new
BootstrapPluginmethods for APK asset extraction and URL file downloads - Smart Tool Detection —
toolsReady()andcheckDevEnvironment()check both Termux native tools and Java virtual tools - BUILD_SCRIPT Updated — uses
sh "$TOOLS/bin/ecj"etc.,#!/system/bin/shshebang,$TOOLS/share/android.jarfallback paths - LD_LIBRARY_PATH —
$TOOLS/libadded for aapt2 shared library resolution - Architecture: Java tools never need execute permission (read-only JARs), aapt2 downloaded on demand
v2.2.5 (2026-05-19)
- Shebang Patching, Proot from APK nativeLib, Termux RUN_COMMAND integration, F-Droid fallback, 3-Strategy Install
v2.2.4 (2026-05-19)
- Bundled PRoot — proot binary (v5.1.107) included in APK as native library with executable SELinux label
- Auto-Proot Install —
ShellPlugin.refreshShell()copies proot + loader from APK'snativeLibraryDirto$PREFIX/bin/and$PREFIX/libexec/proot/on first use - Auto-Proot Wrapping — commands using
$PREFIX/bin/paths (pkg/apt/dpkg) automatically wrapped withproot -0 -b /dev -b /proc -b /sys -r $PREFIX - PROOT_LOADER env —
PROOT_LOADERenvironment variable set so proot finds its loader binary - Supports arm64-v8a, armeabi-v7a, x86_64, x86 architectures (~350KB total added to APK)
v2.2.3 (2026-05-19)
- Os.chmod() Fix — uses
android.system.Os.chmod()(direct syscall) instead ofRuntime.exec("chmod")for reliable execute permissions - PRoot Fallback — auto-downloads PRoot from Termux package repo when SELinux blocks binary execution
- Shell Always /system/bin/sh — avoids Termux bash permission issues entirely, uses system shell with correct PATH
- Explicit sh Invocation — runs
pkg/aptviash "$script"instead of direct execution - installProot Plugin —
BootstrapPlugin.installProot()downloads .deb, extracts proot binary with AR+tar parser - Termux Fallback Guide — if all auto-install methods fail, clear instructions to install Termux from F-Droid
chmodRecursive()replacessetPermissionsRecursive()— usesOs.chmod(path, 0755)for every file
v2.2.2 (2026-05-19)
- Permission Fix —
chmod -R 755on all bootstrap binaries after extraction (fixes "Permission denied" on bash) - Shell Auto-Fallback — if bash fails with permission error, auto-falls back to
/system/bin/sh - fixPermissions Plugin — new
BootstrapPlugin.fixPermissions()for JS to call after install ensureBuildTools()uses full paths topkg/aptwithchmod 755before executionsetPermissionsRecursive()ensures all nested binaries get execute permission- Shell auto-refreshes path on each execute call, re-chmods if needed
v2.2.1 (2026-05-19)
- Auto-Install Build Tools —
aapt2,ecj,d8,apksignerauto-installed viapkgwith full paths and retry logic - Dev Tools Banner — yellow warning banner on Coding/Agentic mode if tools missing, one-tap Install button
- Bootstrap + Tools in One Tap — Install button auto-installs Termux bootstrap then build tools sequentially
- Checks tool availability before every build attempt, auto-installs if missing
v2.2.0 (2026-05-19)
- Build Pipeline Rewrite — proven 7-step pipeline tested with Android SDK 36: resources → link → compile (R.java + sources) → DEX → package → sign
- Auto-Install Build Tools —
aapt2,ecj,d8,apksignerauto-installed viapkgon first build - APK Signing — generates debug keystore via
keytooloropenssl, signs withapksigner - 5-Minute Build Timeout — 300s (was 30s), kills stuck processes on timeout
- Fixed 18 Build Bugs — R.java included in compilation, d8 uses
@fileinstead of broken glob,set -eproper error propagation, no-opcpremoved - Agentic IDE Loop — full tool→execute→verify→iterate cycle (inspired by opencode + AIDE architecture)
- ShellPlugin fixes: HOME/PREFIX mismatch, process kill on timeout
v2.1.0 (2026-05-19)
- File Tree per Session — sidebar shows all AI-generated files per conversation, click to view/edit/save
- File Viewer with Edit Mode — view any file, switch to edit mode, save changes back to device
- Auto-Continue — app detects incomplete AI responses and auto-continues until task is confirmed done
- Task Completion Protocol — AI outputs
[TASK_COMPLETE]when done; detects truncated code blocks and unclosed file tags - Configurable Auto-Continue — max auto-continues adjustable 1–20 (default 5) in Settings
- File tree button visible in Coding/Agentic modes alongside Terminal toggle
v2.0.1 (2026-05-19)
- APK Build Verification — confirms APK file exists after build, shows file size
- Stay Awake Fix — dual wake locks (screen bright + CPU partial) with 24h timeout keep device fully awake
- Configurable Auto-Fix Retries — max retries adjustable from 1–30 in Settings (default 10, was hardcoded 3)
v2.0.0 (2026-05-19)
- Built-in Termux — full Linux environment inside the app, no external Termux install needed
- One-time ~30MB download of Termux bootstrap (bash, coreutils, apt, 25+ packages)
- Auto-detects CPU architecture (arm64-v8a, armeabi-v7a, x86, x86_64)
- Path patching: fixes all
/data/data/com.termuxreferences to work from app prefix BootstrapPlugin— native download, ZIP extraction, symlink creation, path patchingShellPluginupgraded — uses bundledbashinstead of limited/system/bin/sh- Install build tools:
pkg install aapt2 ecj dx apksigner - APK stays ~1MB — bootstrap downloaded on first use, never embedded
v1.4.0 (2026-05-19)
- Agentic Feedback Loop — build errors auto-sent back to AI for fixing (up to 3 retries)
- Termux Integration — auto-detects Termux, uses its
PATH(aapt2, d8, ecj, tsu/su) - Workspace Context — AI sees device info, available tools, project files before coding
- AIDE-style Tool Protocol — structured
[CREATE_FILE],[RUN_COMMAND],[BUILD_APK],[INSTALL_APK] - Auto-Build Pipeline — aapt2 → ecj → d8 → sign → install chain
- Build Error Auto-Correction — captures exit codes and compiler errors, feeds back to AI
- Root Detection — detects
tsu/sufor elevated privileges via Termux
v1.3.1 (2026-05-19)
- Auto-Execute — AI actions now deploy files, build, and install APKs automatically (no manual button taps)
- Keep Screen On — toggle prevents Android screen sleep while agent is working
- Auto-Deploy toggle — enable/disable automatic file deployment from AI responses
- Status toasts — visual feedback for deploy/build/install progress
- New "Terminal & Agent" settings section
v1.3.0 (2026-05-19)
- Full Terminal — interactive shell on your Android device, execute real commands
- Deploy Files — AI-generated code saved to device with one-tap Deploy button
- Build APK — compile Android projects on-device with aapt2 + d8 + ecj (via Termux)
- Install APK — install built APKs directly from the app via PackageInstaller
- AI Action Parser — detects
[CREATE_FILE],[RUN_COMMAND],[BUILD_APK],[INSTALL_APK] - Quick Commands — toolbar with ls, pwd, cat, mkdir, tools check, system info
- Command History — arrow key navigation through previous commands
- Built-in Commands —
help,sysinfo,create <name>,install <apk>,clear,setup - Dev Setup Screen — bootstrap on-device build tools (aapt2, d8, ecj, apksigner)
- Project Scaffold —
create myappgenerates full Android project structure - Enhanced Agentic Mode — AI understands on-device build capabilities
- Native plugins:
ShellPlugin(command execution, file I/O) +InstallerPlugin(APK install)
v1.2.4 (2026-05-19)
- Save button on every code block — downloads code as a file to your device
- Copy & Save buttons on every AI response message
- File path highlighting — paths like
/app/build/file.apkare tappable badges (tap to copy) - Smart filename detection from code block first line or language
- 30+ language-to-extension mappings for proper file saving
v1.2.3 (2026-05-19)
- Fixed: Connect button not working — missing
updateSendButton()function declaration caused JS parse error - All UI event handlers now correctly initialized on app start
v1.2.2 (2026-05-19)
- Fixed: network error on app backgrounding — now auto-retries with reconnect
- Streaming resumes from last saved token after reconnection (context preserved)
- Exponential backoff retry (3 attempts) for network interruptions
- Retry button shown for failed requests due to connectivity loss
- Offline/online detection with status banner
- Visibility change handler saves state on app going to background
- Partial response preserved and restorable on reconnect
v1.2.1 (2026-05-19)
- Fixed: messages lost when switching conversations during streaming generation
- Streaming responses auto-save every 20 tokens to prevent data loss
- Partial responses preserved when switching sessions mid-generation
- Added in-app terminal panel for Coding and Agentic modes
- Terminal parses code blocks, file operations, and tool calls from AI responses
- Terminal toggle button with collapsible panel (persists state)
- Conversation list now shows message count per session
- Improved conversation switch safety with flush-before-switch pattern
v1.2.0 (2026-05-19)
- Added light mode / dark mode toggle
- Theme persists across sessions via localStorage
- Theme toggle button (sun/moon) in chat header
- Theme setting in Settings > Appearance
- Added changelog section to Settings
- Optimized light theme color palette with 30+ CSS variables
- Android
theme-colormeta updates on theme switch
v1.1.0 (2026-05-19)
- Z.AI Coding Plan endpoint support (
api.z.ai/api/coding/paas/v4) - Fixed default API base URL to use coding plan endpoint
- Updated model list: GLM-5.1, GLM-5 Turbo, GLM-4.7, GLM-4.5 Air, GLM-5V Turbo
- Added coding plan subscription links to setup screen
v1.0.0 (2026-05-19)
- Initial release
- 4 chat modes: Chat, Coding, Brainstorm, Agentic
- Real-time SSE streaming responses
- Markdown rendering with syntax highlighting (180+ languages)
- Code block headers with copy buttons
- Multi-conversation management with sidebar
- Settings: model, temperature, max tokens, web search, streaming
- Conversation export to JSON
- Android 15/16 support (targetSdk 36, compileSdk 36)
- Dark theme with Material Design 3 aesthetics
- Self-signed release APK (940 KB)
License
This project is licensed under the MIT License — see the LICENSE file for details.
Built with Z.AI GLM-5.1 · Powered by Z.AI Coding Plan