将Android Library项目发布到JitPack仓库

将项目代码导入 Github

1.将本地项目目录初始化为 Git 仓库。 默认情况下,初始分支称为 main;

如果使用 Git 2.28.0 或更高版本,则可以使用 -b 设置默认分支的名称。

git init -b main

如果使用 Git 2.27.1 或更低版本,则可以使用 git symbolic-ref 设置默认分支的名称。

git init && git symbolic-ref HEAD refs/heads/main

2.在新的本地仓库中添加文件。 这会暂存它们用于第一次提交。

$ git add .

Adds the files in the local repository and stages them for commit. 若要取消暂存文件,请使用"git reset HEAD YOUR-FILE"。

3.提交暂存在本地仓库中的文件。

$ git commit -m "First commit"

Commits the tracked changes and prepares them to be pushed to a remote repository. 要删除此提交并修改文件,请使用 'git reset --soft HEAD~1' 并再次提交和添加文件。

4.在 GitHub.com 上创建一个新存储库。 为避免错误,请勿使用 README、许可或 gitignore 文件初始化新存储库。 您可以在项目推送到 GitHub 之后添加这些文件。

5.在存储库主页,单击Code 复制远程存储库URL,这里我们使用SSH URL。

使用SSH进行连接,需要新增 SSH 密钥到 GitHub 帐户,如果已存在可跳过。

添加方法参考下面这个连接

https://docs.github.com/zh/authentication/connecting-to-github-with-ssh/working-with-ssh-key-passphrases

6.本地仓库中添加远程存储库的 URL(将在其中推送本地存储库),请运行以下命令。 将 REMOTE-URL 替换为 前面复制的完整URL。

git remote add origin REMOTE-URL

要验证远程 URL 设置是否正确,请运行以下命令。

git remote -v

origin git@github.com:cncomer/okpermission.git (fetch)

origin git@github.com:cncomer/okpermission.git (push)

7.添加maven-publish插件

要在JitPack.io上构建Android库,我们还需要在build.gradle文件中添加maven-publish插件,下面是可供参考的相关配置和说明。

java 复制代码
plugins {
    id 'com.android.library'
   //添加maven-publish插件
    id 'maven-publish'
}


// 在maven-publish插件的基础使用中是不包含上传aar包的源码。
// 增加上传源码的task,如:
tasks.register("sourceJar", Jar) {
    // 通过 android.sourceSets.main.java.srcDirs 指定的源码,只能识别到 Java 文件,而 kt 文件被忽略了,但 通过查看官方文档可以知道,from 函数是可以指定源码路径的,
    // 所以这里直接把 from 函数的参数替换为 源码路径,如以下代码
    from android.sourceSets.main.java.getSrcDirs() // 源码路径
    archiveClassifier = "sources"
}

//publishing用于配置项目发布相关信息,可以配置的信息有两个:repositories 和 publications
publishing {
    // 配置maven 仓库
    repositories {
        // 本地仓库位于USER_HOME/.m2/repository
        mavenLocal()
//        // 其他maven仓库
//        maven { url uri('/Users/h__d/Desktop/1') }
//        // aliyun镜像仓库
//        maven {
//            // 凭证 访问仓库的 账号和密码
//            credentials {
//                username 'username' // 仓库发布用户名
//                password 'password' // 仓库发布用户密码
//            }
//            // 仓库地址
//            url 'https://maven.aliyun.com/nexus/content/groups/public/'
//        }

    }

    // 配置需要发布的jar的信息,即aar包的信息。publications是一个容器,类型是 PublicationContainer,其可以配置的信息类型是MavenPublication,可以理解成是一个列表集合,
    // 而集合中存储的对象是 MavenPublication,而对象的名称可以由自己随便定义。 所以 publications 也是可以配置多个的,如:release
    publications {
        // 任务名称:release  (名称可以随便定义)比如release表示发布正式包,debug表示snapshot包
        release(MavenPublication) {
            // 上传指定aar包的方式有两种
            // 依赖 bundleReleaseAar 任务,并上传其产出的aar
            afterEvaluate { artifact(tasks.getByName("bundleReleaseAar")) } // 方式一:生成aar包
            // artifact "$buildDir/outputs/aar/${project.name}-release.aar" // 方式二:指定生成的aar路径
            groupId = "com.github.cncomer"
            artifactId = "okpermission"
            version = "1.0.0"

            artifact sourceJar
            // 依赖传递
            // 经过基础与上传源码后,是能正常依赖与使用的,但是aar包原本依赖的一下第三方包是不会自动依赖,需要手动添加依赖。
            // 把library中的依赖信息,手动添加到 pom 文件中,就可以完成依赖传递,如下:
            // pom文件中声明依赖,从而传递到使用方,注意需要--no-configuration-cache选项
            pom.withXml {
                def dependenciesNode = asNode().appendNode('dependencies')
                configurations.implementation.allDependencies.each {
                    // 避免出现空节点或 artifactId=unspecified 的节点
                    if (it.group != null && (it.name != null && "unspecified" != it.name) && it.version != null) {
                        println "dependency=${it.toString()}"
                        def dependencyNode = dependenciesNode.appendNode('dependency')
                        dependencyNode.appendNode('groupId', it.group)
                        dependencyNode.appendNode('artifactId', it.name)
                        dependencyNode.appendNode('version', it.version)
                        dependencyNode.appendNode('scope', 'implementation')
                    }
                }
            }
        }
    }
}

