Android:排除应用程序的依赖项,仅由内部使用它的其他依赖项使用
Posted
技术标签:
【中文标题】Android:排除应用程序的依赖项,仅由内部使用它的其他依赖项使用【英文标题】:Android : Exclude dependency for the application and use only by the other dependency which is using it internally 【发布时间】:2021-11-28 05:10:24 【问题描述】:我正在开发一个必须添加 XYZ 依赖项的项目。 XYZ 依赖在内部使用com.google.android.material:material
,我没有在我的应用级别build.gradle
中直接添加com.google.android.material:material
依赖
现在,当我在我的项目中添加 XYZ 依赖项时,我的 UI 很混乱,因为 XYZ 依赖项使用了 com.google.android.material:material
依赖项。
我的问题是,如何排除 com.google.android.material:material
依赖项并仅在内部由 XYZ 使用该依赖项,以免我的 UI 变得混乱。
我知道我可以通过这种方式排除整个依赖:
implementation ("XYZ:1.0.7")
exclude group: 'com.google.android.material', module: 'material'
但这也会从 XYZ 中删除 com.google.android.material
,我不希望这样,因为 XYZ 在它的 UI 中需要这种依赖。我只想为我的应用程序删除它,以便我的应用程序的 UI 保持原样。
看这个:
在添加XYZ依赖之前(UI如预期):
添加XYZ依赖后(UI乱了):
【问题讨论】:
【参考方案1】:您可以使用 jarjar tool 为依赖项 jar 排除一个类。
Here是一个如何使用的例子
ependencies
compile jarjar.repackage
from ('org.apache.hive:hive-exec:0.13.0.2.1.5.0-695')
exclude group: 'net.hydromatic', module: 'optiq-core'
// transitive = false
archiveBypass "commons*.jar"
archiveExclude "slf4j*.jar"
classDelete "org.apache.thrift.**"
classRename 'org.json.**', 'org.anarres.hive.json.@1'
classRename 'org.iq80.**', 'org.anarres.hive.iq80.@1'
classRename 'org.codehaus.jackson.**', 'org.anarres.hive.jackson.@1'
classRename 'com.google.**', 'org.anarres.hive.google.@1'
classRename 'javolution.**', 'org.anarres.hive.javolution.@1'
classRename 'com.esotericsoftware.kryo.**', 'org.anarres.hive.kryo.@1'
【讨论】:
我无法实现它,因为找不到合适的示例而出现错误。我该如何使用它?假设我有一个库“io.supercharge:shimmerlayout:2.1.0”并且我想排除“com.google.android.material:material:1.1.0”那么我该如何在 gradle 文件中实现它?以上是关于Android:排除应用程序的依赖项,仅由内部使用它的其他依赖项使用的主要内容,如果未能解决你的问题,请参考以下文章
在 Android Gradle 构建中,如何从包含的 jar 文件中排除依赖项?
Android Studio - Gradle 实现 (...) exclude ... 不起作用(无法从依赖项中排除组)