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

时间:2015-10-07 21:16:14

标签: android android-studio android-gradle build.gradle

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

这样的远程家属
 compile 'com.squareup.picasso:picasso:2.5.2'

我想知道我需要采取的步骤是什么?我读了几篇文章和网站。这非常令人困惑。

1 个答案:

答案 0 :(得分:10)

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

  1. 构建您的库并提供必要的存储库元数据
  2. 将包含元数据的库放入存储库
  3. 告诉您的项目在该存储库中查找依赖项
  4. 在此之后,你可以在app的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属性:

    library 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是组织/组的名称。这将写在.pom文件中,但主要用于实际查找您的库作为远程依赖项。
    • pom.artifactId是您图书馆的名称。同样,这将放在.pom文件中,但用于实际找到您的lib。
    • pom.version是您图书馆的版本。在制作新版本时,您必须增加此值。同时放入.pom并用于定位您的lib。

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

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

    ./gradlew clean uploadArchives
    

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

    将包含元数据的库放入存储库

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

    要使其成为在线远程Maven存储库,只需通过http(或https)get-requests即可访问。如果您的服务器具有Apache或Nginx或IIS等Web服务器,则可以配置该服务器来托管文件。或者您可以将它们检入您的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()
        }
    }
    

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