wildfirechat/android-chat

即时通讯,聊天,野火IM Android客户端,支持Android 4.x —— 最新

Java

2,732

2,350 commits

updated Oct 11, 2026

See the code

README

重要声明

因反诈合规要求,本项目协议栈默认仅支持连接野火官方服务,不能连接到自行部署的服务。请添加野火微信(wfchat 或 wildfirechat)免费申请临时版本和无限制版本,欢迎使用!

严禁将本项目用于非法诈骗。

联系官方获取到不受限版本后,请替换./mars-core-release/mars-core-release.aar文件,并 Clean 和 Rebuild


野火IM解决方案

野火IM是专业级即时通讯和实时音视频整体解决方案,由北京野火无限网络科技有限公司维护和支持。

主要特性有:私有部署安全可靠,性能强大,功能齐全,全平台支持,开源率高,部署运维简单,二次开发友好,方便与第三方系统对接或者嵌入现有系统中。详细情况请参考在线文档。

主要包括一下项目:

GitHub仓库地址(主站)码云仓库地址(镜像)说明备注
im-serverserverIM Server
android-chatandroid-chat野火IM Android SDK源码和App源码可以很方便地进行二次开发,或集成到现有应用当中
ios-chatios-chat野火IM iOS SDK源码和App源码可以很方便地进行二次开发,或集成到现有应用当中
pc-chatpc-chat基于Electron开发的PC 端
web-chatweb-chat野火IM Web 端, 体验地址
wx-chatwx-chat小程序平台的Demo(支持微信、百度、阿里、字节、QQ 等小程序平台)
app serverapp server应用服务端
robot_serverrobot_server机器人服务端
push_serverpush_server推送服务器
docsdocs野火IM相关文档,包含设计、概念、开发、使用说明,在线查看

说明

本工程为野火IM Android App,开发过程中,充分考虑了二次开发和集成需求,可作为SDK集成到其他应用中,或者直接进行二次开发。

开发一套IM系统真的很艰辛,请路过的朋友们给点个star,支持我们坚持下去🙏🙏🙏🙏🙏

关于包名/applicationId

  1. 开发者开发具体产品时,请勿直接使用本 demo 的包名/applicationId,我们会不定期修改包名/applicationId
  2. 禁止将本产品用于非法目的,一经发现,我们将停止任何形式的技术支持
  3. 修改包名时,会导致编译失败,需同步修改google-services.json和agconnect-services.json文件中的package_name字段。对接推送时,需要重新生成对应的google-services.json和agconnect-services.json文件。
  4. 如果需要修改client、mars-core-release或avenginekit.aar等的包名,请联系我们。

开发调试说明

  1. JDK: 17
  2. 我们采用最新稳定版Android Studio及对应的gradle进行开发,对于旧版本的IDE,我们没有测试,编译之类问题,需自行解决。

关于 minSdkVersion 设置为 21 时, debug 版 apk 可能不能进行音视频通话的特殊说明

  1. 关闭混淆时,命令行下,通过./gradlew clean aDebug 或 Android Studio 里面,通过 Build App Bundle(s)/APK(s) -> Build APK(s) 生成的 debug 版本 apk,不支持音视频通话,具体原因请参考useFullClasspathForDexingTransform
  2. 开启混淆,debug 版 apk 一切正常,将chat/build.gradle#buildTypes#debug#minifyEnabled置为 true,即为 debug 版也开启混淆
  3. 命令行下,通过./gradlew clean aR或 Android Studio 里面,通过Generate Signed App Bundle/APK...可生成 release 版 apk,release 版 apk,一切正常

二次开发说明

野火IM采用bugly作为日志手机工具,大家二次开发时,务必将MyApp.java中的 bugly id 替换为你们自己的,否则错误日志都跑我们这儿来了,你们收集不到错误日志,我们也会受到干扰。

混淆说明

  1. 确保所依赖的lifecycle版本在2.2.0或以上。
  2. 参考chat/proguard-rules.pro进行配置。

安全说明

为了方便开发者部署、测试,默认允许HTTP进行网络请求,为了提高安全性,上线之前,请进行以下操作:

  1. 为app-server配置HTTPS支持,并将APP_SERVER_ADDRESS配置为HTTPS地址
  2. 如果支持开放平台的话,为开发平台配置HTTPS支持,并将WORKSPACE_URL配置为HTTPS地址
  3. 如果支持组织结构的话,为组织结构服务配置HTTPS支持,并将ORG_SERVER_ADDRESS配置为HTTPS地址
  4. 将chat/src/main/AndroidManifest.xml中的android:usesCleartextTraffic置为false,并将chat/src/main/res/xml/network_security_config.xml中所有的cleartextTrafficPermitted置为false。配置了network_security_config.xml后,Android 7.0 及以上以它为准,usesCleartextTraffic不再生效
  5. 更多安全说明,请参考野火安全吗

