Android Studio 如何使用 gradle 构建具有远程依赖项的 aar 文件

Android Studio How to build an aar file with gradle that has remote dependencies

我使用 Android Studio 创建了一个 Android 库模块,我能够在应用程序中使用它,现在我需要将它用于我的其他应用程序。所以我在考虑使用远程依赖,比如 Picasso https://github.com/square/picasso

 compile 'com.squareup.picasso:picasso:2.5.2'

我想知道我需要采取哪些步骤?我读了一些文章和网站。这是非常混乱的。

要使您的库作为远程依赖项可用,您只需执行三个步骤:

  1. 构建您的库并提供必要的存储库元数据
  2. 将带有元数据的图书馆放入存储库
  3. 告诉您的项目在该存储库中查找依赖项

在那之后你可以在你的应用程序的 build.gradle 文件中有像这样的远程依赖:

compile 'com.example.developer:lib-util:1.0.0'

这将查找您为名为 'com.example.developer' 的组或组织注册的所有存储库,然后查找名为 'lib-util' 且版本为“1.0.0”的工件。

构建您的库并提供必要的存储库元数据

这听起来可能很复杂,但实际上并不难。它只是一个目录结构,看起来有点像这样:

com
 |-- example
      |-- developer
           |-- lib-util
                |-- 1.0.0
                |    |-- lib-util-1.0.0.aar
                |    |-- lib-util-1.0.0.aar.md5
                |    |-- lib-util-1.0.0.pom
                |    |-- lib-util-1.0.0.pom.md5
                |-- maven-metadata.xml
                |-- maven-metadata.xml.md5

文件lib-util-1.0.0.aar是编译后的库(Android存档格式)。 lib-util-1.0.0.pom 文件包含有关库本身的信息,例如作者及其依赖项。 maven-metadata.xml 文件包含了解哪些版本可用的必要信息(在本例中只有一个)。最后 *.md5 文件包含校验和以验证文件完整性。 (为了简洁起见,我还省略了 *.sha1 个校验和文件。)

要构建此结构,您可以使用 Maven Gradle 插件。把它放在你的库的 build.gradle 中并配置 mavenDeployer 属性:

图书馆build.gradle:

apply plugin: 'com.android.library'
apply plugin: 'maven'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"

    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 23
        versionCode 1
        versionName "1.0.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

uploadArchives {
    repositories.mavenDeployer {
        pom.groupId = 'com.example.developer'
        pom.artifactId = 'lib-util'
        pom.version = android.defaultConfig.versionName
        // Add other pom properties here if you want (developer details / licenses)
        repository(url: "file:./releases/")
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.0.1'
}

上面的示例是一个库存库 build.gradle,因为 Android Studio 1.4 为新库生成它,但添加并配置了 Maven Gradle 插件。

第二行:apply plugin: 'maven',添加插件。 uploadArchives 闭包对其进行配置。

  • pom.groupId 是 organization/group 的名称。这将写入 .pom 文件,但主要用于实际查找您的库作为远程依赖项。
  • pom.artifactId 是您图书馆的名称。同样,这将放在 .pom 文件中,但用于实际查找您的库。
  • pom.version 是您的库的版本。当你发布新版本时,你将不得不增加它。还要放入 .pom 并用于定位您的库。

repository(url: "file:./releases/") 将插件配置为将结构写入相对于项目根目录的文件系统目录。

如果您 运行 在项目的根目录中执行以下 Gradle 命令,您应该会看到正在构建的 Maven 目录结构。

./gradlew clean uploadArchives

这将首先清理您的构建,然后构建并执行将创建发布目录的 uploadArchives 任务。

将带有元数据的图书馆放入存储库

您现在已经有一个本地 Maven 存储库,即在您的 lib-util 项目目录中的本地文件系统上。

要使其成为在线远程 Maven 存储库,只需通过 http(或 https)get-requests 即可访问它。如果您的服务器带有 Apache 或 Nginx 或 IIS 等网络服务器,您可以将其配置为托管文件。或者您可以将它们签入您的 Github 帐户并让其托管。您甚至可以将这些文件复制到 Dropbox 并使用它来托管它们。

如果你想通过 Maven Central 或 JCenter 公开它,你必须去他们的网站并注册一个你声明你的帐户 'groupId' 然后你可以使用他们的系统上传文件,以便它们将由他们托管。

告诉您的项目在该存储库中查找依赖项

默认情况下 Android Studio 会注册您的项目以在 JCenter 中查找依赖项。以前它默认使用 Maven Central。因此,如果您实际上已将您的库上传到这些存储库,则无需执行任何操作,因为它已经可以使用了。

假设您要配置您的项目以在 /Users/rob/projects/lib-util/releases 中的本地文件系统和 http://developer.example.com/repo/ 中的自托管 Maven 存储库中查找远程依赖项。将这些存储库 url 添加到项目的 build.gradle(因此不在您的库中):

项目build.gradle:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.3.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        maven { url '/Users/rob/projects/lib-util/releases/' }
        maven { url 'http://developer.example.com/repo/' }
        jcenter()
    }
}

上面的示例是库存项目 build.gradle,因为 Android Studio 只为其提供了两个额外的存储库。查找依赖关系按照列出的顺序进行。所以在这种情况下,它首先检查本地文件系统,然后是自托管存储库,最后在 JCenter 中查找。