Android:项目引入module导致Duplicate class....或Program type already present okhttp3 OkUrlFactory

异常背景:

为实现项目模块化设计,今天我在主项目中将我现在的某一模块以module形式导入,但导入后编译过程中出现异常,具体过程如下。


1.首先报了类资源重复的问题,此问题是由于我的module中依赖的jar包(fastjson-1.2.54.jar)与主项目中依赖的类似jar包(或其他jar包中有引用类似jar包)。

Duplicate class com.alibaba.fastjson.JSON found in modules fastjson-1.2.35.jar (com.alibaba:fastjson:1.2.35) and fastjson-1.2.54.jar (fastjson-1.2.54.jar)

(为了具体看到是主项目中哪个依赖导致引用重复,在android studio的terminal中执行gradlew :app:dependencies,可以看到在主项目的aliyun-log-android-sdk:0.4.0中有同样引用)

解决办法:

方法一、

将module中bulid.gradle的依赖引用方式改为compileOnly,若是本地文件改为compileOnly files。网上很多说在主项目中更改是不对的。

compileOnly files('libs/fastjson-1.2.54.jar')

方法二、

在主项目bulid.gradle中通过configurations忽略编译过程中的依赖检查。

在bulid.gradle的android 配置中添加:

(1)configurations{

...

all*exclude group: 'fastjson-1.2.54.jar',moudle '此处为我的module名'

}

(2)defaultConfig{

multiDexEnabled true

}

(注意:以上方法仅能保证编译通过,但compileonly等修饰的库不会一块打包进APK。所以若在module中使用的某动态库版本方法在项目的另一库文件中不存在的话,程序运行时会报异常(不存在该方法等)!!所以最好的办法,我目前所知的是能用同一版本动态库(jar包等)尽量用同一版本)

2.把上述问题排除后再次编译,又报了如下错误:

Program type already present okhttp3 OkUrlFactory

其实此错误原因还是由于主项目与module中应用了具有相同类的资源文件,同样按照上述方法解决即可,即将我的module中的okhttp依赖应用改为:

   compileOnly files('libs/okhttp-3.10.0.jar')

以上,希望我的经验能帮到你。

 

 

 

你可能感兴趣的:(Android:项目引入module导致Duplicate class....或Program type already present okhttp3 OkUrlFactory)