自签证书说明

自建服务(IM 服务、应用服务、组织通讯录、对象存储等)使用自签名证书时,按以下步骤配置:

  1. 放置证书:将证书放到client/src/main/assets/certs目录,可以放多个,文件名不限,如server.crt

    • 放 CA 证书或服务端证书本身均可,只放证书,不要放私钥
    • 必须是 PEM 格式,即以-----BEGIN CERTIFICATE-----开头的文本文件。DER 格式的证书请先转换:openssl x509 -inform der -in server.der -out server.crt
    • 这一份证书由协议栈、OkHttp(应用服务、组织通讯录、投票、收藏、归档、上传、下载、语音识别等)、Glide 图片加载、WebView(工作台、链接)共用,不需要再放到其他地方。没有证书时,全部使用系统默认配置
    • 更换证书时,请使用新的文件名,或者卸载重装。协议栈使用的是首次运行时拷贝到 App 私有目录的证书,同名文件不会重新拷贝
  2. 配置 network_security_config.xml:修改chat/src/main/res/xml/network_security_config.xml中的domain-config,把使用自签证书的服务地址都列出来:

    <domain-config cleartextTrafficPermitted="true">
        <!-- 改成你自己的服务地址,域名或 IP 均可,不带 http(s):// 和端口,多个地址写多行 -->
        <domain includeSubdomains="true">example.com</domain>
        <domain includeSubdomains="false">192.168.1.100</domain>
        <trust-anchors>
            <certificates src="system" />
            <certificates src="@raw/wfc_self_signed_ca" />
        </trust-anchors>
    </domain-config>
    
    • @raw/wfc_self_signed_ca由chat/build.gradle中的mergeSelfSignedCerts任务在编译时根据assets/certs自动生成,不需要手工拷贝证书到res/raw
    • OkHttp、Glide、WebView 已经直接使用assets/certs中的证书,不依赖这里的地址列表。这里主要是给视频在线播放(MediaPlayer)等无法单独配置证书的组件用的
    • 修改服务地址后,这里要同步修改,否则上述组件会报Trust anchor for certification path not found
  3. 协议栈:IM 连接要使用 TLS 时,需要打开ClientService#initProto中被注释的代码,仅 2026.9.11 之后的 IM 服务支持:

    String[] certs = copyCerts(SelfSignedCertUtils.CERT_DIR_NAME);
    ProtoLogic.setUseWebsocket(true);
    // 第一个参数是是否跳过证书验证,第二个参数是证书文件列表
    ProtoLogic.useTls(false, certs);
    
  4. 以 SDK 方式集成时:将证书放到自己 App 的src/main/assets/certs目录,自己创建的网络请求通过SelfSignedCertUtils信任这些证书:

    • OkHttp:SelfSignedCertUtils.trustSelfSignedCerts(context, okHttpClientBuilder)
    • HttpURLConnection:SelfSignedCertUtils.trustSelfSignedCerts(context, connection),需要在连接之前调用
    • WebView:在WebViewClient#onReceivedSslError中,SelfSignedCertUtils.isTrustedBySelfSignedCerts(context, error)返回true时才调用handler.proceed(),否则按默认处理
    • 视频在线播放等组件也需要信任自签证书时,参考 demo 的network_security_config.xml和mergeSelfSignedCerts任务进行配置
  5. 注意事项

    • 只要证书链能追溯到assets/certs中的证书,OkHttp、Glide、WebView 都会跳过域名校验,以兼容没有写 subjectAltName 的自签证书。系统 CA 签发的证书仍然严格校验域名。请妥善保管自签 CA 的私钥
    • 推荐签发证书时把服务的域名和 IP 都写进 subjectAltName。network_security_config.xml不会放松域名校验,视频在线播放等组件要求证书的域名或 IP 必须匹配
    • WebView 只能拿到服务端证书本身,所以只支持服务端证书就是assets/certs中的证书,或者由其直接签发的情况

敏感权限说明

  1. android.permission.PROCESS_OUTGOING_CALLS,音视频通话时,允许普通电话打断音视频通话,默认未申请
  2. android.permission.SYSTEM_ALERT_WINDOW,允许音视频通话窗口最小化,并悬浮在其他窗口之上
  3. android.permission.BLUETOOTH、android.permission.BLUETOOTH_ADMIN,音视频通话时,允许使用蓝牙耳机

