You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

将aar作为模块依赖引入时,如何避免重复添加已有依赖?

解决本地AAR模块依赖时自动传递关联依赖的方法

当你直接把AAR文件作为模块依赖引入时,Gradle没法自动识别AAR里的关联依赖——因为AAR本身只包含编译后的代码和资源,不附带依赖元数据,这和你从JCenter拉取的依赖不同,后者是通过Maven仓库的pom.xml文件来传递依赖信息的。下面有几个靠谱的方法帮你避免重复添加依赖:

方法1:将AAR转换为本地Library模块

这是最推荐的方式,步骤清晰且易维护:

  • 在你的项目中新建一个Android Library模块(比如命名为my-local-library
  • 删除这个模块默认的src目录,把你的AAR文件放到模块的libs文件夹下
  • 在该模块的build.gradle(或build.gradle.kts)中添加如下配置:
    plugins {
        id 'com.android.library'
    }
    
    android {
        // 配置和你的AAR匹配的compileSdk、minSdk等参数
        compileSdk 34
    
        defaultConfig {
            minSdk 21
        }
    }
    
    dependencies {
        // 声明你的AAR的所有关联依赖,用api或implementation均可
        api 'com.some.dependency:core:1.0.0'
        implementation 'com.another.dependency:utils:2.3.0'
    }
    
    // 让模块直接使用AAR作为编译源
    android.libraryVariants.all { variant ->
        variant.compileConfiguration.resolutionStrategy.dependencySubstitution {
            substitute module(':my-local-library') using files('libs/your-library.aar')
        }
    }
    
  • 最后在主项目的build.gradle中依赖这个模块:
    implementation project(':my-local-library')
    

这样主项目就会自动继承该模块声明的所有关联依赖,不用手动重复添加了。

方法2:发布AAR到本地Maven仓库

把你的AAR发布到本地Maven仓库,就能获得和JCenter完全一致的依赖体验,自动传递关联依赖:

  • 在包含AAR的模块(或新建模块)的build.gradle中添加Maven发布插件:
    plugins {
        id 'com.android.library'
        id 'maven-publish'
    }
    
    android {
        // 配置匹配的SDK版本
        compileSdk 34
        defaultConfig {
            minSdk 21
        }
    }
    
    dependencies {
        // 同样声明所有关联依赖
        api 'com.some.dependency:core:1.0.0'
    }
    
    publishing {
        publications {
            maven(MavenPublication) {
                // 从AAR生成发布内容
                from components.android
                // 设置自定义坐标,和JCenter上的一致也可以
                groupId 'com.your.group'
                artifactId 'your-library'
                version '1.0.0'
            }
        }
        repositories {
            maven {
                // 指定本地Maven仓库路径,比如用户目录下的.m2文件夹
                url = uri("${System.getProperty('user.home')}/.m2/repository")
            }
        }
    }
    
  • 执行publishToMavenLocal Gradle任务,把AAR发布到本地Maven
  • 在主项目的settings.gradle中添加本地Maven仓库:
    dependencyResolutionManagement {
        repositories {
            mavenLocal()
            google()
            mavenCentral()
        }
    }
    
  • 最后在主项目的build.gradle中用坐标依赖:
    implementation 'com.your.group:your-library:1.0.0'
    

这样Gradle会自动从本地Maven拉取AAR及其关联依赖,完全复刻JCenter的使用体验。

方法3:直接引用AAR时启用传递依赖(有限场景)

如果你只是临时直接引用AAR文件,可以尝试在依赖声明中开启transitive=true,但注意:这个方法仅当你的AAR是从Maven仓库打包而来(附带了pom.xml依赖信息)时才有效,因为Gradle需要从pom里读取依赖链:

implementation(files("libs/your-library.aar")) {
    transitive = true
}

如果你的AAR是直接用Android Studio导出的(没有pom文件),这个方法就不起作用,所以还是优先推荐前两种方案。


内容的提问来源于stack exchange,提问作者Sujeet Shetty

火山引擎 最新活动