Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Android
Code

创建并发布一个 Android 库

Difficulty:IntermediateLength:MediumLanguages:

Chinese (Simplified) (中文(简体)) translation by Super Tian (you can also view the original English article)

介绍

如果没有那些我们爱导入到自己项目里的第三方库,我们作为 Android 开发者的日子会困难的多。 在本教程中,你将学习如何创建和发布自己的 Android 库,回馈给开发者社区。人们可以轻松的添加这些库,并使用到他们的项目中。

1. 创建一个 Android 库

如果你的库只包含 Java 类,那么,打包为 JAR 文件并使用 file host 来发布,也许是分享它的最快、最简单的方式。 如果你是用控制台来创建,那么下面的命令就已经足够了:

然而本教程要展示给你的是,如何处理更复杂的库。这些库不仅包含 Java 类,还有各种类型的 XML 文件和资源。 这些库被创建为 Android 库模块,并且通常被打包为 AAR 文件。

让我们创建一个简单的 Android 库,这个库为使用它的开发人员提供一个自定义 View

第 1 步: 添加一个新模块

首先,选择 File 菜单里的 New > New Module ,添加新的 Android 模块到你的项目中。 您将看到下面的屏幕,里面提供了很多选择:

New module dialog

选择 Android Library ,点击 Next。 在后面的表格里,输入库的名称,点击 Next。 我把这个库命名为 mylittlelibrary

在最后一个页面中,选择 Add no Activity,点击 Finish

你的项目现在有了两个模块,一个是应用模块,一个是库模块。 项目的结构是这样的:

Structure of project

第 2 步:创建一个布局

右键单击库模块的 res 文件夹,选择 New > XML > Layout XML File ,创建一个新的 XML 布局文件。 命名为 my_view.xml。

为了简化本教程中,我们将创建一个自定义 View。这个 View 是一个包含了两个 TextView 控件的 LinearLayout。 给 TextView 控件添加一些文本内容后,XML 布局文件应该看起来是这样:

第 3 步:创建一个 Java 类

创建一个新的 Java 类,命名为 MyView.java。 请确保将此文件放在库模块的 src 目录中— — 而不是在应用模块。

为了让这个类有 View 的行为,需要让他继承 LinearLayout类。 Android Studio 会提示你向类中添加几个构造方法。 添加了它们之后, 新的类应该看起来是这样的:

正如你所看到的,我们现在有两个构造方法。 为了避免给每个构造方法都添加初始化的代码,需要在每个构造方法里都调用为 initialize 的方法。 将下面的代码添加到每个构造方法:

initialize 方法中,调用 inflate 方法将这个类与我们在前一步中创建的布局相关联。

2.在本地使用库

现在,库已经准备好了,为了确保没有问题,我们来在同一项目的 app 模块中使用它。 要使用它,请在应用模块里的 build.gradle 文件添加 compile 依赖。

在应用模块里创建新的 Java 类,MainActivity。 让他继承 Activity 类,重写其 onCreate 方法。

onCreate 方法里,使用自定义 View 的构造方法来创建它的实例。 为了让它能填满 Activity 所有的屏幕空间,把它传递给 setContentView 方法。

你的 Activity 已经准备完毕。 把它添加到应用的 manifest 文件后,构建你的项目并将你的应用部署到一台 Android 设备上。 当应用启动时,你应该能够看到这个自定义 view。

3.在 Bintray 发布你的库

Bintray 是一个流行的可以用来发布 Android 库的平台。 它是免费的,并且易于使用。

首先,在 Bintray 上创建一个帐户。 在登录到你的帐户后,你将看到你已经有了六个仓库。 你可以使用其中的一个,也可以创建一个新的仓库。 在本教程中,我将使用名字为 maven 的仓库,它就是 Maven 仓库。

Homepage

访问您的个人资料页,单击 Edit 按钮。 在下一页上,单击 API Key 链接以查看您的 API 密钥。

API Key

记住这个密钥,因为使用 Bintray 插件时,你要用它来进行身份验证。

第 1 步:添加必要的插件

为了在 Android Studio 里与 Bintray 交互,你应该把 Bintray 插件引入到项目的 build.gradle 文件的 dependencies 里。

因为你要把库上传到 Maven 仓库,你还应该像下面这样添加 Maven 插件。

第 2 步:应用插件

打开您的库模块的 build.gradle 文件并添加以下代码,以应用我们在上一步中添加的插件。

第 3 步: 指定 POM 详细信息

在上传库时,Bintray 插件会寻找 POM 文件。 即使 Maven 插件为你生成了它,你也应该自己指定 groupId 标签和 version 标签的值。 要这样做,请使用 gradle 文件中的group 和version 的变量。

如果你对 Maven 很熟悉,想知道为什么我们没有指定 artifactId 标签的值。这是因为默认情况下, Maven 插件将你的库的名称作为了 artifactId