Android 4.x 说明

请使用api-19分支,如果编译失败等,可能是4.x版本的协议栈版本没有及时更新所导致,请微信联系 wfchat 进行更新。

联系我们

商务合作请优先采用邮箱和我们联系。技术问题请到野火IM论坛发帖交流。

  1. heavyrain.lee 邮箱: [email protected] 微信:wildfirechat
  2. imndx 邮箱: [email protected] 微信:wfchat

问题交流

  1. 如果大家发现bug,请在GitHub提issue
  2. 其他问题,请到野火IM论坛进行交流学习
  3. 微信公众号

强烈建议关注我们的公众号。我们有新版本发布或者有重大更新会通过公众号通知大家,另外我们也会不定期的发布一些关于野火IM的技术介绍。

体验Demo

我们提供了体验demo,请使用微信扫码下载安装体验

野火IM

应用截图

点击查看 Android Demo 视频演示

集成

  1. client部分,自行下载代码,并将client module引入你们自己的项目。
  2. uikit部分,自行下载代码,并将uikit module引入你们自己的项目。
  3. push部分,自行下载代码,将push module引入你们自己的项目。

推送

当应用在后台后,不同手机厂家有着不同的后台策略,可能很快或者最终会被冻结和杀掉,此时收到消息需要厂商的推送通知服务。请部署推送服务,推送服务代码可以在Github和码云下载。具体使用方式,请参考推送服务项目上的说明。

贡献

欢迎提交pull request,一起打造一个更好的开源IM。

鸣谢

  1. LQRWeChat 本项目中图片选择器、表情基于此开发
  2. butterKnife
  3. OKHttp等一些其他优秀的开源项目
  4. 本工程使用的Icon全部来源于icons8,对他们表示感谢。
  5. Gif动态图来源于网络,对网友的制作表示感谢。

如果有什么地方侵犯了您的权益,请联系我们删除🙏🙏🙏

License

  1. Under the Creative Commons Attribution-NoDerivs 3.0 Unported license. See the LICENSE file for details.
chat
im
voip

wildfirechat/android-chat

即时通讯,聊天,野火IM Android客户端,支持Android 4.x —— 最新

Java

2,732

2,350 commits

updated Oct 11, 2026

See the code

README

重要声明

因反诈合规要求,本项目协议栈默认仅支持连接野火官方服务,不能连接到自行部署的服务。请添加野火微信(wfchat 或 wildfirechat)免费申请临时版本和无限制版本,欢迎使用!

严禁将本项目用于非法诈骗。

联系官方获取到不受限版本后,请替换./mars-core-release/mars-core-release.aar文件,并 Clean 和 Rebuild


野火IM解决方案

野火IM是专业级即时通讯和实时音视频整体解决方案,由北京野火无限网络科技有限公司维护和支持。

主要特性有:私有部署安全可靠,性能强大,功能齐全,全平台支持,开源率高,部署运维简单,二次开发友好,方便与第三方系统对接或者嵌入现有系统中。详细情况请参考在线文档。

主要包括一下项目:

GitHub仓库地址(主站)码云仓库地址(镜像)说明备注
im-serverserverIM Server
android-chatandroid-chat野火IM Android SDK源码和App源码可以很方便地进行二次开发,或集成到现有应用当中
ios-chatios-chat野火IM iOS SDK源码和App源码可以很方便地进行二次开发,或集成到现有应用当中
pc-chatpc-chat基于Electron开发的PC 端
web-chatweb-chat野火IM Web 端, 体验地址
wx-chatwx-chat小程序平台的Demo(支持微信、百度、阿里、字节、QQ 等小程序平台)
app serverapp server应用服务端
robot_serverrobot_server机器人服务端
push_serverpush_server推送服务器
docsdocs野火IM相关文档,包含设计、概念、开发、使用说明,在线查看

说明

本工程为野火IM Android App,开发过程中,充分考虑了二次开发和集成需求,可作为SDK集成到其他应用中,或者直接进行二次开发。

开发一套IM系统真的很艰辛,请路过的朋友们给点个star,支持我们坚持下去🙏🙏🙏🙏🙏

关于包名/applicationId

  1. 开发者开发具体产品时,请勿直接使用本 demo 的包名/applicationId,我们会不定期修改包名/applicationId
  2. 禁止将本产品用于非法目的,一经发现,我们将停止任何形式的技术支持
  3. 修改包名时,会导致编译失败,需同步修改google-services.json和agconnect-services.json文件中的package_name字段。对接推送时,需要重新生成对应的google-services.json和agconnect-services.json文件。
  4. 如果需要修改client、mars-core-release或avenginekit.aar等的包名,请联系我们。

