当前位置: 首页 > 知识库问答 >
问题:

使用不同版本的Android支持库的变通方法

傅元龙
2023-03-14

这是指生成中出现的警告消息。gradle文件:

一切正常。Android支持库必须使用完全相同的版本规范(混合版本可能会导致运行时崩溃)

我很清楚这一点,并在自己的代码/构建中使用相同的版本。然而,对于我使用的一些第三方库,情况并非如此。

有时第三方库使用旧版本,而其他一些库使用新版本-因此更新您的支持库版本不会解决问题。

在某些情况下,您可能不想升级正在使用的支持库的升级版本。

使用不同版本的支持库重新编译第三方库也不是一个选项,因为在我的例子中代码不可用。

当其他引用的第三方库使用不同版本的支持库时,处理此问题的解决方法或推荐方法是什么?

共有1个答案

宿淳
2023-03-14

您可以排除所有可传递的依赖项,也可以逐个排除,然后在构建中包含所需的版本。gradle文件。

不要告诉代码是可传递的。transitive的文档说明:

设置是否应解析此依赖项,包括或排除其可传递依赖项。属于此依赖项的工件本身可能对其他工件具有依赖性。后者被称为传递依赖。

示例:

compile('com.super.lib:awesome@aar') {
    transitive = false
}

使用排除方法:

添加排除规则以排除此依赖项的传递依赖项。

示例:

compile('com.super.lib:awesome@aar') {
    exclude group: 'com.dont.want.this', module: 'old-artifact'
}

但是,请注意,这并不保证排除的依赖项不会被另一个依赖项拉入。如果要从任何地方排除依赖项,请使用配置范围的排除策略:

configurations.all {
    exclude group: 'com.dont.want.this', module: 'old-artifact'
}

此外,您不需要同时指定group模块名称。此示例来自gradle的JavaDoc:

dependencies {
     compile('org.hibernate:hibernate:3.1') {
         //excluding a particular transitive dependency:
         exclude module: 'cglib' //by artifact name
         exclude group: 'org.jmock' //by group
         exclude group: 'org.unwanted', module: 'iAmBuggy' //by both name and group
     }
}

这只是一个关于更改依赖版本号的危险的友好提醒。

使用此技术更改依赖项版本时,必须彻底测试应用程序,因为新/旧版本的依赖项中可能会出现中断性更改或意外行为。很明显,一个主要的版本号跳转很可能会导致崩溃/意外行为,但你甚至必须注意版本号的补丁部分,因为库创建者可能已经预料到依赖项的使用版本有一些bug,并且包括一些修复,一旦bug被修复,这些修复可能会破坏库。

 类似资料:
  • 在生成APK时,我得到了一个错误:项目使用的是一个不受支持的Gradle版本。我正在使用Android Studio3.5版本。 我试图更改build gradle类路径以匹配gradle-wrapper.properties中的distributionUrl,但是错误仍然存在。 首先,在项目级设置中,选择Use default gadle wrapper。 build.gradle文件:

  • 我正在尝试迁移tomcat服务器。 两者都使用版本,并且都应该准备好将我的java/jsp文件从一台服务器带到另一台服务器。我做到了,并且我得到了错误。这很正常,因为在旧的版本中我有,在新安装中我有(均来自Oracle)。 我继续将第二个升级到1.8。一切都很好,因为在新版本中,java版本的输出是: java版本“1.8.0\u 191”java(TM)SE运行时环境(build 1.8.0\u

  • 我在基本应用程序中包含了一堆第三方库。我无法控制那些第三方模块包含的支持库。这使得我的应用程序中很难有相同版本的android支持库。 我知道使用gradle可以从每个依赖项中排除某些库: 然而,有一吨的支持库和排除他们所有的每一个我的第三方库似乎是矫枉过正。 有更好的办法吗? 阅读这篇博文:https://www.devsbedevin.net/android-commanding-gradle

  • 我试图编译GLSL着色器在LWJGL使用OpenGL。我在MacOS Sierra上。 尝试编译着色器时出现以下错误: 着色器代码在Windows上工作,但在macOS上测试时却不能。下面是着色器代码: 下面是我如何加载着色器。。。 print语句返回正确的输出,但它仍然给我错误。 我在stackoverflow上下搜索了一个解决方案,但每个人都说他们在编译它时没有换行符,我有。我不明白为什么会这

  • 在Android P中获取错误时,直接访问此部分: