๐ Ultra-smooth ยท ๐จ Highly Customizable ยท ๐ Privacy First ยท ๐ All-in-one Multimodal
A revolutionary Android AI client integrating cutting-edge technology stacks, supporting any LLM.
From text chat to image generation, voice interaction, and real-time web search, build your custom AI companion.
- Project Positioning: A native Android AI client focusing on multi-model integration, real-time streaming, multimodal features, and local privacy.
- Target Platform: Android 8.1 and above (Android 10+ recommended); Development environment requires Android Studio + JDK 17.
- Capabilities: Covers text conversation, vision, image generation, live voice, LaTeX offline rendering, native web search, and OpenClaw remote control integration.
- Connection Modes: Supports direct upstream API calls (serverless), as well as routing through an optional proxy backend for image generation and extra endpoints.
- Minimum Requirement: First-time use requires at least one set of API endpoint, model name, and API key. Advanced capabilities depend on upstream models or backend support.
- Personal users who want to unify multiple LLMs (such as OpenAI o1/o3-mini, Gemini 2.5/2.0, Claude 3.7 Sonnet, DeepSeek-R1) in a single Android app.
- Heavy AI users who require high-performance streaming, multimodal inputs, advanced image generation (Flux.1, Imagen 3, DALL-E 3), and voice conversations.
- Developers wanting to learn modern native Android AI applications using Kotlin and Jetpack Compose.
- Advanced users requiring remote server control via the OpenClaw / Bridge setup.
- Users looking for a "ready-to-go" application with no API configurations or keys required.
- Users who only want the official client experience of a single model and do not need customization.
- Scenarios requiring native iOS, Web, or Desktop clients.
- Environments where all search, voice, and image capabilities must work completely offline.
- The primary deliverable of this project is the native Android client located in
app1/. - The application supports a serverless direct connection mode, but not all models provide identical features (e.g., web search only works on models that support native search parameters).
- Features like image generation, voice interaction, backend proxies, and OpenClaw depend on whether your upstream models or server endpoints support them.
- "Supported" in this README means the client contains the integration pipeline, not that every model works with every config by default.
- Project Overview: Current
README.md(English) /README_zh.md(ไธญๆ). - OpenClaw Integration:
docs/openclaw-integration.md, detailing the setup of EveryTalk -> Bridge -> Gateway. - Design Logs:
docs/plans/, containing design documentation and historical architectural decisions. - Developer / Agent Docs:
CLAUDE.mdandAGENTS.md, helpful for maintainers wanting to build and run tests.
- ๐ค Full Model Compatibility: Seamlessly connect to OpenAI (GPT-4o, o1, o3-mini), Google Gemini (Gemini 2.5, 2.0 Pro/Flash), Anthropic Claude (Claude 3.7 Sonnet, 3.5 Opus), Zhipu GLM, and local models via Ollama (Llama 3.3, Qwen 2.5, DeepSeek-R1).
- โก Ultra-fast Streaming: Millisecond-level stream parser for fluid typing animation. Features a pass-through stream controller that accumulates tokens and updates UI immediately.
- ๐ง Reasoning Chain Visualizer: Real-time visualization of thinking processes for reasoning models like DeepSeek-R1, OpenAI o1, and o3-mini.
- ๐ Deep Web Search:
- Gemini: Supports native Google Search tool call integration.
- Qwen: Supports native search parameters.
- DeepSeek/OpenAI: Displays search citations and results if supported by the endpoint.
- ๐ Code Interpreter:
- Gemini: Detects computation/data execution tasks, runs Python code in a secure sandboxed environment, and renders output.
- ๐ Auto Fallback: Seamlessly switches to direct connection mode when Cloudflare challenges are detected.
- ๐ LaTeX Math Rendering: Supports inline (
$...$) and block ($$...$$) LaTeX formulas. Fully offline rendering with light/dark adaptive themes.
- ๐ผ๏ธ Vision & Documents:
- Image Recognition: Support for GPT-4o, Gemini 2.0/2.5 Flash/Pro, Claude 3.7 Sonnet.
- Document Analysis: Directly upload and chat with PDF, Word, and Excel files (local PDF parser included).
- ๐ญ AI Image Generation: Connects to Flux.1, Imagen 3, DALL-E 3, and other custom text-to-image endpoints.
- ๐๏ธ Live Voice Dialogue:
- OpenAI: High-quality TTS/STT combos or OpenAI Realtime audio protocols.
- Gemini: Low-latency native multimodal audio flow input/output (Live Voice).
- Azure/Aliyun: High-fidelity cloud text-to-speech engine integrations.
- ๐จ Image Compression & Editing: Smart on-device image optimization before upload.
- ๐๏ธ Parameters Fine-tuning: Fine-grained controls over Temperature, Top-P, Max Tokens, etc.
- ๐ System Prompts: Create and switch custom AI personas for various roles.
- ๐ง Multi-Config Switcher: Save multiple API profiles and switch models in one tap.
- ๐จ Preset Aspect Ratios: Choose from 1:1, 16:9, 9:16 for image generation.
- ๐พ History Manager: Full conversation persistence and history search.
- โ๏ธ Telegram Releases: Get automatically notified of new APK releases in the official channel.
- ๐ On-Device Encryption: Configuration and chat logs are stored locally with AES-256 encryption.
- ๐ Message Signatures: Optional HMAC-SHA256 signature protocol verification for backend API calls.
- โก Performance Tuning: Smart scroll controls (pauses autoscroll when user scrolls manually) and list view caching.
- ๐ Perfect Dark Mode: Curated dark and light themes using Material Design 3.
- โจ Smooth Motion: Crossfades, spring animations, and tactile feedback.
- ๐ฏ Dynamic Sidebar: Easily switch chats, access settings, and manage multiple profiles.
- Go to the project's Releases page.
- Download the latest
app-release.apk. - Allow "Install from Unknown Sources" on your Android device and install the package.
The project is configured with a automated pipeline (see .github/workflows/build-artifacts.yml):
- Auto Release: Merging a Release PR builds and signs the APK and AAB, uploading them directly to GitHub Releases.
- Telegram Broadcast: A bot notifies the Telegram channel with release notes and download links instantly upon build completion.
Before building or running the project locally, set up your keys:
- Copy
app1/local.properties.exampleand rename it toapp1/local.properties. - Populate the keys with your credentials:
# local.properties example configuration
GOOGLE_API_KEY="AIzaSy..."
GOOGLE_API_BASE_URL="https://generativelanguage.googleapis.com"
DEFAULT_OPENAI_API_BASE_URL="https://api.openai.com"
SILICONFLOW_API_KEY="sk-..."
# For more parameters, refer to local.properties.exampleโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Jetpack Compose UI โ
โ Material 3 ยท Responsive Layout โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Kotlin Coroutines & Flow โ
โ Async Process ยท SSE Stream ยท State โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Ktor Client Network โ
โ SSE Parser ยท Fallback ยท Direct Call โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Local Data (Room Database) โ
โ Encrypted SharedPreferences ยท Files โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
ApiClient.kt: Manages network calls, SSE deserialization, error recovery, and Cloudflare bypass.StreamingOutputController.kt: Pass-through streaming controller updating Compose states immediately.GeminiDirectClient.kt/OpenAIDirectClient.kt: Handles serverless connections directly to Google/OpenAI.VoiceChatSession.kt: Manages continuous voice sessions (STT โ Chat โ TTS).
| Component | Requirement |
|---|---|
| Minimum SDK | Android 8.1 (API 27) |
| Recommended SDK | Android 10+ (API 29+) |
| IDE | Android Studio Koala+ / Ladybug+ |
| JDK | JDK 17+ |
| Backend | Optional (Supports direct serverless mode) |
- Open-source Proxy: backdAiTalk
- Functions: API proxying, remote image generation, rate limiting.
- Deployment: Supports Docker containerized setup with multi-instance load balancing.
EveryTalk/
โโโ app1/ # ๐ฑ Android Client Module
โ โโโ app/
โ โ โโโ src/main/java/com/android/everytalk/
โ โ โ โโโ config/ # โ๏ธ Configurations
โ โ โ โโโ data/ # ๐ Data Layer
โ โ โ โ โโโ network/ # ๐ Network APIs
โ โ โ โ โ โโโ ApiClient.kt # Master Client
โ โ โ โ โ โโโ AppStreamEvent.kt # SSE Event Models
โ โ โ โ โ โโโ StreamEventParser.kt # Parser
โ โ โ โ โโโ DataClass/ # Room Entities
โ โ โ โโโ statecontroller/ # ๐ฎ State Management
โ โ โ โ โโโ AppViewModel.kt # Main ViewModel
โ โ โ โ โโโ facade/ # UI State Facade
โ โ โ โ โโโ ViewModelStateHolder.kt # State Holder
โ โ โ โโโ ui/ # ๐จ UI Screen Components
โ โ โ โ โโโ screens/ # Screens
โ โ โ โ โโโ components/ # UI Custom Components
โ โ โ โโโ util/ # ๐ง Utilities
โ โ โโโ build.gradle.kts # Build Script
โ โโโ local.properties.example # Template Properties
โโโ ET-Backend-code/ # ๐ฅ๏ธ Optional Backend Proxy
โโโ README.md # ๐ Master English Document
Endpoint: POST /chat
Request Format: multipart/form-data
โโโ chat_request_json: ChatRequest (JSON)
โ โโโ model: string
โ โโโ messages: Array<Message>
โ โโโ useWebSearch: boolean
โ โโโ showReasoning: boolean
โ โโโ generationConfig: {...}
โโโ uploaded_documents: File[] (Optional)
Response Format: Server-Sent Events (SSE)
data: {"type":"content","text":"Hello","output_type":null,"block_type":null}
data: {"type":"reasoning","text":"Let me think..."}
data: {"type":"web_search_results","results":[...]}
data: {"type":"finish","reason":"stop"}
data: [DONE]
Event Types:
content: Incremental token.content_final: Completed message token.reasoning: Mind chain tokens (OpenAI o1/o3-mini, DeepSeek-R1).reasoning_finish: End of thinking step.web_search_status: Real-time web crawling status.web_search_results: Crawled search citations.tool_call: Tool invocations.error: Error logs.finish: Stream close trigger.
Endpoint: POST /v1/images/generations
Request Format: application/json
{
"model": "flux-1-schnell",
"prompt": "A beautiful sunset over the mountains",
"image_size": "1024x1024",
"batch_size": 1,
"apiAddress": "https://api.siliconflow.cn",
"apiKey": "sk-...",
"forceDataUri": true
}Response Format:
{
"images": [
{
"url": "data:image/png;base64,..."
}
]
}If you wish to control your remote VPS instances running Claw via EveryTalk:
curl -fsSL https://claw.everytalk.cc | bashSee OpenClaw Integration for full configuration steps.
- Fork this repository.
- Create your feature branch (
git checkout -b feature/AmazingFeature). - Commit changes (
git commit -m 'Add some AmazingFeature'). - Push your branch (
git push origin feature/AmazingFeature). - Create a Pull Request.
Make sure to follow Kotlin style guides and cover your changes with tests.
Q1: Why can't I connect to my local Ollama server?
A: Check the following:
- Ensure your Android device and computer are on the same Wi-Fi network.
- Use your computer's local IP address (e.g.,
192.168.1.100), notlocalhostor127.0.0.1. - Check your PC's firewall settings for the Ollama port (usually
11434). - Ensure Ollama is configured to listen on all interfaces by setting environment variable
OLLAMA_HOST=0.0.0.0.
Q2: How does Web Search work?
A: The app routes web queries natively:
- Gemini: Activates the native
google_searchtool call. - Qwen: Sends the query with native search parameters (
enable_search=true). - DeepSeek: Triggers the search parameters. Search results will render in citation cards. Tap cards to open the link directly in your browser.
Q3: What are the latest supported models?
A: EveryTalk supports all OpenAI-compatible APIs. Recommended latest models include:
- Reasoning Models: DeepSeek-R1, OpenAI o1, o3-mini.
- Commercial Flagships: Claude 3.7 Sonnet, Claude 3.5 Opus, Gemini 2.5 Pro/Flash, GPT-4o.
- Open-source / Local: Llama 3.3, Qwen 2.5 (deployed via Ollama, LM Studio, vLLM).
- Image Generation: Flux.1, Gemini Imagen 3, DALL-E 3.
Q4: Does the app collect user telemetry?
A: No. All settings, configurations, keys, and chat histories are saved locally in the SQLite Room Database with AES encryption. Telemetry SDKs are not included.
Q5: The message list jumps when the streaming finishes. How do I fix it?
A: This is caused by spacing variations between draft markdown and finished structured components (like code blocks and tables). We resolve this with two features: streaming height placeholders and single-swap rendering. You can tweak these options in PerformanceConfig.kt:
ENABLE_STREAMING_HEIGHT_PLACEHOLDER = true
ENABLE_SINGLE_SWAP_RENDERING = trueThis project is licensed under the MIT License.
If this project helped you, please give us a โญ Star!
Made with โค๏ธ by the EveryTalk Team