3

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

 1 year ago
source link: https://www.cnblogs.com/xiaxveliang/p/17142921.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

先说一下,为什么会有这篇文章?
最初接触 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的构建工具 https://jitpack.io/

  • JitPack 简介
  • JitPack 使用及案例举例
  • 案例源码下载

一、JitPack简介

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

jitpack
  • JitPack 允许开发者将 GitHub、GitLab上的JVMAndroid 项目发布到 Jitpack 的 Maven 仓库
  • JitPack 通过搜索开发者输入的git仓库链接地址的形式,自动查找Git上的工程代码,并进行自动打包、构建依赖库(对于开发者来说,基本实现了一键发布依赖库);
  • JitPack 允许开发者将 Git 存储库(包括存储库的任何一个分支分支的某一次commit提交)以不同版本的形式进行构建、发布为maven依赖库,便于开发者进行版本发布与维护;
  • 使用价格方面,对于开源项目 JitPack 是完全免费的
    https://jitpack.io/private#subscribe

二、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版本https://services.gradle.org/distributions/gradle-6.1.1-all.zip
插件版本com.android.tools.build:gradle:3.6.1

举例代码中 jitpack 编译结果:
https://javadoc.jitpack.io/com/github/AndroidAppCodeDemo/jitpack_MultiFlavorLibDemo/gradle_6_1-SNAPSHOT/

jitpack编译结果

下边通过以下两个方面进行详细说明:

  • 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版本https://services.gradle.org/distributions/gradle-7.5-bin.zip
插件版本com.android.tools.build:gradle:7.4.1

举例代码中 jitpack 编译结果:
https://javadoc.jitpack.io/com/github/AndroidAppCodeDemo/jitpack_MultiFlavorLibDemo/gradle_7_5-SNAPSHOT/

jitpack编译结果

下边通过以下两个方面进行详细说明:

  • 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插件:
    android developer 使用 Maven Publish 插件
    因此,在对应工程要发布的依赖Module添加如下配置
plugins {
	// 1、添加 maven-publish
    id 'maven-publish'
}
  • 添加 发布渠道包配置
    发布渠道依赖包的配置信息,主要是参考Android Developer Gradle-API-7.1 LibraryPublishing:
    android developer gradle-api-7.1 LibraryPublishing
    在对应工程要发布的依赖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' 
}

三、案例源码

本文所使用的案例工程 下载地址 如下:
https://download.csdn.net/download/aiwusheng/87473529

源码中包含两个案例,分别对应Gradle 6.1与Gradle 7.5两个版本:

  • jitpack_MultiFlavorLibDemo_gradle_6_1
  • jitpack_MultiFlavorLibDemo_gradle_7_5
jitpack_MultiFlavor_gradle61 与 gradle75

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

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

android developer 使用 Maven Publish 插件:
https://developer.android.google.cn/studio/build/maven-publish-plugin?hl=zh-cn

android developer gradle-api-7.1:
https://developer.android.com/reference/tools/gradle-api/7.1/com/android/build/api/dsl/LibraryPublishing

android developer gradle-api-8.0:
https://developer.android.google.cn/reference/tools/gradle-api/8.0/com/android/build/api/dsl/LibraryPublishing

android developer 配置发布内容变体:
https://developer.android.google.cn/studio/publish-library/configure-pub-variants?hl=zh-cn

gradle docs publishing_maven:
https://docs.gradle.org/current/userguide/publishing_maven.html

= THE END =

文章首发于公众号”CODING技术小馆“,如果文章对您有帮助,欢迎关注我的公众号。

欢迎关注我的公众号

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK