{
  "markdown": "# JuggleChat Android — Open-Source Instant Messaging App\n\n[English](README.md) | [简体中文](README.zh-CN.md)\n\nJuggleChat Android is a complete, runnable **Android instant messaging app** built with Java, the JuggleIM SDK, and ZEGO. It is an open-source reference project for developers building a mobile chat app with one-to-one and group messaging, contacts, social feeds, message search, and real-time audio/video calls.\n\nUse this repository to evaluate the JuggleIM Android SDK, learn how production-style chat features fit together, or bootstrap your own Android IM application.\n\n## Feature Preview\n\n<table>\n  <tr>\n    <td align=\"center\">\n      <strong>Messaging, Contacts, and Groups</strong><br>\n      <sub>Login · Conversations · Rich messages · Voice messages · Search · Group chat</sub>\n    </td>\n    <td align=\"center\">\n      <strong>Calls, Group Management, and Moments</strong><br>\n      <sub>Audio/video calls · Incoming calls · Group settings · Social feed · Favorites</sub>\n    </td>\n  </tr>\n  <tr>\n    <td width=\"50%\">\n      <img src=\"images/img.png\" alt=\"JuggleChat Android messaging app screens showing login, conversation list, chat messages, voice messages, contact search, and group chat\">\n    </td>\n    <td width=\"50%\">\n      <img src=\"images/img_1.png\" alt=\"JuggleChat Android IM app screens showing video calls, group management, social moments, favorites, contacts, and incoming calls\">\n    </td>\n  </tr>\n</table>\n\n## Why JuggleChat?\n\n- **Runnable end-to-end demo** — follow the flow from authentication to conversations, messages, groups, moments, and calls.\n- **Real chat app patterns** — study unread counts, pagination, message actions, session recovery, multi-device login handling, and incoming-call overlays.\n- **Integration reference** — see how an Android client connects an IM SDK, an application backend, and ZEGO real-time communication.\n- **Readable Java architecture** — a single app module with clear boundaries between UI, domain repositories, SDK integration, HTTP services, and events.\n- **A practical starting point** — fork the project for an internal messenger, community chat, customer-support app, or social product prototype.\n\n## Features\n\n### Messaging and conversations\n\n- One-to-one chat and group chat\n- Text, image, voice, file, and merged/forwarded messages\n- Message replies, reactions, translation, recall, favorites, and pinned messages\n- Conversation pagination, unread badges, pinning, and mute settings\n- Message history and in-chat search\n\n### Contacts and groups\n\n- Registration, login, session restoration, and multi-device session handling\n- Friend requests and contact management\n- Group creation, announcements, QR codes, roles, and member management\n- Search across friends, groups, and messages\n\n### Social and real-time communication\n\n- Moments/social feed with posts, images, likes, and comments\n- One-to-one and multi-party audio/video calls powered by ZEGO\n- Incoming and ongoing call overlays\n- CameraX and ML Kit barcode/QR code scanning\n\n## Technology Stack\n\n| Area | Technology |\n|---|---|\n| Platform | Android, Java |\n| Android support | minSdk 24, targetSdk 34 |\n| Build | Android Gradle Plugin 8.4.0, Gradle 8.6, JDK 17 |\n| Instant messaging | JuggleIM Android SDK `1.8.44` |\n| Audio/video calls | Juggle call extension `1.8.25`, ZEGO Express `3.17.3` |\n| App architecture | Repository layer, SDK facade, EventBus event bridge |\n| UI and media | AndroidX, Material Components, Glide, CameraX, ML Kit |\n| Networking and data | Retrofit, Gson, Protobuf, Qiniu SDK |\n| Security | AndroidX Security Crypto |\n\n## Architecture\n\nJuggleChat keeps SDK callbacks and application UI loosely coupled. `JIMChatCore` is the single facade around the JuggleIM SDK; repositories coordinate domain data, and EventBus distributes connection, conversation, and message updates to the UI.\n\n```text\nAndroid UI\n   ├── Domain repositories ── JIMChatCore ── JuggleIM SDK\n   ├── HTTP service layer ───────────────── Application backend\n   └── Call UI ────────────── Juggle call extension ── ZEGO\n```\n\nMain source directory: `app/src/main/java/com/juggle/im/android/`\n\n| Package | Responsibility |\n|---|---|\n| `app/` | Application shell, authentication screens, settings, and profile |\n| `auth/` | Session persistence, authentication guard, and startup routing |\n| `chat/` | Conversations, messages, contacts, groups, search, calls, and moments |\n| `core/` | JuggleIM SDK facade (`JIMChatCore`) |\n| `server/` | HTTP services and data transfer objects |\n| `event/` | EventBus event definitions |\n| `service/` | Foreground and keep-alive services |\n| `utils/`, `widget/` | Shared utilities and custom Android views |\n\nFor design decisions, module boundaries, and known implementation details, start with the [project knowledge base](docs/knowledge/index.md).\n\n## Quick Start\n\n### Prerequisites\n\n- Android Studio (latest stable version recommended)\n- JDK 17\n- Android SDK 34\n- An Android device or emulator running Android 7.0 (API 24) or later\n\n### 1. Clone and open the project\n\nClone this repository, then open the root directory in Android Studio and wait for Gradle sync to finish.\n\n### 2. Configure the services\n\nUpdate `app/src/main/java/com/juggle/im/android/model/ConfigUtils.java`:\n\n| Field | Description |\n|---|---|\n| `appKey` | JuggleIM application key |\n| `appServerUrl` | Application backend base URL |\n| `imServer` | JuggleIM WebSocket server URL |\n| `zegoId` | ZEGO AppID used for audio/video calls |\n\nThe values committed to this repository are for demonstration and testing only. Use your own services, credentials, and signing configuration before distributing an app. Do not commit production secrets.\n\n### 3. Build and run\n\nRun the `app` configuration from Android Studio, or build a debug APK from the command line:\n\n```bash\n./gradlew :app:assembleDebug\n```\n\n## Development Commands\n\n| Command | Purpose |\n|---|---|\n| `./gradlew :app:assembleDebug` | Build a debug APK |\n| `./gradlew :app:assembleRelease` | Build a release APK |\n| `./gradlew :app:testDebugUnitTest` | Run unit tests |\n| `./gradlew :app:lintDebug` | Run Android Lint |\n\n## Frequently Asked Questions\n\n### Is JuggleChat a complete Android chat app or only an SDK sample?\n\nIt is a complete client-side reference app. It includes authentication screens, conversations, rich messages, contacts, group management, search, a social feed, and audio/video call UI. A compatible application backend, JuggleIM service, and ZEGO configuration are still required.\n\n### Can I use this project to build my own instant messaging app?\n\nYes. The project is intended for learning, SDK evaluation, prototyping, and secondary development. Before commercial use, review the licenses and terms of every SDK and service, replace all demo credentials, and complete your own privacy and security review.\n\n### Does the Android chat demo support group messaging and video calls?\n\nYes. It demonstrates one-to-one and group messaging plus one-to-one and multi-party audio/video calls.\n\n### Is the app written in Kotlin or Java?\n\nThe application code is written primarily in Java. This makes the repository useful to Android teams maintaining Java codebases or comparing Java integration patterns for an IM SDK.\n\n### What backend does JuggleChat need?\n\nThe client connects to an application HTTP backend for business data, JuggleIM for real-time messaging, and ZEGO for audio/video media. Configure these endpoints and credentials in `ConfigUtils.java`.\n\n## Contributing\n\nIssues and pull requests are welcome. When reporting a bug, include the Android version, device model, reproduction steps, expected result, and relevant logs. Keep changes focused and run the smallest relevant build, unit test, or lint task before submitting a pull request.\n\nIf this Android IM project helps you, consider starring the repository. Stars and detailed issue reports help more Android developers discover and improve JuggleChat.\n\n## Security and Production Use\n\n- Replace the example server endpoints, application keys, ZEGO AppID, and signing files.\n- Review notification, camera, microphone, media, and foreground-service permissions.\n- Add your own privacy policy, data-retention rules, and account-deletion flow where required.\n- Verify SDK licensing, service pricing, and regional compliance before commercial deployment.\n- Never treat the included demo configuration as a production security baseline.\n\n## Project Scope\n\nJuggleChat Android is maintained as a learning, evaluation, and secondary-development reference. It is not a hosted messaging service and does not replace the backend, operational monitoring, security hardening, or compliance work required by a production chat application.\n\n## License\n\nJuggleChat Android is licensed under the [Apache License 2.0](LICENSE).\n",
  "bytes": 8777,
  "sha": "fd94f700c17dd71111d5ccc17583488f7e2ce724e6c597903f00f8d14bc7d416",
  "repo_slug": "juggleim/jugglechat-android",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/okf_juggleim_jugglechat_android_docs_knowled_5510e1d2/readme"
}