将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 小时前
Jetpack系列(二):Lifecycle与LiveData结合,打造响应式UI
android·android jetpack
kk爱闹3 小时前
【挑战14天学完python和pytorch】- day01
android·pytorch·python
每次的天空5 小时前
Android-自定义View的实战学习总结
android·学习·kotlin·音视频
恋猫de小郭5 小时前
Flutter Widget Preview 功能已合并到 master,提前在体验毛坯的预览支持
android·flutter·ios
断剑重铸之日6 小时前
Android自定义相机开发(类似OCR扫描相机)
android
随心最为安6 小时前
Android Library Maven 发布完整流程指南
android
岁月玲珑6 小时前
【使用Android Studio调试手机app时候手机老掉线问题】
android·ide·android studio
还鮟10 小时前
CTF Web的数组巧用
android
小蜜蜂嗡嗡12 小时前
Android Studio flutter项目运行、打包时间太长
android·flutter·android studio
aqi0012 小时前
FFmpeg开发笔记(七十一)使用国产的QPlayer2实现双播放器观看视频
android·ffmpeg·音视频·流媒体