Android 发布Github项目到Maven仓库

一、相关专业术语说明

  • Maven:全名Apache Maven,是Apache开发的一个软件项目管理和项目自动构建工具
  • Maven仓库:存放Maven库资源的地方,可以是远程Maven服务器,也可以是本地Maven服
  • POM:Project Object Model,一个用来描述项目信息的xml文件,以xml节点的形式记录项目所属分组,项目名称,项目版本,依赖类库等信息
  • JCenter:一个由 bintray.com维护的Maven仓库。Bintray其实只是一个网站,他们负责维护JCenter这个库,就是说JCenter库是托管在Bintray网站上的。
  • Maven Central:一个由sonatype.org维护的Maven仓库。
  • JitPack:JitPack是一个与GitHub绑定,提供代码仓库服务的平台,用于将GitHub项目发布到JitPack仓库,JitPack登录使用的也是GitHub帐号。JitPack的定位是私人仓库,而不是公共仓库,因此没有审核,GitHub项目只要能够成功编译,即可发布,熟练者发布一个新版本只需要1-2分钟

二、JCenter、MavenCenter、JitPack的区别与联系

这3个名词即具体的Maven仓库的地址,他们都是Maven仓库,但是属于不同的服务源。总的来说,只有两个标准的Android library文件服务器:Jcenter 和 Maven Central,现在JitPack也流行了起来。(比较方便)

从哪引用这几个Maven仓库呢,就是在根目录build.gradle中

allprojects {
    repositories {
        jcenter()      //JCenter仓库
        mavenCenter()    //mvenCenter仓库
        maven { url "https://jitpack.io" }   // jitpack仓库
    }
}

我们发现第三个jitpack的写法和前2个不一样,写法是maven {} 里面加入地址,其实这个才是maven仓库标准引用方法,jcenter和mavenCenter由于是标准的Android仓库,相当于定义了一个别名。所以一些自定义的仓库都是这种写法然后填入自己的仓库网址,比如Fabric.io的library,maven { url 'https://maven.fabric.io/public' }

具体使用哪个要看开源项目把Library传到了哪个仓库。它就会要求你在这加哪个仓库。

JCenter和Maven Central是最标准权威的两大Maven仓库,主流的类库在它们上面基本都能找到。JCenter发布项目时,提供了同步发布到Maven Central的选项。Maven Central配置非常繁琐,JCenter配置起来简单得多,但是JCenter在国内不好用,时常会遇到无法注册的问题,比如不支持国内邮箱,注册时无响应等问题。虽然jcenter和Maven Central 都是标准的 android library仓库,但是它们维护在完全不同的服务器上,由不同的人提供内容,两者之间毫无关系。在jcenter上有的可能 Maven Central 上没有,反之亦然。

起初,Android Studio 选择Maven Central作为默认仓库。如果你使用老版本的Android Studio创建一个新项目,mavenCentral()会自动的定义在build.gradle中。但是Maven Central的最大问题是对开发者不够友好,上传library异常困难,上传上去的开发者都是某种程度的极客,同时还因为诸如安全方面的其他原因,Android Studio团队决定把默认的仓库替换成jcenter。正如你看到的,一旦使用最新版本的Android Studio创建一个项目,jcenter()自动被定义,而不是mavenCentral()。

不过现在jcenter服务停止,需要迁移项目库(比如mavenCentral),这意味着几乎所有使用了jcenter的项目将要面临失败构建(包含Android开发中build.gradle 和其它开源的二进制依赖)Google在3月1日已经警告开发者移除Jcenter(),并且针对Google自己的开源库,在Android Studio 4.2 Google已经把Maven Central 作为gradle的默认配置了(以前是jcenter),kotlin的所有库也立马转移到maven central。

所以现在只推荐jitpack,Maven Central或者自建Nexus。一般个人或组织:推荐jitpack;如果是大一点的公司就可以自建Nexus或maven central

三、使用Jitpack发布

个人最后实际上使用的是这个最简单的发布仓库,下面写下操作的步骤

