发布jar和aar到github

对,你没看错!jar和aar也可以发布到github上。

而且依赖库可以写成这样子maven { url 'https://dwvip.github.io/repo' },如果你有自己的域名,还可以更酷。

最近项目中需要对外提供sdk,但是项目的module太多,而且android中一个module是不能把另一个aar打进去的,
开始想过fat-aar的方案,最后还是放弃了。一是作者已经不维护了,二是因为aar太多了,在合并过程中你不知道会遇到什么奇怪的问题。
所以,最终确定把我们的sdk发布到maven仓库上供外部使用。第一步,发布到github上。于是就有了这篇文章。

aar打包参考了https://www.jianshu.com/p/6c1d2688ed2d/


生成jar到本地maven仓库

  • module的build.gradle
1
2
3
4
5
apply plugin: 'java-library'
jar {
version = '0.2.0'
}
apply from: '../maven-release-jar.gradle'
  • maven-release-jar.gradle
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
apply plugin: "maven-publish"
publishing {
publications {
maven(MavenPublication) {
groupId 'com.dwvip.demolib'
artifactId project.name
version jar.version
//若是war包,就写components.web,若是jar包,就写components.java
from components.java
}
}
repositories {
maven {
url = 'file://' + new File(rootDir.parentFile, 'dwvipRepo').absolutePath
}
}
}
  • 执行./gradlew publish在demoLib的同级目录dwvipRepo下生成jar及pom等文件

生成aar到本地maven仓库

  • module的build.gradle
1
2
3
apply plugin: 'com.android.library'
...
apply from: '../maven-release-aar.gradle'
  • 如果有flavor需要指定默认flavor(怎么通过脚本指定?)
1
2
3
4
5
6
7
android {
defaultPublishConfig 'xiaomiRelease'
productFlavors {
xiaomi {
}
}
}
  • maven-release-aar.gradle
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
apply plugin: 'maven'
ext {// ext is a gradle closure allowing the declaration of global properties
PUBLISH_GROUP_ID = 'com.dwvip.demolib'
PUBLISH_ARTIFACT_ID = project.name
PUBLISH_VERSION = android.defaultConfig.versionName
}
uploadArchives {
repositories.mavenDeployer {
def localMavenRepo = 'file://' + new File(rootDir.parentFile, 'dwvipRepo').absolutePath
repository(url: localMavenRepo)
pom.project {
groupId project.PUBLISH_GROUP_ID
artifactId project.PUBLISH_ARTIFACT_ID
version project.PUBLISH_VERSION
}
}
}
  • 执行gradle uploadArchives在demoLib的同级目录dwvipRepo下生成aar及pom等文件
  • project 的build.gradle
1
2
3
4
5
6
7
allprojects {
repositories {
//引地本地生成的jar及aar
maven { url 'file://' + new File(rootDir.parentFile, 'dwvipRepo').absolutePath }
....
}
}
  • 使用刚刚生成的jar、aar
1
2
implementation 'com.dwvip.demolib:droidLib:1.0'
implementation 'com.dwvip.demolib:javaLib:0.2.0'

上传至github

将dwvipRepo下整个文件夹上传至Github(注意,要上传的是完整的路径)。我的仓库地址是https://github.com/dwvip/repo/ 。然后maven地址就可以用github的线上地址了:

maven { url 'https://github.com/dwvip/repo/raw/master' }

怎么用user.github.io这样的地址?

GitHub Pages大家都知道,只要把https://github.com/dwvip/repo/ 设置成GitHub Pages就可以了。然后仓库地址可以改成这样:

maven { url 'https://dwvip.github.io/repo' }

并且访问https://dwvip.github.io/repo/ 可以看到repo的首页,是不是很专业的样子?

没有demo说代码都是耍流氓

以上代码及操作步骤都在这个demo里。https://github.com/andych008/demoLib/

  • javaLib是生成jar的示例
  • droidLib是生成aar的示例
  • app引用原始的module
    1
    2
    implementation project(':droidLib')
    implementation project(':javaLib')
  • app2引用javaLib和droidLib生成的jar及aar
    1
    2
    implementation 'com.dwvip.demolib:droidLib:1.0'
    implementation 'com.dwvip.demolib:javaLib:0.2.0'