组件导入
更新时间: 2024/09/27 10:50:00
IM UIKit (Android) 采用 Gradle 进行构建,您可以采用添加远端仓库依赖或者本地代码依赖的方式,将所需组件快速导入到您的项目中。
- 添加远端仓库依赖:适用于采用 IM UIKit 默认界面的集成。
- 添加本地代码依赖:适用于通过 IM UIKit 进行界面自定义的集成。
开发环境要求
已准备如下开发环境/工具:
- Android Studio Bumblebee
- Java 11
- Gradle 7.4.1
- Android Gradle Plugin 7.1.3
- Android v7.0 及以上版本
实现流程
方式1:添加远端仓库依赖
本节以会话列表组件为例,介绍如何采用添加远端依赖的方式,将该组件导入到您的项目中,进行项目构建。
-
在 app 目录下的
build.gradle
中添加远端依赖。java
dependencies { //通讯录组件 api 'com.netease.yunxin.kit.contact:contactkit-ui:${LATEST_VERSION}' //会话列表组件 api 'com.netease.yunxin.kit.conversation:conversationkit-ui:${LATEST_VERSION}' //群组设置组件 api 'com.netease.yunxin.kit.team:teamkit-ui:${LATEST_VERSION}' //会话消息组件(聊天界面,包括单聊和群聊) api 'com.netease.yunxin.kit.chat:chatkit-ui:${LATEST_VERSION}' //位置消息模块 api 'com.netease.yunxin.kit.locationkit:locationkit:${LATEST_VERSION}' }
如果是 kotlin 脚本配置,在应用根目录下,打开
build.gradle.kts
,声明云信 IM UIKit 代码仓库。java
dependencies { api("com.netease.yunxin.kit.contact:contactkit-ui:${LATEST_VERSION}") api("com.netease.yunxin.kit.conversation:conversationkit-ui:${LATEST_VERSION}") api("com.netease.yunxin.kit.team:teamkit-ui:${LATEST_VERSION}") api("com.netease.yunxin.kit.chat:chatkit-ui:${LATEST_VERSION}") api("com.netease.yunxin.kit.locationkit:locationkit:${LATEST_VERSION}") }
- 引入圈组组件前需确保已联系商务经理开通圈组功能,否则将报 403 错误码。
- 上述示例代码中的
${LATEST_VERSION}
表示版本号,仅用于示例。
-
在项目根目录下,打开
gradle.propertes
, 修改资源依赖配置。java
android.nonTransitiveRClass=false
如果导入之后,出现资源找不到的问题,请修改此处配置。
IM UIKit 模块化设计,所以存在资源依赖,以减少包体积。
方式2:添加本地代码依赖
本节介绍如何通过添加本地代码依赖的方式,将所需的 IM UIKit 组件导入到您的项目。
-
前往云信开源代码仓库,下载
nim-uikit-android
源码组件到本地。 -
在 Android Studio 中打开工程后,依次点击 File > New > Import Module,选择您需要的组件导入,或者将组件直接复制到您的项目中。
开源工程中包括的源码组件如下:
组件 说明 chatkit-ui
会话消息组件(聊天界面,包括单聊和群聊) conversationkit-ui
会话列表组件 contactkit-ui
通讯录组件 teamkit-ui
群组设置组件 locationkit
地图消息组件 -
在项目根目录下,打开
gradle.propertes
, 修改属性资源依赖配置。java
android.nonTransitiveRClass=false
如果导入之后,出现资源找不到的问题,请修改此处配置。
IM UIKit 模块化设计,所以存在公共资源依赖,以减少包体积。
-
在 Android Studio 项目根目录下,打开
settings.gradle
,添加依赖组件。如果第 2 步操作采用导入方式,会自动添加依赖组件,此时只需要检查即可。
java
include ':app' //添加您需要的组件即可 include ':contactkit-ui' include ':chatkit-ui'
如果是 kotlin 脚本配置,在项目根目录下,打开
settings.gradle.kts
,进行添加。kotlin
include(":app") include(":conversationkit-ui") include(":teamkit-ui") include(":contactkit-ui") include(":chatkit-ui") include(":locationkit")
-
在 Android Studio 项目应用目录下,打开
app/build.gradle
,添加依赖组件。java
//添加您需要的组件即可 api(project(":contactkit-ui")) api(project(":conversationkit-ui")) api(project(":teamkit-ui")) api(project(":chatkit-ui")) api(project(":locationkit"))
-
(可选)源码依赖处理冗余文件,减少资源引入。
云信 IM UIKit 提供两套风格的 UI 组件库,可任意选择一种使用。确定后,可移除另一套 UI 组件相关文件,以减小包体积。可删除的文件如下:
-
代码文件:在各个模块中,根目录下有 normal 和 fun 文件夹,分别用于存放所有与基础版 UI 相关的文件和所有与通用版 UI 相关的文件。可直接删除您不需要的 UI 版本目录。
//以 chatkit.ui 模块为例,目录如下 com.netease.yunxin.kit.chatkit.ui -normal 基础版 UI -fun 通用版 UI
-
资源文件:在各个模块的 main 目录中,分别有 res-normal 和 res-fun 文件夹。可直接删除您不需要的 UI 版本目录。
同时在 build.gradle 中移除对应的编译资源目录。
android { buildFeatures { viewBinding = true } //如果使用通用版本则,删除"src/main/res-normal"。如果使用基础版则移除"src/main/res-fun" sourceSets["main"].res.srcDirs("src/main/res","src/main/res-fun","src/main/res-normal") }
对应 UI 版本的路由注册代码需要单独移除。(以
chatkit-ui
为例,contactkit-ui
、conversationkit-ui
、teamkit-ui
同理。)在
chatkit-ui
包的ChatUIService
中移除您不需要的 UI 版本路由注册代码。单击查看示例
public ChatService create(@NonNull Context context) { // 基础版路由 如果使用通用版本则删除该部分 XKitRouter.registerRouter(RouterConstant.PATH_CHAT_P2P_PAGE, ChatP2PActivity.class); XKitRouter.registerRouter(RouterConstant.PATH_CHAT_TEAM_PAGE, ChatTeamActivity.class); XKitRouter.registerRouter(RouterConstant.PATH_CHAT_SEARCH_PAGE, ChatSearchActivity.class); XKitRouter.registerRouter(RouterConstant.PATH_CHAT_LOCATION_PAGE, LocationPageActivity.class); XKitRouter.registerRouter(RouterConstant.PATH_CHAT_PIN_PAGE, ChatPinActivity.class); XKitRouter.registerRouter(RouterConstant.PATH_CHAT_SETTING_PAGE, ChatSettingActivity.class); XKitRouter.registerRouter(RouterConstant.PATH_CHAT_ACK_PAGE, ChatReaderActivity.class); //基础版路由结束 // 通用版路由 如果使用基础版本则删除该部分 XKitRouter.registerRouter(RouterConstant.PATH_FUN_CHAT_P2P_PAGE, FunChatP2PActivity.class); XKitRouter.registerRouter(RouterConstant.PATH_FUN_CHAT_TEAM_PAGE, FunChatTeamActivity.class); XKitRouter.registerRouter( RouterConstant.PATH_FUN_CHAT_SEARCH_PAGE, FunChatSearchActivity.class); XKitRouter.registerRouter(RouterConstant.PATH_CHAT_LOCATION_PAGE, LocationPageActivity.class); XKitRouter.registerRouter(RouterConstant.PATH_FUN_CHAT_PIN_PAGE, FunChatPinActivity.class); XKitRouter.registerRouter( RouterConstant.PATH_FUN_CHAT_READER_PAGE, FunChatReaderActivity.class); XKitRouter.registerRouter( RouterConstant.PATH_FUN_CHAT_SETTING_PAGE, FunChatSettingActivity.class); //通用版路由结束 //以下内容不可删除 chatKitInit(context); registerSendTeamTips(); registerAitNotifyTrigger(); registerSendText(); IMKitClient.registerInitService(new ChatUIInitService()); return this; }
-
防止代码混淆
代码混淆是指使用简短无意义的名称重命名已存在的类、方法、属性等,增加逆向工程的难度,保障 Android 程序源码的安全性。
为了避免因上述的重命名而导致调用 IM UIKit 异常,请在 proguard-rules.pro 文件中加入以下代码,将 NIM SDK 和 IM UIKit 的相关类加入不混淆名单。
java## NIM SDK 防混淆
-dontwarn com.netease.nim.**
-keep class com.netease.nim.** {*;}
-dontwarn com.netease.nimlib.**
-keep class com.netease.nimlib.** {*;}
-dontwarn com.netease.share.**
-keep class com.netease.share.** {*;}
-dontwarn com.netease.mobsec.**
-keep class com.netease.mobsec.** {*;}
## 如果你使用全文检索插件,需要加入
-dontwarn org.apache.lucene.**
-keep class org.apache.lucene.** {*;}
## IM UIKit 防混淆
-dontwarn com.netease.yunxin.kit.**
-keep class com.netease.yunxin.kit.** {*;}
-keep public class * extends com.netease.yunxin.kit.corekit.XKitInitOptions
-keep class * implements com.netease.yunxin.kit.corekit.XKitService {*;}
## 呼叫组件防混淆
-keep class com.netease.lava.** {*;}
-keep class com.netease.yunxin.** {*;}
-dontwarn com.netease.yunxin.kit.**
-keep class com.netease.yunxin.kit.** {*;}
-keep public class * extends com.netease.yunxin.kit.corekit.XKitInitOptions
-keep class * implements com.netease.yunxin.kit.corekit.XKitService {*;}
## glide 4
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public class * extends com.bumptech.glide.module.AppGlideModule
-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
**[] $VALUES;
public *;
}
## okhttp
-dontwarn okhttp3.**
-keep class okhttp3.**{*;}
## 如果你使用全文检索插件,需要加入
-dontwarn org.apache.lucene.**
-keep class org.apache.lucene.** {*;}
## 如果你开启数据库功能,需要加入
-keep class net.sqlcipher.** {*;}
后续步骤
导入组件后,需进行初始化。
相关参考
常见问题排查
集成过程中的常见问题的排查说明,请参见IM UIKit 常见问题排查。