上传库

如需授予对您的库的访问权限,您需要选择代码库。 本页面将为您介绍与选择代码库类型相关的注意事项,以及如何使用 Maven Publish 插件创建发布内容。

在上传库之前,请确保您已准备好要发布的库,并已配置好必要的所有发布内容变体测试夹具

选择代码库类型

库将以 AAR 文件的形式发布。这些文件包含经过编译的代码(作为字节码和原生库)、Android 清单和资源。软件包本身不会声明任何身份、版本或对其他库的依赖关系。

通常,通过代码库提供 AAR 是最佳做法,而不是直接分发 AAR。它可以帮助用户更好地了解库的来源,而不会迫使用户去处理缺少版本等重要详情的 name.aar 文件。升级到更高版本的库时,使用代码库有助于确保只添加较新版本所需的依赖项,这样用户就不必手动更新依赖项了。

使用代码库发布库具有多项优势:

  • Gradle 可以自动将库的依赖项添加到依赖关系图
  • Gradle 可以确保依赖关系图中包含库的单个版本;如果您的库不断变化并有多个不同版本包含在关系图中,这样可以解决冲突。
  • Android Gradle 插件 (AGP) 可以更高效地进行脱糖(如果您的库使用 Java 8 或更高版本的语言功能),从而缩短用户的构建时间。
  • 您的库可以使用变体发布,并且可以包含测试夹具等功能。

直接分发 AAR 不会向用户提供与库的身份、版本或依赖项相关的任何信息。发布到代码库时,分发操作将由代码库机制中的一个单独文件来处理。对于 Maven 代码库,则是由 POM 文件处理。因此,强烈建议您使用代码库发布库,而不要手动分发 AAR 文件。

代码库类型

代码库有 3 种类型:

  • 借助免费的在线代码库(例如 Maven Central),任何人都可以上传和下载库。
  • 借助私有代码库(可通过登录进行访问),您可以对私有库进行受控分发。
  • 借助基于文件夹的本地代码库,您可以通过手动下载来分发库。

使用基于文件夹的本地代码库与为用户提供指向 AAR 的手动下载链接或通过电子邮件发送 AAR 非常相似。主要区别在于:您发送的内容不仅包含 AAR,还包含有关身份、版本和依赖项的额外信息。

您可以分发基于文件夹的代码库的 ZIP 文件,其中包含您的 AAR 和相关元数据。然后,用户可以提取文件的内容,将内容添加到项目,并将 Gradle 指向该项目。之后,用户即可使用 Maven 坐标声明对相应库的依赖关系(就像该库位于在线代码库中一样),并享受前面提及的所有优势。

创建发布内容

使用 Gradle Maven Publish 插件发布。借助 Maven Publish 插件,您可以声明发布内容和代码库,并创建任务以将这些发布内容发布到代码库。这些发布内容会使用由驱动 build 的插件(可能是 AGP 或 java-library 插件)创建的 SoftwareComponent 实例。

请注意,使用 AGP 运行 Maven Publish 插件时,系统不会在应用此插件时创建软件组件,它们是 创建于 afterEvaluate() 回调步骤。因此,选择相应软件组件的发布内容也必须在执行 afterEvaluate() 步骤期间进行配置。

模块级 build.gradle 文件的以下代码段会为使用 singleVariant()multipleVariants() 创建的给定变体创建发布内容。

Groovy

publishing {
  publications {
    release(MavenPublication) {
      groupId = 'com.my-company'
      artifactId = 'my-library'
      version = '1.0'

      afterEvaluate {
        from components.release
      }
    }
  }
}

Kotlin

publishing {
  publications {
    register<MavenPublication>("release") {
      groupId = "com.my-company"
      artifactId = "my-library"
      version = "1.0"

      afterEvaluate {
        from(components["release"])
      }
    }
  }
}

在上述示例中,组件的名称 (components.release) 基于为 singleVariant()multipleVariants() 指定的名称。

声明发布内容后,您必须创建目标代码库。

发布到本地代码库

发布到本地代码库与发布到远程代码库非常相似,不同之处在于代码库声明。请参阅上一部分,了解如何发布到远程代码库,创建一个能够发布所需变体的发布内容。然后,创建本地代码库:

Groovy

publishing {
  publications {
    release(MavenPublication) {
      ...
    }
  }
  repositories {
    maven {
      name = 'myrepo'
      url = layout.buildDirectory.dir("repo")
    }
  }
}

Kotlin

publishing {
  publications {
    register<MavenPublication>("release") {
      ...
    }
  }
  repositories {
    maven {
      name = "myrepo"
      url = uri(layout.buildDirectory.dir("repo"))
    }
  }
}

这会创建一个名为 publishReleaseToMyRepoRepository 的任务(由发布内容名称和代码库名称组成)。运行此任务会将代码库生成到所提供的位置。在此示例中,代码库是在项目的 build 文件夹中的 repo 目录下生成。

如果您希望自动生成此代码库的 ZIP 文件,可以使用以下代码执行此操作:

Groovy

tasks.register('generateRepo', Zip) {
  def publishTask = tasks.named('publishReleasePublicationToMyrepoRepository')
  from publishTask.map { it.getRepository().getUrl() }
  into 'mylibrary'
  archiveFileName.set('mylibrary.zip')
}

Kotlin

tasks.register<Zip>("generateRepo") {
  val publishTask = tasks.named(
    "publishReleasePublicationToMyrepoRepository",
    PublishToMavenRepository::class.java)
  from(publishTask.map { it.repository.url })
  into("mylibrary")
  archiveFileName.set("mylibrary.zip")
}

上述代码会创建一个名为 generateRepoZip 任务,该任务会使用并压缩发布任务的内容,同时确保名为 mylibrary 的顶级文件夹中存在相关 ZIP 条目。输出位于 build/distributions 下。