如何通过Android Studio中的Jitpack或jCenter和Maven Central分发自己的Android库

注意:本教程使用最新的maven-publish和maven Gradle插件。

我们中的许多人一定已经看过很多库,尤其是在Github或Bitbucket中,如下所示:

如果模块的build.gradle中有类似的内容,那么您就可以开始使用。 库现已可用。 但是 ,如果您可以做这样的事情,那不是很好吗?

他们其他人是如何做到的?

  1. Jitpack

我猜想有很多方法可以做到这一点,最简单的方法就是使用像Jitpack这样的东西,这样很容易遵循:

然后您就可以开始了。 但事实是,您必须包括jitpack的Maven网址,才能访问您的库。

2. jCenter和Maven Central

jcenter是由bintray.com托管的Maven存储库。 您可以在此处找到整个存储库。 在Android Studio中默认使用jCenter,它还包括Maven Central所拥有的一切,甚至更多。

Maven Central是由sonatype.org托管的Maven存储库。 您可以在此处找到整个存储库。

为了在Android中使用jCenter(如果尚未包含)和mavenCentral

您必须执行以下操作:

想知道为什么不仅只有一个标准存储库,而且还有两个标准存储库?

实际上,它们都是具有相同职责的存储库:托管Java / Android库。 开发人员可以选择将一个或两个库都上传到它们的库中。

但是Maven Central的最大问题是,很难将库上传到。 为了做到这一点,开发人员必须处于某种怪异状态。 出于其他原因(例如出于安全方面的考虑等), Android Studio团队决定将默认存储库改为jcenter,因为您可以看到,一旦从最新版本的Android Studio创建了新项目,就会自动定义jcenter()而不是mavenCentral()

有很多理由使他们决定从Maven Central切换到jcenter。 这里是一些主要的。

– jcenter通过CDN提供库,这意味着开发人员可以享受更快的加载体验。

– jcenter是地球上最大的Java存储库。 因此,可以暗示Maven Central上可用的任何内容也将在jcenter上可用。 换句话说,jcenter是Maven Central的超集。

–将我们自己的库上传到资源库非常容易。 无需像在Maven Central上那样签名或做任何复杂的事情。

–友好用户界面

–如果要将库上载到Maven Central,则只需单击Bintray站点即可完成此操作(并且可以进行一些一次性设置)。

基于上述原因和我的经验,我必须说这是将默认存储库切换到jcenter的明智决定。

因此,本文将只关注jcenter,因为一旦成功将库上传到jcenter,此后就可以轻松将其转发到Maven Central。

在我们开始讨论如何将库上传到jcenter之前。 我们应该从gradle如何从存储库中获取库开始。 例如,当我们在build.gradle中键入如下内容时,这些库文件如何神奇地下载到您的项目中。

它是GROUP_ID:ARTIFACT_ID:VERSION的组合

因此gradle可以通过以上组合来识别库。 以我为例:

  GROUP_ID = com.github.kostasdrakonakis ARTIFACT_ID = Spinner-preference VERSION = 1.0.0 

GROUP_ID定义库组的名称。 在同一个上下文中或在同一家公司中,可能会有多个具有不同功能的库。 如果库在同一组中,它将共享相同的GROUP_ID。 通常,我们使用开发人员的程序包名称来命名它,然后使用库的组名来命名,例如com.squareup 。 然后在ARTIFACT_ID中定义库的名称。 对于VERSION ,只有版本号。 尽管可以是任何文本,但我建议您使用语义版本控制。

这是Square图书馆的真实示例。 您会注意到,每个人都可以轻松识别库和开发人员的名称。

现在,让我们开始最重要的部分:上传过程。 这里的目标很简单,就像如何将我们的库文件上传到 http://jcenter.bintray.com一样 。 一旦我们可以做到,库就被发布了。 好吧……要注意的两件事:如何创建aar文件以及如何将构建的文件上载到存储库?

如上图所示,这很容易。

步骤1.创建一个Sonatype帐户以上传到Maven Central(可选)

如果您没有将库上载到Maven Central的计划,请跳过此步骤。

您必须在Sonatype网站上的JIRA问题跟踪器中创建一个帐户。 为此,请转到Sonatype信息中心,然后简单地注册一个帐户。

完成后,您必须请求将您的库分发到Maven Central的权限。 您要做的是在JIRA中创建一个问题,让他们允许您上传与提供给Maven Central的GROUP_ID匹配的库。

要创建上述问题,请转到Sonatype信息中心,然后使用创建的帐户登录。 然后点击创建 放置在顶部菜单中。

它看起来应该像这样:

创建吉拉问题

填写以下信息:

项目:社区支持-开源项目存储库托管

发行类型:新项目

摘要:摘要中的库名称,例如Spinner Preference

组ID:放置根GROUP_ID,例如com.github.kostasdrakonakis 。 获得批准后,每个库都以 com.github.kostasdrakonakis将被允许​​上传到存储库,例如com.github.kostasdrakonakis 明智地选择,不要尝试使用诸如com.google。*之类的group_id来欺骗他们,因为:

  1. 您必须拥有域名
  2. 这是非法的,他们不会允许您。

项目URL:输入您计划分发的任何库的URL,例如https://github.com/kostasdrakonakis/spinner_preference

SCM URL:源代码管理的URL,例如https://github.com/kostasdrakonakis/spinner_preference.git

准备就绪后,单击创建 。 就这样。 现在,您应该耐心等待,直到被授予访问权限,之后您可以将您的库分发到Maven Central。 您将收到一封电子邮件,其中有人对您的帖子发表了评论,并且该消息应类似于:

允许上传到Maven Central

这意味着当我们尝试将工件推送到Maven Central时,应该可以在http://search.maven.org/下看到它们。

步骤2.在 Bintray中 创建一个帐户 并创建一个存储库。

导航至https://bintray.com/signup/oss并只需创建一个帐户。 您也可以使用Github,Google或Twitter帐户进行注册,以加快注册速度。

登录到仪表板并添加新的存储库,如下所示:

添加存储库
创建存储库

您可以选择任何名称,但出于演示目的,我选择了maven。 确保类型为Maven。 您也可以选择许可证,然后按创建。

您应该在一个看起来像这样的页面中:

步骤3.在 Bintray中 为存储库创建一个程序包

到目前为止,由于一切都已正确设置,所以让我们继续并将程序包添加到上一步中创建的存储库中。

导航到上一步中创建的存储库,然后单击“ 添加新软件包”

创建包装
填写包装详细信息

填写以下详细信息:

名称 :您的软件包名称,例如spinner-preference

许可证 :您用于软件包的许可证,例如Apache-2.0

标签 :可以更好地描述您的图书馆中使用的技术的标签

网站 :您的网站URL,如果没有,请使用Github或Bitbucket的存储库URL。

问题追踪器 :您可以将其留空或使用Github / Bitbucket存储库URL /问题

版本控制 :您的项目存储库的Github / Bitbucket URL

之后,您可以单击Create Package

创建包后,它应该如下所示:

步骤4.为Bintray启用自动签名

如上所述,我们可以通过jcenter将一个库上传到Maven Central,但是要做到这一点,我们需要先对该库进行签名。 Bintray提供了一种机制,可通过Web界面轻松完成此任务,该界面允许库在上传后自动签名。

第一步是使用以下命令通过命令行生成密钥。 (如果使用Windows,请在cygwin或cmder下执行)

 gpg --gen-key 

按下O后,系统会提示您选择一个密码短语,因此选择一个,然后重新输入密码并按Enter。 它看起来应该像这样:

一旦创建密钥。 调用以下命令以查看创建的密钥的信息。

 gpg --list-keys 

