Android应用开发:引入Twilio依赖后出现DexException问题求助
解决Twilio依赖引发的DexException: Multiple dex files定义重复类问题
嘿,我之前在集成Twilio的Android SDK时也碰到过一模一样的冲突问题,这本质是因为Twilio SDK自带的Apache HttpClient相关类,和你项目里其他依赖库引入的同模块类重复了,给你几个实用的解决办法:
排除Twilio依赖中的重复模块
直接在你的build.gradle(Module级别)里,给Twilio的依赖添加排除规则,去掉它自带的Apache HttpClient相关组件:implementation ('com.twilio:twilio-android:{你的SDK版本号}') { exclude group: 'org.apache.httpcomponents', module: 'httpclient' exclude group: 'org.apache.httpcomponents', module: 'httpcore' }这样就能避免Twilio和其他库的类重复定义问题。
启用MultiDex分包(针对低版本SDK)
如果你的应用minSdkVersion低于21,Android系统默认不支持多Dex文件,这时候启用MultiDex能让系统处理多个Dex文件:- 在Module的
build.gradle中开启MultiDex:android { defaultConfig { ... minSdkVersion 19 // 你的最低SDK版本 multiDexEnabled true } } dependencies { implementation 'com.android.support:multidex:1.0.3' // 或者对应AndroidX版本的multidex } - 自定义Application类继承
MultiDexApplication,或者在现有Application的attachBaseContext方法中添加:@Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); }
- 在Module的
排查项目中所有重复依赖
用Gradle的依赖分析命令,找出到底是哪个库和Twilio重复引入了Apache HttpClient:./gradlew app:dependencyInsight --dependency org.apache.httpcomponents --configuration debugCompileClasspath执行后会列出所有引入该组件的依赖,你可以选择排除其他库中的重复模块,或者替换掉冲突的旧库。
另外提一句,现在Android官方已经废弃了Apache HttpClient,建议尽量使用OkHttp这类现代网络库,如果你的Twilio SDK版本比较旧,可以考虑升级到最新版,新版本的Twilio SDK已经切换到OkHttp,从根源上避免这类冲突。
内容的提问来源于stack exchange,提问作者Shahzad Akhtar
相关产品推荐
相关产品推荐

