首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从@aar,gradle依赖项中排除包/类

基础概念

在Gradle构建系统中,依赖项管理是一个核心功能。有时候,你可能需要从一个依赖项中排除特定的包或类,以避免版本冲突或其他问题。@aar 是Android Archive的缩写,通常用于表示Android库项目生成的AAR文件。

相关优势

排除特定的包或类可以帮助解决以下问题:

  1. 版本冲突:当两个依赖项依赖于同一个库的不同版本时,可能会导致冲突。
  2. 不必要的依赖:某些依赖项可能包含你不需要的包或类,排除它们可以减少APK的大小。
  3. 特定类的冲突:有时特定的类可能会在多个依赖项中存在,导致编译错误。

类型

Gradle提供了多种方式来排除依赖项中的包或类:

  1. 排除整个模块:排除整个依赖模块。
  2. 排除特定包:排除依赖项中的特定包。
  3. 排除特定类:排除依赖项中的特定类。

应用场景

假设你有一个项目依赖于两个库,这两个库都依赖于同一个第三方库的不同版本,导致版本冲突。你可以通过排除其中一个库中的该第三方库来解决冲突。

示例代码

假设你有一个依赖项 com.example:library:1.0.0,其中包含你不需要的包 com.example.unwanted,你可以这样排除它:

代码语言:txt
复制
dependencies {
    implementation('com.example:library:1.0.0') {
        exclude group: 'com.example', module: 'unwanted'
    }
}

如果你需要排除特定的类,可以使用 exclude 关键字结合 transitive 配置:

代码语言:txt
复制
configurations {
    all*.exclude group: 'com.example', module: 'unwanted', transitive: false
}

参考链接

常见问题及解决方法

  1. 排除后仍然存在冲突
    • 确保你正确地指定了要排除的包或类。
    • 检查是否有其他间接依赖项引入了相同的包或类。
  • 排除后功能缺失
    • 确保你排除的包或类不是必需的。
    • 如果是必需的,考虑手动添加该包或类的依赖。
  • 排除配置不生效
    • 确保你的排除配置在正确的配置块中(例如 implementationapi)。
    • 确保你的Gradle版本支持该排除配置。

通过以上方法,你可以有效地从Gradle依赖项中排除特定的包或类,解决版本冲突和其他相关问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

一文彻底搞清Gradle依赖