第 4 步: 生成源 JAR

为了遵守 Maven 标准,你的库也应该有一个包含了库的源文件的 JAR 文件。 为了生成 JAR 文件,需要创建一个新的 Jar任务,generateSourcesJar,并且使用 from 功能指定的源文件的位置。

第 5 步: 生成 Javadoc JAR

我们同样推荐,在你的库里有一个包含 Javadocs 的 JAR 文件。 因为目前你还没有任何 Javadocs,需要创建一个新的 Javadoc 任务,generateJavadocs,来生成它们。 使用 source 变量来指定源文件的位置。 你还应该更新 classpath 变量,以便该任务可以找到属于 Android SDK 的类。 你可以通过把 android.getBootClasspath 方法的返回值添加给他,来这么做。

下一步,要从 Javadocs 生成 JAR,需要创建 Jar 任务,generateJavadocsJar,并把 generateJavadocsdestinationDir 属性传递给它的 from 功能。 您的新任务应如下所示:

为了确保在 generateJavadocsJar 任务只在 generateJavadocs 任务完成后才开始,需要添加下面的代码片段,它使用了 dependsOn 方法来决定任务的顺序:

第 6 步: 引入生成的 JAR 文件

为了把源和 Javadoc JAR 文件导入到 artifacts 的列表里,你应该把他们的任务的名字添加到 configuration 里,称为 archives,artifacts 列表将被上传到 Maven 仓库。 使用下面的代码片段来完成:

第 7 步: 运行任务

现在是运行我们在前几步里创建的任务的时候了。 打开 Gradle Projects 窗口,搜索名为 install 的任务。

Install task

双击它,运行与库模块相关的任务。 一旦完成运行,你就有了一切发布你的库需要的东西,有效的 POM 文件,AAR 文件,源 JAR,和 Javadocs JAR。

第 8 步: 配置 Bintray 插件

要配置插件,你应该使用 Gradle 文件中的 bintray 闭包。 首先,使用与你的 Bintray 用户名和 API 密钥对应的 userkey 变量进行身份验证。

在 Bintray,你的库会被放置在 Bintray package 里。 你应该使用 pkg 闭包里命名直观的 reponamelicensesvcsUrl 参数,提供详细的相关信息, 如果这个包不存在,会为你自动创建。

当你将文件上传到 Bintray 时,他们会与 Bintray 包里的一个版本相关联。 因此,pkg 必须包含一个 version 闭包,闭包的 name 属性要设为独一无二的名称。 另外,你还可以使用 descreleasedvcsTag 参数来提供描述、 发布日期和 Git 标签。

最后,为了指定应该上传的文件,要把 configuration 参数的值设为 archives

这是一个配置示例:

第 9 步: 使用 Bintray 插件上传文件

再次打开 Gradle Projects 窗口,搜索 bintrayUpload 任务。 双击它,启动上传文件。

Bintray upload

一旦任务完成,你就能打开浏览器来访问你的 Bintray 包的详细信息页面。 你会看到一个通知,说你有四个未发布的文件。 如果要发布这些文件,单击 Publish 链接。

Notification about unpublished files

4.使用 Bintray 里的库

你的库现在已经可以作为 Bintray 包使用了。 只要你分享了你的 Maven 仓库的 URL,加上 group ID、artifact ID 和 version number,任何开发人员都可以访问你的库。 例如,为了使用我们刚才创建的库,开发人员必须引入下面这个代码片段:

注意,在把库添加为 compile 依赖之前,开发人员必须显式地在 repositories 列表里,引入你的仓库。

5.将库添加到 JCenter

默认情况下,Android Studio 会搜索一个名为 JCenter 的仓库里面的库。 如果你把自己的库引入到了 JCenter 存储库,开发人员就不必向他的 repositories 里添加任何东西了。

要将你的库添加到 JCenter,需要打开浏览器并访问你的 Bintray 的包的详细信息页面。 单击 Add to JCenter 按钮。

JCenter button

接着你进入一个页面,让你填写一些信息。 你可以用 Comments 区域来提及任何关于这个库的细节。

Compose message page

单击 Send 按钮,启动 Bintray 的审查过程。 在一两天以内,Bintray 的工作人员会把你的库链接到 JCenter 仓库,这样你就将能在你的包的详细信息页面上,看到指向 JCenter 的链接了。

Link to JCenter

任何开发人员现在都可以使用你的库,而无需更改 repositories 列表。

结论

在本教程中,你学习了如何创建一个简单的 Android 库模块,并将其发布到自己的 Maven 仓库和 JCenter 的仓库。 一路走来,你也学会了如何创建和执行不同类型的 gradle 任务。

要了解有关 Bintray 的详细信息,请访问 Bintray 的用户手册

关注我们的公众号
Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.