1. AS创建Project和要分享上传的Module

2. 配置Gradle

项目的根目录build.gradle中添加

buildscript { 
  dependencies {
    classpath 'com.github.dcendents:android-maven-gradle-plugin:2.0'

 在想要做成库的module的build.gradle中添加

 apply plugin: 'com.github.dcendents.android-maven'  

 group='com.github.YourUsername'

 把YourUsername改成你自己github的用户名即可

3. 本地检查测试

jitpack不同于其他库,并不是上传aar文件或者jar文件,而且直接从你的github拉取代码在线编译。为了避免我们不断的在线编译错误,我们可以在根目录下执行指令:

gradlew install

 如果显示BUILD SUCCESSFUL,那就恭喜你成功了。上传代码吧。

4. 上传发布版本

a. 在github中打开你项目的首页,根据如下路径(见下图):

releases -> Draft a new release
发布一个新版本

或者现在本地创建TAG,然后上传,命令如下:

git tag <tagname>   //用于新建一个标签

git push origin --tags    //可以推送全部未推送过的本地标签;

b. 打开jitpack的网站(https://jitpack.io/),用你的github账号登录,你就会看到左边的列表中,有你github上的所有项目,选择你要发布的项目,选择版本,点击发布。等到log对应的图标变绿,那就成功啦。   如果log的图标是红的,那就点进去看下log,根据错误修改下代码吧。如果你用gradlew install命令检查过还报错的话,那就是github中的文件不全,比如漏了上传gradlew文件

 点击Draft a new release如下:

 

 Jitpack上传并编译成功后的样子:

这是在线编译的Log日志: 

 

 5.自测使用发布的库

a. 在你想要使用的项目的根目录build.gradle中添加

allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }
b. 添加依赖
dependencies {
    implementation 'com.github.xuetaotao:imagepicker:1.0.2'

    //RxJava2
    implementation 'io.reactivex.rxjava2:rxjava:2.2.21'
    implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'

    //RxPermissions  https://github.com/tbruyelle/RxPermissions
    implementation 'com.github.tbruyelle:rxpermissions:0.10.2'
}

c. 使用

fun imagePickerTest(view: View) {
        ImagePicker.with(this)
            .imagePickerListener(object : ImagePicker.ImagePickerListener {
                override fun onFailed(msg: String, code: String) {
                    Toast.makeText(this@MainActivity, msg + code, Toast.LENGTH_SHORT).show()
                }

                override fun onSuccess(imagePath: String) {
                    val bitmap = BitmapFactory.decodeFile(imagePath)
                    iv_image.setImageBitmap(bitmap)
                }
            })
            .compress(true)
            .crop(false)
            .isCamera(false)
            .startPick()
    }

官方网站的How to

备注:Gradle刷新缓存方法

注意 Gradle 会缓存SNAPSHOT内容,所以有时候你可能无法获取某个分支上的最新 build。Gradle 自身也提供的方法来控制这一点。你可以在 build.gradle 中要求 Gradle 总是拉取最新的 build 版本:

configurations.all {
    resolutionStrategy.cacheChangingModulesFor 0, 'seconds'//0秒刷新
}

configurations.all {

        resolutionStrategy { cacheChangingModulesFor 1, 'minutes' //1分钟刷新

        force 'com.squareup.okhttp3:okhttp:3.12.0' //强制使用某个库的某个版本}

}

你也可以通过命令行添加 --refresh-dependencies 来要求一次 gradle build 中额外地废除 cache 内容并从远程拉取最新的 build 版本。

Android 上传自己的依赖库让别人使用(github)

四、使用Maven Central发布

自己搞了一半,配置太难了放弃了,以后有时间再研究吧。附上大佬的文章

Mavencentral发布指南--再不行动起来,你的托管的library就没了

Maven 中央仓库提交Jar包全程指南

发布android库AAR至mavenCentral看这篇文章就可以了

五、自建Nexus

没有研究太细,就贴一下大佬的文章吧

Android 发布项目到阿里云服务器 Nexus仓库

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值