开发调试说明

  1. JDK: 17
  2. 我们采用最新稳定版Android Studio及对应的gradle进行开发,对于旧版本的IDE,我们没有测试,编译之类问题,需自行解决。

关于 minSdkVersion 设置为 21 时, debug 版 apk 可能不能进行音视频通话的特殊说明

  1. 关闭混淆时,命令行下,通过./gradlew clean aDebug 或 Android Studio 里面,通过 Build App Bundle(s)/APK(s) -> Build APK(s) 生成的 debug 版本 apk,不支持音视频通话,具体原因请参考useFullClasspathForDexingTransform
  2. 开启混淆,debug 版 apk 一切正常,将chat/build.gradle#buildTypes#debug#minifyEnabled置为 true,即为 debug 版也开启混淆
  3. 命令行下,通过./gradlew clean aR或 Android Studio 里面,通过Generate Signed App Bundle/APK...可生成 release 版 apk,release 版 apk,一切正常

二次开发说明

野火IM采用bugly作为日志手机工具,大家二次开发时,务必将MyApp.java中的 bugly id 替换为你们自己的,否则错误日志都跑我们这儿来了,你们收集不到错误日志,我们也会受到干扰。

混淆说明

  1. 确保所依赖的lifecycle版本在2.2.0或以上。
  2. 参考chat/proguard-rules.pro进行配置。

安全说明

为了方便开发者部署、测试,默认允许HTTP进行网络请求,为了提高安全性,上线之前,请进行以下操作:

  1. 为app-server配置HTTPS支持,并将APP_SERVER_ADDRESS配置为HTTPS地址
  2. 如果支持开放平台的话,为开发平台配置HTTPS支持,并将WORKSPACE_URL配置为HTTPS地址
  3. 如果支持组织结构的话,为组织结构服务配置HTTPS支持,并将ORG_SERVER_ADDRESS配置为HTTPS地址
  4. 将chat/src/main/AndroidManifest.xml中的android:usesCleartextTraffic置为false,并将chat/src/main/res/xml/network_security_config.xml中所有的cleartextTrafficPermitted置为false。配置了network_security_config.xml后,Android 7.0 及以上以它为准,usesCleartextTraffic不再生效
  5. 更多安全说明,请参考野火安全吗

自签证书说明

自建服务(IM 服务、应用服务、组织通讯录、对象存储等)使用自签名证书时,按以下步骤配置:

  1. 放置证书:将证书放到client/src/main/assets/certs目录,可以放多个,文件名不限,如server.crt

    • 放 CA 证书或服务端证书本身均可,只放证书,不要放私钥
    • 必须是 PEM 格式,即以-----BEGIN CERTIFICATE-----开头的文本文件。DER 格式的证书请先转换:openssl x509 -inform der -in server.der -out server.crt
    • 这一份证书由协议栈、OkHttp(应用服务、组织通讯录、投票、收藏、归档、上传、下载、语音识别等)、Glide 图片加载、WebView(工作台、链接)共用,不需要再放到其他地方。没有证书时,全部使用系统默认配置
    • 更换证书时,请使用新的文件名,或者卸载重装。协议栈使用的是首次运行时拷贝到 App 私有目录的证书,同名文件不会重新拷贝
  2. 配置 network_security_config.xml:修改chat/src/main/res/xml/network_security_config.xml中的domain-config,把使用自签证书的服务地址都列出来:

    <domain-config cleartextTrafficPermitted="true">
        <!-- 改成你自己的服务地址,域名或 IP 均可,不带 http(s):// 和端口,多个地址写多行 -->
        <domain includeSubdomains="true">example.com</domain>
        <domain includeSubdomains="false">192.168.1.100</domain>
        <trust-anchors>
            <certificates src="system" />
            <certificates src="@raw/wfc_self_signed_ca" />
        </trust-anchors>
    </domain-config>
    
    • @raw/wfc_self_signed_ca由chat/build.gradle中的mergeSelfSignedCerts任务在编译时根据assets/certs自动生成,不需要手工拷贝证书到res/raw
    • OkHttp、Glide、WebView 已经直接使用assets/certs中的证书,不依赖这里的地址列表。这里主要是给视频在线播放(MediaPlayer)等无法单独配置证书的组件用的
    • 修改服务地址后,这里要同步修改,否则上述组件会报Trust anchor for certification path not found
  3. 协议栈:IM 连接要使用 TLS 时,需要打开ClientService#initProto中被注释的代码,仅 2026.9.11 之后的 IM 服务支持:

    String[] certs = copyCerts(SelfSignedCertUtils.CERT_DIR_NAME);
    ProtoLogic.setUseWebsocket(true);
    // 第一个参数是是否跳过证书验证,第二个参数是证书文件列表
    ProtoLogic.useTls(false, certs);
    
  4. 以 SDK 方式集成时:将证书放到自己 App 的src/main/assets/certs目录,自己创建的网络请求通过SelfSignedCertUtils信任这些证书:

    • OkHttp:SelfSignedCertUtils.trustSelfSignedCerts(context, okHttpClientBuilder)
    • HttpURLConnection:SelfSignedCertUtils.trustSelfSignedCerts(context, connection),需要在连接之前调用
    • WebView:在WebViewClient#onReceivedSslError中,SelfSignedCertUtils.isTrustedBySelfSignedCerts(context, error)返回true时才调用handler.proceed(),否则按默认处理
    • 视频在线播放等组件也需要信任自签证书时,参考 demo 的network_security_config.xml和mergeSelfSignedCerts任务进行配置
  5. 注意事项

    • 只要证书链能追溯到assets/certs中的证书,OkHttp、Glide、WebView 都会跳过域名校验,以兼容没有写 subjectAltName 的自签证书。系统 CA 签发的证书仍然严格校验域名。请妥善保管自签 CA 的私钥
    • 推荐签发证书时把服务的域名和 IP 都写进 subjectAltName。network_security_config.xml不会放松域名校验,视频在线播放等组件要求证书的域名或 IP 必须匹配
    • WebView 只能拿到服务端证书本身,所以只支持服务端证书就是assets/certs中的证书,或者由其直接签发的情况