您现在应该看到类似上面的内容。 现在,我们必须将公钥上载到密钥服务器。 为此,请调用以下命令,并将pubR行中的2048R /后的PUBLIC_KEY_ID替换为8位十六进制值(在本示例中为235D2978

 gpg --keyserver hkp://pool.sks-keyservers.net --send-keys PUBLIC_KEY_ID 

然后,使用以下命令将公用密钥和专用密钥导出为ASCII装甲格式,然后将yourmail@email.com替换为在上一步中用于创建自己的密钥的电子邮件。

 gpg -a --export yourmail@email.com > public_key_sender.asc 
gpg -a --export-secret-key yourmail@email.com > private_key_sender.asc

导出两个密钥后,打开Bintray的“编辑配置文件”页面,然后单击GPG签名 。 使用分别在上一步中导出的public_key_sender.asc和private_key_sender.asc文件中的内容填写公钥和私钥。

Bintray GPG签名

放置您的公共密钥和私有密钥,然后单击“ 更新”以保存密钥。 最后要做的是回到您的存储库,然后单击“ 编辑” ,然后您将看到一个如下所示的页面:

并选中显示GPG自动签名上传文件的复选框。

步骤5.创建Android Studio库项目并准备文件以上传到 Bintray

创建一个Android Studio项目并创建一个新的Android库模块,如下所示:

修改项目的build.gradle以包括这些类路径:

 类路径'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.4' 
classpath'com.github.dcendents :android-maven-gradle-plugin:1.5'

它看起来应该像这样:

然后在库模块的build.gradle中添加以下行:

  以下网址申请: 'https : //raw.githubusercontent.com/kostasdrakonakis/maven-upload/master/bintray.gradle' 
以下网站申请: 'https//raw.githubusercontent.com/kostasdrakonakis/maven-upload/master/publications.gradle'

它看起来应该像这样:

请注意,我们还将versionName属性从“ 1.0”修改为

  project.getProperty( “ libraryVersion”

这样做是为了使我们更容易从1个地方修改版本。 现在有趣的部分是相应地修改gradle.properties文件,如下所示:

  #配置后,Gradle将在孵化并行模式下运行。 
#此选项仅应用于解耦的项目。 更多详细信息,请访问
#http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
#org.gradle.parallel = true
libraryVersion = 1.0.0
libraryName
= SpinnerPreference
libraryDescription
= 在Android中的PreferenceActivity中实现Spinner的自定义Preference。
publishedGroupId
= com.github.kostasdrakonakis
神器
= 微调器偏好
BintrayRepo
= 行家
bintrayName
= 微调器偏好
siteUrl
= https://github.com/kostasdrakonakis/spinner_preference
gitUrl
= https://github.com/kostasdrakonakis/spinner_preference.git
developerId
= kdrakonakis
developerName
= Kostas Drakonakis
developerEmail
= test@gmail.com
licenseName
= Apache软件许可,版本2.0
licenseUrl
= http://www.apache.org/licenses/LICENSE-2.0.txt
全部许可
= [“ Apache-2.0”]

请注意,我在第2步的前面将我的Bintray存储库命名为“ maven”,bintrayName(程序包名称)命名为“ spinner-preference”。 其他人几乎可以自我解释。

不要忘记像这样修改您的local.properties:

  bintray.apikey = abcefdaslkjdhakjsdhlkaskkjd54asd321qw8dasd1 
bintray.gpg.password
=我的密码
bintray.user
= mybintray用户名

您可以在Bintray的“ 编辑配置文件”下找到您的API密钥,如下所示:

完成所有这些修改后,从Android Studio打开终端并执行任务:

在Windows中:

  gradlew安装 

或者如果您使用的是Mac / Linux

  gradle安装 

在任务成功执行后,您应该执行任务:

在Windows中:

  gradlew bintrayUpload 

或者如果您使用的是Mac / Linux

  gradle bintrayUpload 

如果一切成功,您应该会看到文件上传到Bintray packageName,就像在这里一样:

.asc文件意味着这些文件将使用我们之前启用的GPG密钥自动签名。

步骤6.添加到jCenter

如果您对库满意,可以从“ 常规”选项卡按“添加到jCenter”。

并点击发送 ,它将创建一个对Bintray的请求,一旦批准,您的软件包名称将包含在jCenter中。

您通常需要等待2-3个小时左右才能批准请求,一旦批准,您将看到以下内容:

终于完成了。 现在,包含Android Studio中的jCenter()的任何开发人员都可以使用您的项目。 您可以像这样在jcenter.bintray.com中检查您的项目,例如:

http://jcenter.bintray.com/com/github/kostasdrakonakis/spinner-preference/1.0.0/

请注意,链接到jcenter是一次性的操作。 从现在开始,如果您在软件包中进行了任何修改,例如,上载新版本的二进制文件,删除旧版本的二进制文件等。所做的更改也将影响到jcenter。 无论如何,由于您自己的存储库和jcenter位于不同的位置,因此您可能需要等待大约2-3分钟才能让jcenter同步更改。

并且请注意。 如果您决定删除整个软件包,则在这种情况下不会删除放置在jcenter存储库上的库文件。 而且它们将像僵尸文件一样被留下,没有人可以删除它。 因此,我建议您,如果要删除整个程序包,请先从Web界面删除每个版本,然后再删除程序包。

但是我们如何将其包含在Maven Central中?

步骤7.同步到Maven Central

并非所有的android开发人员都使用jcenter。 还有许多开发人员仍在使用mavenCentral()因此我们也将我们的库上传到Maven Central。

要将库从jcenter转发到Maven Central,首先需要完成两个任务:

1)Bintray软件包必须已经链接到jcenter

2)Maven Central上的存储库已被批准打开

如果您已经通过了这些资格认证。 将您的图书馆资料包转发到Maven Central的方法非常简单。 只需单击软件包详细信息页面上的Maven Central链接即可。

导航到https://oss.sonatype.org/,并使用“注册问题”跟踪器时用于创建帐户的凭据登录。

登录后,您将在右上角看到您的用户名。 单击下拉菜单并选择配置文件 ,然后在配置文件选项卡中选择用户令牌,如下图所示:

用户令牌

之后,单击“访问用户令牌”,然后输入密码以验证身份,然后将提示您类似以下内容:

在Bintray存储库->包名称-> Maven Central下输入用户令牌密钥和用户令牌密码

然后点击同步 。 如果一切都成功,则完成后,您将在“ 上次同步状态”中看到“已成功同步并关闭存储库” 。 但是,如果有任何问题,它将显示在“上次同步错误”中。 您必须逐案解决问题,因为可以上传到Maven Central的库的条件非常严格,例如,库的依赖项定义版本中不能使用+符号。

一旦完成。 您可以在Maven Central Repository中与您的库的组/工件ID相匹配的目录中找到您的库二进制文件。 在此示例中,它是com -> github -> kostasdrakonakis -> spinner-preference -> 1.0.0

恭喜你! 就这样。 尽管它需要很多步骤,但是步骤非常简单。 而且大多数都是一次性行动。 设置好之后,您几乎必须在此之后执行任何其他步骤。

希望本文对您有所帮助!