执行下面的任务检查库是否能安装到mavenLocal($HOME/.m2/repository)

./gradlew publishToMavenLocal

// or if you named your publication "release"

./gradlew publishReleasePublicationToMavenLocal

执行成功后会输出BUILD SUCCESSFUL。

在USER_HOME.m2/repository下生成了软件包文件。

8.添加jitpack.yml配置文件

JitPack.io默认的构建环境是java8,如果我们的项目使用的gradle插件版本8.5.0,需要Java17,就需要在根项目创建jitpack.yml文件,指定Java版本。

参考Building :: Documentation for JitPack.io

//jitpack.yml

jdk:

  • openjdk17

如果需要一个指定的版本,可以输入以下内容:

//jitpack.yml

before_install:

  • sdk install java 11.0.10-open

  • sdk use java 11.0.10-open

否则可能在JitPack上看到编译错误

或者

这些编译错误都是Gradle插件所需的java版本高于编译环境的java版本导致的。我们可以从Android Studio设置里查看gradle使用的java版本。

9.将本地存储库推送到 GitHub.com,请运行以下命令。

git push -u origin main

如果默认分支并非名为"main",请将"main"替换为默认分支的名称。

-u 的作用是将本地的分支与远程的对应分支关联起来,‌这样在后续的操作中,可以直接使用 git push 或 git pull 命令来同步这两个分支,‌而无需每次都指定远程仓库名和分支名。‌

此时可能会报错,比如

如果前面在Github上创建存储库的时候选择了创建README、.gitignore,就会碰到这个问题。

大概意思就是需要先pull更新一下,然而git pull origin main的时候又提示

git pull fatal: refusing to merge unrelated histories

这个错误发生在尝试使用git pull命令合并两个独立的git仓库时。Git拒绝合并没有共同祖先的两个分支的历史记录,因为这样的合并可能会导致数据丢失。自Git 2.9版本以后,默认情况下,如果尝试合并两个没有共同历史的分支,Git会拒绝进行合并,并提示这是一个"unrelated histories"错误。

解决方法:

你可以使用--allow-unrelated-histories选项来允许这样的合并操作。执行以下命令:

git pull --allow-unrelated-histories

这将允许Git合并两个独立的历史,进行不带控制的合并。如果你确信这两个仓库之间的合并是有意为之,这样做是安全的。如果不确定,你可能需要仔细检查合并的结果,确保没有丢失重要的更改。

$ git pull --allow-unrelated-histories origin main

From github.com:cncomer/okpermission

* branch main -> FETCH_HEAD

CONFLICT (add/add): Merge conflict in .gitignore

Auto-merging .gitignore

Automatic merge failed; fix conflicts and then commit the result.

提示有冲突,解决后commit,然后再git push -u origin main,正常提交到了Github。

Github 上创建存储库的发行版

在存储库主页右边的Release处会显示当前项目的最新发行版信息,我们现在还没有,所以点击Create a new release来创建一个。

这里要注意下,发行版需要基于某个tag, 如果没有必须先创建一个,否则没法下一步。

本地仓库中添加一个名为1.0.0的tag

git tag 1.0.0

接着将tag推送到Github

git push origin 1.0.0

我们回到创建发行版编辑界面,可以选择我们刚才创建的tag,来创建对应的发行版,创建完成后该发行版会自动在JitPack执行构建,并发布到JitPack仓库。

添加 JitPack 仓库依赖

在JitPack.io输入Git repo url,点击Look up检索。

如果Log下面对应的图标是绿色的,就代表库项目构建成功了,可以作为依赖项使用了。

点击Get it, 就会看到添加依赖的方法。

Step 1. 在根项目settings.gradle文件中添加JitPack仓库,一般添加在repositories末尾。

java 复制代码
dependencyResolutionManagement {
	repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
	repositories {
		//其他仓库
		//JitPack仓库
		maven { url 'https://jitpack.io' }
	}
}

Step 2. 在项目build.gradle中添加依赖。

java 复制代码
dependencies {
	implementation 'com.github.cncomer:okpermission:1.0.0'
}

点击Log查看构建状态:

相关推荐
檀越剑指大厂1 小时前
容器化 Android 开发效率:cpolar 内网穿透服务优化远程协作流程
android
MiyamuraMiyako2 小时前
从 0 到发布:Gradle 插件双平台(MavenCentral + Plugin Portal)发布记录与避坑
android
NRatel3 小时前
Unity 游戏提升 Android TargetVersion 相关记录
android·游戏·unity·提升版本
叽哥5 小时前
Kotlin学习第 1 课:Kotlin 入门准备:搭建学习环境与认知基础
android·java·kotlin
风往哪边走6 小时前
创建自定义语音录制View
android·前端
用户2018792831676 小时前
事件分发之“官僚主义”?或“绕圈”的艺术
android
用户2018792831676 小时前
Android事件分发为何喜欢“兜圈子”?不做个“敞亮人”!
android
Kapaseker7 小时前
你一定会喜欢的 Compose 形变动画
android
QuZhengRong8 小时前
【数据库】Navicat 导入 Excel 数据乱码问题的解决方法
android·数据库·excel
zhangphil9 小时前
Android Coil3视频封面抽取封面帧存Disk缓存,Kotlin(2)
android·kotlin