先说一下,为什么会有这篇文章? 开始触摸 JitPack 时,发现网络上大量涉及JitPack的教程不可用。经过两天的研讨才搞明白: 1.不同的gradle版别,gradle api运用方法 与 JitPack装备方法均有所差异:运用JitPack发布Maven依靠库,其装备脚本与开发者运用的 gradle 版别是强相关的,因而不同的gradle版别,其API运用方法与 JitPack装备需做对应调整2.官方事例不好使:JitPack的官方事例为 multi-flavor-lib-demo ,2018年最后一次更新,其运用的 gradle 版别相对较低,当时的gradle版别无法运用。 以上两点,可能是网络文章质量较低的主要原因,因而这儿将我两天来的学习成果共享给朋友们,协助大家节约一些时间。

Android运用开发过程中,开发者通常经过 gradle dependencies 导入第三方依靠库,那么当开发者的SDK中间件被其他项目依靠时,该怎么发布自己的maven依靠库呢? 这儿推荐一个Github的构建东西 jitpack.io/ 。

  • JitPack 简介
  • JitPack 运用及事例举例
  • 事例源码下载

一、JitPack简介

JitPack一 个构建与发布 Git 存储库的快捷服务可用于在 GitHub、GitLab 上打包、发布与部署依靠库便于运用者经过maven依靠的形式引证开发者发布的依靠库

一文详解 jitpack 多渠道maven库发布

  • JitPack 答应开发者将 GitHub、GitLab上的JVMAndroid 项目发布到 Jitpack 的 Maven 库房
  • JitPack 经过查找开发者输入的git库房链接地址的形式,主动查找Git上的工程代码,并进行主动打包、构建依靠库(关于开发者来说,根本实现了一键发布依靠库);
  • JitPack 答应开发者将 Git 存储库(包括存储库的任何一个分支分支的某一次commit提交)以不同版别的形式进行构建、发布为maven依靠库,便于开发者进行版别发布与维护;
  • 运用价格方面,关于开源项目 JitPack 是完全免费的
    一文详解 jitpack 多渠道maven库发布

二、JitPack 运用

装备jitpack需采用gradle API编写装备脚本,随着gradle版别的更新,相关API及运用方法也有了必定的改变。 这儿别离基于 gradle 6.1gradle 7.5 举例 jitpack 多途径发布。

  • gradle 6.1 装备 JitPack
  • gradle 7.5 装备 JitPack

2.1 gradle6.1装备JitPack

举例代码中运用的 gradle版别 与 插件版别 如下: gradle版别: services.gradle.org/distributio…
插件版别com.android.tools.build:gradle:3.6.1

举例代码中 jitpack 编译成果: javadoc.jitpack.io/com/github/…

一文详解 jitpack 多渠道maven库发布

下边经过以下两个方面进行具体阐明:

  • gradle 6.1 运用 jitpack 进行多途径 Maven 依靠库发布具体举例阐明;
  • 怎么引证 jitpack Maven发布的多途径依靠库?

2.1.1 jitpack多途径装备

gradle 6.1 运用 jitpack 进行多途径 Maven 依靠库发布具体举例阐明: 假定 要发布的库 其途径装备信息如下:

// 途径举例
flavorDimensions "vendor"
productFlavors {
	production {
		dimension "vendor"
		buildConfigField 'String', 'ENV', '"PRODUCTION"'
	}
	sandbox {
		dimension "vendor"
		buildConfigField 'String', 'ENV', '"SANDBOX"'
	}
}
  • 首先,需增加 android-maven-gradle-plugin插件: 在Android工程根目录build.gradle中,增加 android-maven-gradle-plugin插件。
buildscript {
    dependencies {
        // 1、增加 android-maven-gradle-plugin
        classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
    }
}
  • 增加 发布途径包装备: 按照如下代码举例,在对应Module工程build.gradle增加如下4步装备
// 2、运用插件
apply plugin: 'com.github.dcendents.android-maven'
android {
	// ...
    // 3、默认发布途径
    defaultPublishConfig "productionRelease"
    // 4、true to publish all flavour artifacts
    publishNonDefault true
}
// 5、增加“发布多途径依靠包装备”
if (android.productFlavors.size() > 0) {
    android.libraryVariants.all { variant ->
        if (variant.name.toLowerCase().contains("debug")) {
            return
        }
        def bundleTask = tasks["bundle${variant.name.capitalize()}Aar"]
        artifacts {
            archives(bundleTask.archivePath) {
                classifier variant.flavorName
                builtBy bundleTask
                name = project.name
            }
        }
    }
}

以上的5个过程参阅了 jitpack-io官方 multi-flavor-lib-demo 样例工程

2.1.2 引证 jitpack 发布的多途径依靠库

在上一步中,咱们顺利发布了 maven 依靠库,这儿记载一下怎么运用咱们发布的依靠库?

  • 在Android工程根目录build.gradle增加 jitpack 库房地址
allprojects {
	repositories {
		// 1、增加 jitpack 库房地址
		maven { url 'https://jitpack.io' }
	}
} 
  • 在对应Android工程引证依靠包的Module增加如下依靠
dependencies {
	// 2、增加库文件依靠:
	// implementation "com.github.<USER>.<REPO>:<library-module>:<version>:<flavor-name>@aar"
	// production 途径  
 	implementation 'com.github.AndroidAppCodeDemo:jitpack_MultiFlavorLibDemo:gradle_6_1-SNAPSHOT:production@aar' 
 	// sandbox 途径  
 	implementation 'com.github.AndroidAppCodeDemo:jitpack_MultiFlavorLibDemo:gradle_6_1-SNAPSHOT:sandbox@aar' 
}

2.2 gradle7.5装备JitPack

举例代码中运用的 gradle版别 与 插件版别 如下: gradle版别: services.gradle.org/distributio… 插件版别com.android.tools.build:gradle:7.4.1

举例代码中 jitpack 编译成果: javadoc.jitpack.io/com/github/…

一文详解 jitpack 多渠道maven库发布

下边经过以下两个方面进行具体阐明:

  • gradle 7.5 运用 jitpack 进行多途径 Maven 依靠库发布具体举例阐明;
  • 怎么引证 jitpack Maven发布的多途径依靠库?

2.2.1 jitpack多途径装备

gradle 7.5 运用 jitpack 进行多途径 Maven 依靠库发布具体举例阐明(假定 仍采用上一步事例中的途径装备信息):

  • 运用 maven-publis 插件: 依据 android developer:Maven Publish 中介绍,Android gradle 插件3.6以上版别可以运用 Maven Publish插件:
    一文详解 jitpack 多渠道maven库发布
    因而,在对应工程要发布的依靠Module增加如下装备
plugins {
	// 1、增加 maven-publish
    id 'maven-publish'
}
  • 增加 发布途径包装备: 发布途径依靠包的装备信息,主要是参阅Android Developer Gradle-API-7.1 LibraryPublishing:
    一文详解 jitpack 多渠道maven库发布
    在对应工程要发布的依靠Module增加如下装备
android {
    // 2、默认途径
    defaultPublishConfig "productionRelease"
    // 3、发布途径装备
    publishing {
        // Publishes all build variants with "vendor" component
        multipleVariants("vendor") {
        	// 只发布release包
            includeBuildTypeValues("release")
            includeFlavorDimensionAndValues("vendor", "production","sandbox")
        }
    }
}
// 4、依靠包发布装备信息
afterEvaluate {
    publishing {
        publications {
            allVariants(MavenPublication) {
                // 发布后的依靠包按如下装备进行引证:com.github.AndroidAppCodeDemo:jitpack_MultiFlavorLibDemo:1.0.2
                from components.vendor // 表示发布 release
                groupId = 'com.github.AndroidAppCodeDemo' // 这个是依靠库的组 id
                artifactId = 'jitpack_MultiFlavorLibDemo' // 依靠库的称号
                version = "1.0.2"     // 当时版别依靠库版别号
            }
        }
        repositories {
            maven {
                def baseUrl = buildDir.getParent()
                def releasesRepoUrl = "$baseUrl/repos/releases"
                def snapshotsRepoUrl = "$baseUrl/repos/snapshots"
                url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl
            }
        }
    }
}
// 5、生成source jar
task generateSourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier 'sources'
}

2.2.2 引证 jitpack 发布的多途径依靠库

在上一步中,咱们顺利发布了 maven 依靠库,这儿记载一下怎么运用咱们发布的依靠库?

  • 在Android工程根目录build.gradle增加 jitpack 库房地址
allprojects {
	repositories {
		// 1、增加 jitpack 库房地址
		maven { url 'https://jitpack.io' }
	}
} 
  • 在对应Android工程引证依靠包的Module增加如下依靠
dependencies {
	// 2、增加库文件依靠:
	// implementation "com.github.<USER>.<REPO>:<library-module>:<version>:<flavor-name>@aar"
	// production 途径  
 	implementation 'com.github.AndroidAppCodeDemo:jitpack_MultiFlavorLibDemo:gradle_7_5-SNAPSHOT:production@aar' 
 	// sandbox 途径  
 	implementation 'com.github.AndroidAppCodeDemo:jitpack_MultiFlavorLibDemo:gradle_7_5-SNAPSHOT:sandbox@aar' 
}

三、事例源码

本文所运用的事例工程 下载地址 如下: download.csdn.net/download/ai…

源码中包括两个事例,别离对应Gradle 6.1与Gradle 7.5两个版别:

  • jitpack_MultiFlavorLibDemo_gradle_6_1
  • jitpack_MultiFlavorLibDemo_gradle_7_5

一文详解 jitpack 多渠道maven库发布

参阅

jitpack-io官方multi-flavor-lib-demo: github.com/jitpack-io/…

jitpack-io官方jitpack-android-sample: github.com/jitpack-io/…

android developer 运用 Maven Publish 插件: developer.android.google.cn/studio/buil…

android developer gradle-api-7.1: developer.android.com/reference/t…

android developer gradle-api-8.0: developer.android.google.cn/reference/t…

android developer 装备发布内容变体: developer.android.google.cn/studio/publ…

gradle docs publishing_maven: docs.gradle.org/current/use…

= THE END =

文章首发于大众号”CODING技术小馆“,假如文章对您有协助,欢迎重视我的大众号。