依赖类型 dependencies DSL标签是标准Gradle API的一部分,而不是Android Gradle插件的特性,所以它不属于android标签。...举个例子,A依赖B,B依赖C,如果都是使用api配置的话,A可以直接使用C(编译时和运行时),而如果是使用implementation配置的话,在编译时,A是无法访问C的。...如何排除依赖 1.dependencies中排除(细粒度) compile('com.taobao.android:accs-huawei:1.1.2@aar') { transitive...{ compile.exclude module: 'cglib' //全局排除原有的tnet jar与so分离的配置,统一使用aar的内容 all*.exclude...@jar标识符忽略传递依赖: compile 'com.zhyea:ar4j:1.0@jar' 4.强制使用某个版本 如果某个依赖是必需的,而又存在依赖冲突时,此时没必要逐个进行排除,可以使用force

4.9K20
  • 创建Android库的方法及Android .aar文件用法小结

    在上面的示例,名为 my-library- module 的 Android 库模块成为 build.gradle 文件所在模块的构建依赖。...如果多个 AAR 库之间发生冲突,将使用依赖列表首先列出(位于 dependencies块顶部)的库的资源。...每个库模块都会创建自己的 R 在您构建相关应用模块时,库模块将先编译到 AAR 文件,然后再添加到应用模块。因此,每个库都有其自己的 R ,并根据库的软件名称命名。...主模块和库模块生成的 R 会在所需的所有软件(包括主模块的软件和库的软件创建。...要使用库不同的构建类型,您必须将依赖添加到应用的 build.gradle文件的 dependencies块,并在库的 build.gradle文件中将 publishNonDefault设置为

    3K10

    将Eclipse工程转Android Studio工程的步骤与注意事项

    五.库工程(Library)打 aar 如果工程中有依赖工程(即 Library 工程,Android Studio 称 Module 工程),那么最好将它打成 aar ,以提高日常调试时的编译速度...在 Module 工程的 \build\outputs\aar\ 下可以找到编译生成的 aar ,把 aar 拷到主工程的 \libs\ 下。...去掉根目录下 settings.gradle 文件中原来工程的 include : // include ':XXXXX' 将主工程 build.gradle 文件的工程依赖关系,改为 aar 依赖...: Not a PNG file,那么请按下面说明修改: 在APP的build.gradle下的android添加: //放宽PNG图片检查条件 aaptOptions.cruncherEnabled...主工程和libary如果有相同的jar,Eclipse是不会报错的,而Android Studio则会报重复错误,那么我们将主工程中和libary重复的jar删除即可。 ? 5.

    2.9K10

    Android多模块构建合并aar解决方案

    前言 前段时间,我在实现gradle多模块构建遇到一个问题,以前我们基本上是以jar形式让开发者集成到工程中使用,但自从Android Studio中有了多module的概念,而我们的SDK也是分了多个模块进行构建的...jaraar有什么区别?...如果你只是简单实用一些库,你可以直接使用*.jar文件,而如果你想既想使用库,又想实用资源,那么你就可以创建一个Android Library,使用它生成的*.aar文件。...jar文件的使用方式我们应该比较熟悉了,将它复制到工程的libs目录下,然后在gradle添加以下脚本: dependencies { compile fileTree(include: ['...步骤1: 将gradle文件’fat-aar.gradle’到你的项目目录,然后apply: apply from: 'fat-aar.gradle' 步骤2:定义嵌入的依赖关系 你需要修改你以前依赖

    4.6K30

    Android:发布aar到maven仓库以及 maven插件 和 maven-publish 插件的区别

    如果找到,则下载依赖文件到本地仓库,否则执行步骤 3; 3、如果最终找不到依赖,则抛出错误 “无法找到依赖”。 [vgwgk9ebi2.png?...是没有上传 aar 的源码的,在Android Studio ,打开查看源码可以看到: [su72h4n7hf.png?...3、依赖传递 通过上面的步骤,发布的 aar ,是不会进行依赖传递的,如:我在demo:myHttpjava 依赖了 OkHttp,对 myHttpjava 发布 aar 并引用之后,在 app...把 library 依赖信息,手动的添加到 pom 文件(配置信息参考:MavenPom ),就可以完成依赖传递了,具体如下: maven(MavenPublication) { //...插件,完成aar的发布 在上面的步骤,publications 闭的有些配置还是不够优雅的,比较繁琐,如: 配置发布的内容(即配置上传的 aar 文件),是通过如下两种方式: * 依赖生成

    4.4K30

    Android工程化实践:组件化发布

    如果找到,则下载依赖文件到本地仓库,否则执行步骤 3; 如果最终找不到依赖,则抛出错误 “无法找到依赖”。 ?...依赖库:在项目级 build.gradle 声明远程仓库,在模块级 build.gradle 依赖库。...依赖库:在项目级 build.gradle 声明远程仓库,在模块级 build.gradle 依赖库。...完整代码和演示工程你可以直接下载查看 https://github.com/pengxurui/DemoHall 引用本地 aar 有时候,我们直接依赖第三方或第二方提供的 aar 文件。...方法 1:直接依赖改为间接依赖:新建模块封装 aar,对外部提供外观 API 方法 2:统一将 aar 文件放置在一个文件夹,并在项目级 build.gradle 声明仓库地址: 项目级 build.gradle

    2.5K20

    【Android Gradle 插件】Gradle 依赖管理 ⑨ ( implementation project 导入依赖库 Module | 导入aar文件作为依赖 | 先配置仓库再导入依赖 )

    Reference 参考文档 : Android Studio 构建配置官方文档 : https://developer.android.google.cn/studio/build 添加构建依赖.../api/artifacts/dsl/DependencyHandler.html 添加构建依赖 参考文档 : https://developer.android.google.cn/studio.../javadoc/org/gradle/api/Project.html 引入 aar 文件作为依赖 , 需要为该 aar 文件指定一个仓库 , 然后才能使用该依赖库 ; 先准备一个 aar 文件 ,...目录 , 拷贝出 percent-22.2.0.aar 文件 , 作为示例依赖库 ; 这是 SDK 自带的 aar 文件 , 每个 SDK 都有该文件 ; 将 percent-22.2.0.aar...; 该 percent-22.2.0.aar 对应的 pom 文件 percent-22.2.0.pom 如下 : 该 aar 依赖 com.android.support 组下的 support-v4

    1.4K20

    Android必知必会-发布开源 Android 项目注意事项

    /gradle.properties:一般写有 gradle 的 jvm 、代理和打包签名文件 Key 的一些信息,根据需要进行处理,一般情况下需要排除,其他情况见下文。...,更糟糕的问题是对 SDK 的升级、删除会非常的麻烦,碰到这样的 SDK ,需要我们进行二次打包成 aar 格式的库。...PS:Eclipse 不支持 aar 格式,只能使用上述比较麻烦的方式,不过你可以在使用此类库的时候,列一张清单,记录此 SDK 在项目中添加的所有文件,便于以后变更。...这里先做一个约定,在 Android Studio 的一个 Project ,包含两个 module ,其中需要打包成 aar 的 module ,名称是 demoLibary ,主 module...flatDir { dirs 'libs' } } } 2.在 module app 引用 aar : 首先复制 demoLibary-1.0.aar

    64420

    【Android Gradle 插件】ProductFlavor 配置 ( consumerProguardFiles 配置 | dimension 配置 )

    /2.3/ android 模块配置文档 : https://google.github.io/android-gradle-dsl/2.3/com.android.build.gradle.AppExtension.html...1、consumerProguardFiles 配置 consumerProguardFiles 配置 : 设置 发布的 AAR 依赖库 对应的混淆文件 ; 发布的AAR包含的ProGuard规则文件...然后,使用AAR的任何应用程序项目都将使用这些proguard规则文件(如果启用了proguard)。 这允许AAR指定收缩或模糊排除规则。 这仅对库项目有效。这在应用程序项目中被忽略。...配置 , 此外还可以自定义配置 ProductFlavor ; 在 build.gradle , 自定义 ProductFlavor 时 , 在 android 下使用 productFlavor...闭配置 , 与 defaultConfig 平级 ; android{ defaultConfig{ } productFlavor{ } } 参考文档 : com.android.build.gradle.internal.dsl.ProductFlavor

    1.6K10

    Android Gradle依赖管理、去除重复依赖、忽略的方式

    只在编译生效不会打包到 apk 或 aar ;compile 是会打包到 apk或 aar 的(如果是库工程的话有特殊情况,参考下面3). 2、app 工程的当前(compile+) 的依赖都会打包到...app 3、库工程: 1) jar :远程依赖不会打包到 aar ;本地依赖会; 2) aar:远程和本地都不不会打包到 aar. 3) 如果你要提供你的库工程的 aar 给他人,你需要同时告诉他这个库工程依赖的其他...aar 和远程 jar(因为他们没有打包到 aar ) 4) 如果通过工程依赖(即compile project(‘:lib’)的方式), 依赖是可以传递的,所以不需要在声明一次依赖....在项目开发我们会经常引入多个Module,然而每个Module又包含了V4、V7,为了升级新版本依赖只用更改一次,我们决定采用Gradle依赖的统一管理,避免重复繁琐的劳动。...添加 apply from: “config.gradle” 3.在modle的build.gradle添加引用 apply plugin: 'com.android.application'

    11.3K31

    Android全量编译加速——(透明依赖

    遇到的问题 1. jar重复冲突 ?...工程重复冲突 ? share_m和share是同一个代码仓库,开发便于验证更改了name,路由不一样代码一样,gradle认为是两个aar,报错重复。 3. 三方库版本冲突 ?...最终编译后share代码版本依然为1.2.0,因为B.aar存在对share:1.2.0依赖Gradle将考虑所有请求的版本,无论它们出现在依赖关系图中的何处。在这些版本,它将选择最高的版本。...第一个问题:明显的需要把B(aar)—>C(aar)这个依赖解除,这里常用有两个办法: 直接pom里删除该项依赖元数据(K歌采用)。...以上问题不难看出,唯一标识=自身内容+依赖关系图,所以在计算md5时,我们也需要把依赖关系算进去。什么时候可以获取依赖图?

    2.4K30

    Android -Gradle依赖导入及相关知识

    Project build.gradle 咱们一个一个解释其含义: buildscript:用来加载gradle脚本自身需要使用的资源,可以声明的资源包括依赖、第三方插件、maven仓库地址等 repositories...' exclude group: 'bcd' exclude group: 'abc', module: 'bcd' //禁止依赖的传递,gradle自动添加子依赖,默认为...添加如下的代码,该代码的意思是:在项目构建时,遍历所有依赖,然后 com.android.support 包下的依赖替换同一个版本。...image arr文件的依赖 首先先声明aar存放的路径声明 repositories { flatDir { dirs 'libs' //此处声明存放路径为...lib文件夹下 } } 其次依赖引入 implementation(name: 'LibReplayDecode-release', ext: 'aar') so文件的依赖

    1.1K20

    Gradle For Android(3)--管理依赖关系

    Gradle甚至解决了依赖是自己的问题,这种依赖关系被称之为Transitive Dependencies。 这一章会介绍以来管理并且解释Android Project添加依赖关系的几种办法。...') } 使用AAR文件 如果希望创建一个Library在各个Application复用,则可以构建出来一个AAR文件,并且作为依赖添加到Project。...androidTestCompile compile配置是默认的配置,并且把所有的依赖都编译到Applicaion。...每一个配置都不仅仅会添加到classpath,而是会被添加到APK。 apk配置仅仅会把依赖库添加到,而不会把它添加到编译的classpath。...provided配置则与之相反,它的依赖不会被添加到,而这两种方式只能够对Jar依赖生效,如果使用Library Project的话,会报错。

    1.5K30

    Android StudioGradle依赖深入讲解

    前言 Android studio依赖项目是使用gradle管理的,依赖一个项目、一个jar、一个工程,都可以在这里进行配置,本文将给大家详细介绍关于Android StudioGradle依赖的相关内容...依赖aar: // 在module的build.gradle增加如下语句: repositories { flatDir { dirs 'libs' } } // 可以一条依赖引入libs...二、不同依赖配置方式的区别:compile、implementation、api Android Gradle plugin 3.0开始,对于依赖的配置方式,引入了implementation和api...library只能在依赖内部使用,主工程无法访问依赖依赖的library和方法。...2、api(原compile): 会将依赖依赖的其它library一同编译和打包到apk,宿主工程可以使用依赖依赖的其它library的和方法 对于各个渠道还可以单独依赖属于渠道特有的,通过渠道名

    2.3K20

    字节码引用检测原理与实战

    官网APP模块化的子仓均已AAR形式供APP使用,且存在上层AAR依赖下层AAR的情况。 官网APP模块化分仓优化工作穿插在各业务版本,各业务版本并行开发,底层仓库难免有修改。...答:编译无问题 APP主仓依赖的是4.9.0.0版本的HardWare仓编译后的AAR文件,这个AAR文件早在4.9版本就编好没动,所以HardWare仓没有编译问题; APP主仓依赖的是5.0.0.0...三、字节码检测的解决方案 如果能在APK编译期间,通过自动化工具对所有JAR、AAR每个做一遍检测,检测其中调用的方法、属性的使用是否存在引用问题,将检测出疑似问题的地方在编译时进行提示,有必要的情况下直接报错终止编译...4.3 插件接入 在主工程根目录build.gradle添加依赖: dependencies { ......org.apache.http 实际用的是Android系统,该并没有参与APK编译,如果不加该配置,则会报错,但实际运行不会出错。

    79320

    Custom Lint in Action

    jar(保存在build/libs),将jar复制到~/.android/lint目录下,最后在Android工程源码目录下执行....[前面那个bug我后来在看lint工具源码中找到了原因,和JarFileIssueRegistry这个有关,它内部有个缓存机制] 4.Google方案的改进:LinkedIn的aar方案 LinkedIn...提供了另一种思路:将jar放到一个aar,然后Android项目依赖这个aar完成自定义lint检查。...2.新建一个Java Library项目,添加依赖compile 'com.android.tools.lint:lint-api:24.5.0',并编写lint规则,然后在build.gradle配置...4.在Android项目的build.gradle文件添加对上面的aar依赖,然后在MainActivity写两个lint检查时会出错的情况,然后选择Analyze下面的Inspect Code选项

    1.1K10

    说回 TheRouter

    APT编译期生成一个描述gradle插件聚合所有的描述,应用启动的时候再加载描述,就这么一个流程。TheRouter 文档里面写的非常详细了,这里主要讲讲路由在现代APP要怎么用。...配置系统无法打通,线上手动下发需要修改的路由,因为 TheRouter 会自动用最新下发的路由覆盖内的路由。优点在于精确,且流量资源占用小。...模块化支持,Gradle脚本一键切换源码引用 在模块化开发过程,如果没有采用分仓,或采用了分仓但依然使用 git-submodule 的方式开发,应该都会遇到一个问题。...如果集成采用源码编译,构建时间实在太久,大大降低开发调试效率;如果采用aar依赖编译,对于底层模块修改了代码,每次都要重新构建aar,在上层模块修改版本号以后,才能继续整构建编译,也极大影响开发效率...TheRouter 中提供了一个 Gradle 脚本,只需要在开发本地的local.properties文件声明要参与编译的module,其他未声明的默认使用aar编译,这样就能灵活切换源码与aar

    49930
    领券