敏感权限说明

  1. android.permission.PROCESS_OUTGOING_CALLS,音视频通话时,允许普通电话打断音视频通话,默认未申请
  2. android.permission.SYSTEM_ALERT_WINDOW,允许音视频通话窗口最小化,并悬浮在其他窗口之上
  3. android.permission.BLUETOOTH、android.permission.BLUETOOTH_ADMIN,音视频通话时,允许使用蓝牙耳机

Android 4.x 说明

请使用api-19分支,如果编译失败等,可能是4.x版本的协议栈版本没有及时更新所导致,请微信联系 wfchat 进行更新。

联系我们

商务合作请优先采用邮箱和我们联系。技术问题请到野火IM论坛发帖交流。

  1. heavyrain.lee 邮箱: [email protected] 微信:wildfirechat
  2. imndx 邮箱: [email protected] 微信:wfchat

问题交流

  1. 如果大家发现bug,请在GitHub提issue
  2. 其他问题,请到野火IM论坛进行交流学习
  3. 微信公众号

强烈建议关注我们的公众号。我们有新版本发布或者有重大更新会通过公众号通知大家,另外我们也会不定期的发布一些关于野火IM的技术介绍。

体验Demo

我们提供了体验demo,请使用微信扫码下载安装体验

野火IM

应用截图

点击查看 Android Demo 视频演示

集成

  1. client部分,自行下载代码,并将client module引入你们自己的项目。
  2. uikit部分,自行下载代码,并将uikit module引入你们自己的项目。
  3. push部分,自行下载代码,将push module引入你们自己的项目。

推送

当应用在后台后,不同手机厂家有着不同的后台策略,可能很快或者最终会被冻结和杀掉,此时收到消息需要厂商的推送通知服务。请部署推送服务,推送服务代码可以在Github和码云下载。具体使用方式,请参考推送服务项目上的说明。

贡献

欢迎提交pull request,一起打造一个更好的开源IM。

鸣谢

  1. LQRWeChat 本项目中图片选择器、表情基于此开发
  2. butterKnife
  3. OKHttp等一些其他优秀的开源项目
  4. 本工程使用的Icon全部来源于icons8,对他们表示感谢。
  5. Gif动态图来源于网络,对网友的制作表示感谢。

如果有什么地方侵犯了您的权益,请联系我们删除🙏🙏🙏

License

  1. Under the Creative Commons Attribution-NoDerivs 3.0 Unported license. See the LICENSE file for details.
chat
im
voip

Project health

Overall

2.6/10

Maintained

10/10

Code review

0/10
OpenSSF Scorecard

Significant stargazers

rongtong

260 followers · starred May 2020

tianma-if

58 followers · starred Feb 2020