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

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

我用android studio创建了一个android库模块,我可以在应用程序中使用它,现在我需要在其他应用程序中使用它。所以我在考虑使用像毕加索这样的远程依赖。

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

我想知道我需要采取什么步骤?我很少读文章和网站。这很让人困惑。

最佳答案

要使库作为远程依赖项可用,只需执行三个步骤:
构建库并提供必要的存储库元数据
将包含元数据的库放在存储库中
告诉项目在存储库中查找依赖项
在此之后,您可以在应用程序的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文件包含一个校验和来验证文件的完整性。(为了简洁起见,我还遗漏了一些校验和文件。)
要构建这个结构,可以使用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'
}

上面的示例是一个stock library build.gradle,android studio 1.4为一个新库生成了它,但是添加并配置了maven gradle插件。
第二行:*.sha1,添加插件。apply plugin: 'maven'闭包配置它。
uploadArchives是组织/组的名称。这将写入pom.groupId文件,但主要用于实际将库作为远程依赖项查找。
.pom是库的名称。同样,这将被放入pom.artifactId文件中,但用于实际查找库。
.pom是库的版本。当你发布一个新版本时,你必须增加这个值。同时放入pom.version并用于定位lib。
该行将插件配置为将结构写入相对于项目根目录的文件系统目录。
如果在项目的根目录中运行以下gradle命令,您应该会看到正在构建的maven目录结构。
./gradlew clean uploadArchives

这将首先清理生成,然后生成并执行uploadarchives任务,该任务将创建releases目录。
将包含元数据的库放在存储库中
您现在已经有了一个本地maven存储库,即位于lib util的项目目录中的本地文件系统上。
要使它成为一个在线远程maven存储库,只需通过http(或https)get请求就可以访问它。如果您有一个带有像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 project build.gradle,因为android studio只为它提供了两个额外的存储库。查找依赖项按列出的顺序进行。因此在本例中,它首先检查本地文件系统,然后检查自托管repo,最后在jcenter中查找。

关于android - Android Studio如何使用gradle构建具有远程依赖关系的aar文件。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33002558/

相关文章:

android - 我在kotlin类中的代码会自动替换为Android Studio中的一些XML代码

android-studio - 为什么Android Studio 0.4.6无法创建额外的资源目录? (例如,值-v11,值-v14等)

android - Firebase Android Studio 找不到 com.google.gsm :google-services:3. 0.0

android - Android NonSdkApiUsedViolation

java - 使用Gradle在Android Studio中添加Youtube Data API

android - 在某些情况下有什么方法可以阻止来自其他应用程序的通知?

android - 从 FLAG_ACTIVITY_CLEAR_TOP Intent 标志开始捕获 Activity

Android - View.getResources() 和 View.getContext().getResources() 之间的区别

java - 如何使用 Android Studio 在 Amazon Rekognition AWS 中检测人脸?