因为依赖库打包AAR只会打包依赖库的代码,如果依赖库引用了其他东西则无法打包进去,所以会出现各种找不到类的问题.错误如下
解决办法:使用fat-aar-android 地址: github.com/kezong/fat-…
第一步:在工程根目录下的build.gradle
下添加如下代码:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.github.kezong:fat-aar:1.3.8'
}
}
第二步:在library
的build.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,可以强制设置依赖的版本号,所以问题解决!