Android及混编Flutter三方库重复及引用解决

1、重复引用三方包冲突

如果是本项目引用同一个包的不同版本报错,去掉其中一个版本即可。

2、本项目与三方包引用冲突

情景:自身项目使用了rxjava 2.1,引用了一个三方库,该库使用了rxjava1.1,造成包冲突。这里是重复引用了RxJava,报错:

Duplicate files copied in APK META-INF/rxjava.properties
File1: /Users/apple/.gradle/caches/modules-2/files-2.1/io.reactivex.rxjava2/rxjava/2.1.3/c6a633c63607f09f77f424b5c52522a7607cedae/rxjava-2.1.3.jar
File2: /Users/apple/.gradle/caches/modules-2/files-2.1/io.reactivex/rxjava/1.1.6/2586312cd2b8a511e4c6236736f5a039fc0f2273/rxjava-1.1.6.jar

解决方案:在build.gradle => android节点下添加:

packagingOptions {
        exclude 'META-INF/rxjava.properties'
        // ... and any other excludes go here
    }

其他库冲突同理。

2、Android混编Flutter包冲突

情景:Android集成了Flutter混编,Android中使用了zxing,而Flutter部分使用了qrcode包,该包android部分也是使用zxing实现的,所以产生冲突。报错如下:

Duplicate class com.google.zxing.BarcodeFormat found in modules core-3.3.0.jar (com.google.zxing:core:3.3.0) and core-3.3.2-SNAPSHOT.jar (core-3.3.2-SNAPSHOT.jar)

系统查找这个类在两个地方发现了不同的版本,而因为项目需求,这两个部分都必须存在(要求Android与Flutter部分既能分开打包运行也能合并运行)。所以不能去除其中之一。

解决办法:
找到Android代码中的qrcode这个model,打开build.gradle



发现其中引用了zxing



将implementation替换为provided,以provided的方式参与编译。这样在App就只能访问到Android项目里的zxing包了,qrcode modle中的zxing包仅供自己访问。
修改后可能出现问题:

WARNING: Configuration 'provided' is obsolete and has been replaced with 'compileOnly'.
It will be removed at the end of 2018

按照提示将provided替换为compileOnly即可。

3、support包冲突

support包版本混乱,自身项目引用,不同三方库也可能引用不同的版本,首先推荐使用androidX,当然非要继续用support包也需要解决这个问题。直接强制使用固定的support包版本即可。
在build.gradle => android节点下配置:

   configurations.all {
        resolutionStrategy.eachDependency { DependencyResolveDetails details ->
            def requested = details.requested
            if (requested.group == 'com.android.support') {
                if (!requested.name.startsWith("multidex")) {
                    details.useVersion '25.4.0'
                }
            }
        }
    }

你可能感兴趣的:(Android及混编Flutter三方库重复及引用解决)