android 如何将自定义库的支持库与应用程序的支持库合并?

How does android merge the custom library's support library with that of application?

我有一个 android 库,在 gradle 中有 com.android.support:appcompat-v7:23.0.1 依赖,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 冲突?

请大家解惑

  1. which version does the android take? Lower one or Higher one? How do i see it?

在构建库时,您将依赖项明确地放在 build.gradle 中。 app 的创建者也是这样做的,它使用您的库作为在他的 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 将在输出 app.

希望你明白。

  1. How do i make sure there is no conflict of v7 appcompat when any app uses my library?

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

I know that The support library should not use a different version than the compileSdkVersion.

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