解决module打包成aar后,依赖的第三方库丢失,导致报错

1,932 阅读1分钟

因为依赖库打包AAR只会打包依赖库的代码,如果依赖库引用了其他东西则无法打包进去,所以会出现各种找不到类的问题.错误如下

1.jpg

解决办法:使用fat-aar-android 地址: github.com/kezong/fat-…

第一步:在工程根目录下的build.gradle下添加如下代码:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.github.kezong:fat-aar:1.3.8'
    }
}

第二步:在librarybuild.gradle中,添加如下代码

apply plugin: 'com.kezong.fat-aar'

第三步:将implementation或者api改成embed

dependencies {
    implementation fileTree(dir: 'libs', include: '*.jar')
    // java dependency
    embed project(path: ':lib-java', configuration: 'default')
    // aar dependency
    embed project(path: ':lib-aar', configuration: 'default')
    // aar dependency
    embed project(path: ':lib-aar2', configuration: 'default')
    // local full aar dependency, just build in flavor1
    flavor1Embed project(path: ':lib-aar-local', configuration: 'default')
    // local full aar dependency, just build in debug
    debugEmbed(name: 'lib-aar-local2', ext: 'aar')
    // remote jar dependency
    embed 'com.google.guava:guava:20.0'
    // remote aar dependency
    embed 'com.facebook.fresco:fresco:1.12.0'
    // don't want to embed in
    implementation('androidx.appcompat:appcompat:1.2.0')
}

很简单,没冲突,这样就完成了。

第四步:解决依赖版本冲突:

android {  
   configurations.all {
     resolutionStrategy.force 'androidx.appcompat:appcompat:1.2.0'
     resolutionStrategy.force 'com.google.android.material:material:1.2.1'
     resolutionStrategy.force 'androidx.constraintlayout:constraintlayout:2.0.4'
     resolutionStrategy.force 'io.reactivex.rxjava2:rxandroid:2.0.2'
     resolutionStrategy.force 'io.reactivex.rxjava2:rxjava:2.2.5'
     resolutionStrategy.force 'com.squareup.retrofit2:retrofit:2.9.0'
     resolutionStrategy.force 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'
     resolutionStrategy.force 'com.squareup.retrofit2:converter-gson:2.9.0'
     resolutionStrategy.force 'com.squareup.okhttp3:logging-interceptor:3.9.1'
     resolutionStrategy.force 'com.squareup.retrofit2:adapter-rxjava2:2.5.0'
     resolutionStrategy.force 'pub.devrel:easypermissions:2.0.1'
     resolutionStrategy.force 'com.airbnb.android:lottie:3.4.0'
   }
 }

引用的远程依赖跟我本地的依赖出现了冲突,configurations.all,可以强制设置依赖的版本号,所以问题解决!