【问题标题】:How does android merge the custom library's support library with that of application? [duplicate]android如何将自定义库的支持库与应用程序的支持库合并? [复制]
【发布时间】:2017-04-13 02:06:54
【问题描述】:

我在 gradle 中有一个带有 com.android.support:appcompat-v7:23.0.1 依赖项的 android 库,其中 compliedSDK 为 23

我有以下疑问

案例 1)说任何不同版本的应用程序com.android.support:appcompat-v7:23.3.0 使用我的库。

  1. android 采用哪个版本?低一还是高一?我怎么看?
  2. 当任何应用使用我的库时,我如何确保不存在 v7 appcompat 冲突?

案例 2) 说任何具有不同版本 com.android.support:appcompat-v7:25.0.1com.android.support:appcompat-v7:24+ 和不同已编译SDk(24 或 25) 的应用程序使用我的库。

我知道The support library should not use a different version than the compileSdkVersion

  1. android现在如何合并支持库? (由于我的库的支持库版本(appcompat-v7:23.0.1)与应用程序编译的SDK(25)不同)
  2. 当任何应用使用我的库时,我如何确保不存在 v7 appcompat 冲突?

请大家解惑

【问题讨论】:

  • 没有帮助。我尝试在应用程序中使用compiledSDK 作为25。并编译了我的库(compiledSDK of 23)。有用。但我的基本问题是android如何合并我的库和应用程序的支持库。

标签: android android-support-library android-library aar


【解决方案1】:
  1. android 采用哪个版本?低一还是高一?我怎么看?

在构建库时,您将依赖项明确地放在build.gradle 中。应用程序的创建者也是如此,它使用您的库作为在他的build.gradle 中声明的依赖项。如果创建者明确将支持库声明为依赖项,则采用该版本(不管依赖项声明的版本)。如果他不这样做,则采用任何依赖项声明的最高版本(这样的支持库被视为传递依赖项)。

示例:您的库使用appcompat-v7:23.3.0。应用程序的创建者声明appcompat-v7:25.0.1。简单案例:appcompat-v7:25.0.1 被占用。

示例 2:您的库使用 appcompat-v7:23.3.0。应用程序的创建者不使用appcompat-v7appcompat-v7:23.3.0 将在输出应用程序中。

示例 3:您的库使用 appcompat-v7:23.3.0。另一个库使用appcompat-v7:24.1.0。如果创建者没有明确声明appcompat-v7:xx.x.x,则版本appcompat-v7:24.1.0 将在输出应用程序中。

希望你能理解。

  1. 当任何应用使用我的库时,我如何确保不存在 v7 appcompat 冲突?

你不能保证。这就是为什么您应该始终将最高版本的支持库放在库中。我什至不能向您保证支持库保持向后兼容性。 Here 是他们没有的例子。

我知道支持库不应使用与 compileSdkVersion 不同的版本。

这只是一个建议。但是,您应该遵守它,但您不必这样做。

【讨论】:

  • 感谢 Zagorski,解决了一些疑问。这里还有一个,在您的示例 3 中,如果 applicationcompat-v7:23.3.0 的已编译SDK 为 23,而 appcompat-v7:24+ 库的已编译SDK 为 24,该怎么办。 android 采用了哪些所有支持库?如果它需要 appcompat-v7:24+,这是否意味着应用程序使用什么已编译的 SDK 并不重要?还是因为库已经编译了 24 的 SDK,所以编译的SDK 会自行更改为 24?
  • 我刚刚用compileSdkVersion 23appcompat-v7:25.0.0 编译了这个项目。内部输出AndroidManifest.xmlplatformBuildVersionCode="23"。所以它可以工作并且会编译。检查了打包到 .apk 中的 appcompat 源代码,确实它们的版本是 25。当然,我收到了警告 This support library should not use a different version (25) than the targetSdkVersion (23) - 建议正确维护依赖项和编译版本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-16
  • 1970-01-01
  • 1970-01-01
  • 2016-06-07
  • 2012-07-23
  • 1970-01-01
相关资源
最近更新 更多