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'
我想知道我需要采取哪些步骤?我读了一些文章和网站。这是非常混乱的。
要使您的库作为远程依赖项可用,您只需执行三个步骤:
- 构建您的库并提供必要的存储库元数据
- 将带有元数据的图书馆放入存储库
- 告诉您的项目在该存储库中查找依赖项
在那之后你可以在你的应用程序的 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 中查找。
我使用 Android Studio 创建了一个 Android 库模块,我能够在应用程序中使用它,现在我需要将它用于我的其他应用程序。所以我在考虑使用远程依赖,比如 Picasso https://github.com/square/picasso
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
文件包含校验和以验证文件完整性。 (为了简洁起见,我还省略了 *.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 中查找。