Android Studio 打包aar丢失远程依赖问题解决

问题出现原因

最近有写sdk的需求

打包aar -> 新建项目 -> 引入aar -> 编译运行

结果奔溃了!!!

原因是:class not found. 其实就是打包aar的时候远程依赖没有被添加到aar中。

所以把aar需要的远程依赖,添加一份到app的gradle文件就好了。

当然这样做效果不好 (手动deog) 所以有了以下两个解决方案。

方案一,生成本地Meven库,然后引用本地依赖

实现:

第一步 在labray的gradl中添加代码,以下四个参数根据自己的情况来写

apply plugin: 'maven'

uploadArchives {
    repositories {
        mavenDeployer {
            //本地maven仓库地址,我是放在D盘的AAR文件中了
            repository(url: "file://d://AAR")
            //生成本地aar的包名
            pom.groupId = 'com.gago.draw'
            //名称
            pom.artifactId = 'easy-draw'
            //版本号
            pom.version = '1.0.0'
        }
    }
}

第二步生成本地Maven库

使用gradle插件:upload/uploadArchives 生成aar以及其他文件

Android Studio 打包aar丢失远程依赖问题解决_第1张图片

 BUILD SUCCESSFUL in 15s
 25 actionable tasks: 14 executed, 11 up-to-date
 14:10:08: Task execution finished 'uploadArchives'.

编译了一会,成功之后可以看到,第一步配置的路径会生成一些文件。

Android Studio 打包aar丢失远程依赖问题解决_第2张图片

我们打开easy-draw-1.0.0.pom,如图所示,我们可以发现里面包含了aar所需的全部依赖

那既然依赖配置生成到了别的文件,那只把aar放到libs里肯定是不行的啦!!!

Android Studio 打包aar丢失远程依赖问题解决_第3张图片

第三步给需要使用aar的项目,配置本地Maven库

在根目录的gradle的repositories中添加以下代码

repositories{
    //第一步中配置的maven仓库地址
    maven{url "file://d://AAR"}
}    

随后在app的gradle中添加本地依赖

//格式 : pom.groupId : pom.artifactId : pom.version 
//示例 : com.gago.draw:easy-draw:1.0.0
//最终
implementation 'com.gago.draw:easy-draw:1.0.0'

一顿操作之后,项目完美运行,已经不需要再另外配置aar所需要的依赖了!!!

最后一定注意不要把aar放到libs里面使用,那样肯定加载不到!!!

一定要用上面的方法,使用本地Maven库来加载!!!

第一种方案虽然可以解决问题,但是还需要配置到本地,或者远程maven仓库,如果需要把aar提供给别人使用就会很麻烦。

还没有完,为了解决不方便的问题

就有了第二种更方便的方案!!

使用fat-aar-android插件直接将远程依赖打包到aar中!!!

方案二、使用fat-aar-android打包aar

实现

第一步再根目录的gradle文件中添加

    repositories {
        jcenter()
    }
    
    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.1'
        //添加插件
        classpath 'com.github.kezong:fat-aar:1.3.6'
    }

第二步再library中添加

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

第三步使用 embed 关键字替换引入依赖的 implementation,api 例如

    //正常情况,引入远程依赖
    implementation 'io.reactivex.rxjava2:rxjava:2.2.0'
    implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'

    //需要插入aar包的远程依赖
    embed  'com.vividsolutions:jts:1.13'
    embed  'com.mapbox.mapboxsdk:mapbox-sdk-turf:5.5.0'

第四步生成aar

Android Studio 打包aar丢失远程依赖问题解决_第4张图片

 一顿编译过后,output文件夹下就生成我们需要的aar包了

重要的是这个aar是包含远程依赖的aar包,可是以直接引入libs使用的!!!

到这里已经讲完了两种方式,这个插件使用还是非常简单的!!!

但是我在使用中出现了一个bug下面记录一下!!1

 异常:

	Could not determine the dependencies of task ':DrawSDK:compileDebugAidl'.
> Could not resolve all task dependencies for configuration ':DrawSDK:debugCompileClasspath'.
   > Could not resolve androidx.recyclerview:recyclerview:{strictly 1.0.0}.
     Required by:
         project :DrawSDK
      > Cannot find a version of 'androidx.recyclerview:recyclerview' that satisfies the version constraints: 
           Dependency path 'android_location_sdk:DrawSDK:unspecified' --> 'androidx.recyclerview:recyclerview:1.0.0'
           Constraint path 'android_location_sdk:DrawSDK:unspecified' --> 'androidx.recyclerview:recyclerview:{strictly 1.0.0}' because of the following reason: debugRuntimeClasspath uses version 1.0.0
           Dependency path 'android_location_sdk:DrawSDK:unspecified' --> 'androidx.recyclerview:recyclerview:1.0.0'
           Constraint path 'android_location_sdk:DrawSDK:unspecified' --> 'androidx.recyclerview:recyclerview:{strictly 1.0.0}' because of the following reason: debugRuntimeClasspath uses version 1.0.0
           Dependency path 'android_location_sdk:DrawSDK:unspecified' --> 'androidx.recyclerview:recyclerview:1.0.0'
           Constraint path 'android_location_sdk:DrawSDK:unspecified' --> 'androidx.recyclerview:recyclerview:{strictly 1.0.0}'

解决方案:使用 configurations.all方法

android {  
  configurations.all {
        resolutionStrategy.force 'androidx.appcompat:appcompat:1.0.0'
        resolutionStrategy.force 'androidx.recyclerview:recyclerview:1.0.0'
        resolutionStrategy.force 'androidx.constraintlayout:constraintlayout:1.1.3'
        resolutionStrategy.force 'com.mapbox.mapboxsdk:mapbox-sdk-turf:5.5.0'
        resolutionStrategy.force 'androidx.core:core:1.1.0'
        resolutionStrategy.force 'androidx.vectordrawable:vectordrawable:1.1.0'
        resolutionStrategy.force 'androidx.coordinatorlayout:coordinatorlayout:1.0.0'
        resolutionStrategy.force 'com.google.code.gson:gson:2.8.2'
    }
}

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

你可能感兴趣的:(android,studio,sdk,gradle)