首页
学习
活动
专区
工具
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

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

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

    4.7K30

    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.5K30

    【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.5K20

    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必知必会-发布开源 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

    65420

    【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全量编译加速——(透明依赖)

    遇到的问题 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

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

    官网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编译,如果不加该配置项,则会报错,但实际运行不会出错。

    80120

    说回 TheRouter

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

    51330

    从Android到React Native开发(四、打包流程解析和发布为Maven库)

    React Native原生依赖结构。 本地多aar文件的合并实现。 进一步的Gradle脚本理解。 如何发布一个React Native的Maven库。...一、引用  使用过React Native的应该知道,依赖的库都是通过npm install安装,安装后的所有源码存在于node_modules文件夹中,如果依赖的库需要原生代码的支持,需要通过react-native...这时候,就需要通过gradle脚本,手动对依赖的module模块,实现aar文件内容的合并。...通过引入apply from: 'fat-aar.gradle' 的脚本,对需要合并模块引用修改为 embedded project(':react-native-fs') 依赖即可: dependencies...包含有dependencies,如下代码所示,最终还是使用compile引用,但是这个过程中,我们通过embedded统计到哪些包需要合并发布。

    2.1K40

    Android 项目代码质量保证实践

    image build.gradle 文件中引用的 support 包的版本低的提示 Android Lint 是一个静态代码检查工具,能够对潜在的 bug,可能的安全性、性能、可用性、可访问性、国际化等优化内容做出监测...这里需要排除非 yanxuan 包名下的代码,判断当前类的基类是否是 BaseBlankActivity 或 BaseActionBarActivity?...为此,我们采用 LinkedIn 方案:将 jar 放到一个 aar 中。这样我们就可以针对工程进行自定义 Lint,lint.jar 只对当前工程有效。...总共覆盖 61 项代码检查。使用也非常方便,细节看 使用文档,可以直接使用 jar 包并执行命令或集成 Android Studio Plugin 执行检查 ?...中自定义 check 命名,并依赖其他的 task。

    1.7K20

    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

    从Android到React Native开发(四、打包流程解析和发布为Maven库)

    React Native原生依赖结构。 本地多aar文件的合并实现。 进一步的Gradle脚本理解。 如何发布一个React Native的Maven库。...这时候,就需要通过gradle脚本,手动对依赖的module模块,实现aar文件内容的合并。...通过引入apply from: 'fat-aar.gradle' 的脚本,对需要合并模块引用修改为 embedded project(':react-native-fs') 依赖即可: dependencies...包含有dependencies,如下代码所示,最终还是使用compile引用,但是这个过程中,我们通过embedded统计到哪些包需要合并发布。...四、最后  如何,最终实现过程其实并不复杂,总结起来: 创建一个android.library 添加本地dependencies依赖 apply react.gradle 、 fat-aar.gradle

    2.4K20

    Android-打包AAR步骤以及最为关键的注意事项!

    成型的项目(有依赖)如何快速打包AAR 我们可以直接在项目中New一个Moudle 然后把项目复制到Moudle中,或者重新复制出来一个当前项目,然后在复制的项目中直接把此项目修改成AAR。...这个简单,我们可以单独写一个Options类,提供给调用者,让他传递过来application,这样我们就可以在这个类中做一些初始化操作了。...如果该aar包里面有微信支付,分享等第三方库,你要在主工程中使用,要记得在gradle里面替换applicationId,或者用你主工程的包名和key去获取第三方操作的key和id 以分享为例,如果你清单文件中的分享...KEY与主项目中的build gradle文件中的分享KEY不同的话,就会包清单文件异常的。...如果在aar的MyAppliction里面使用了类的管理器,那么在打包成aar的时候需要将代码抽出来做个独立的类管理器,记住一点,打包成aar之后所有和application有关的东西都要检查替换,避免出现空指针异常

    3.6K30
    领券