手把手教你上传安卓库到Central Portal

Maven项目通过CentralPortal上传到中央仓库【最新版】 中央仓库 maven 阅读详情

前言

最为一个热爱编码的安卓开发,工作这么多年,也喜欢写点自己爱用的库,奈何这样的代码越写越多,我就发现了一个很尴尬的问题。代码越堆越多,每次全局改点啥,就要挪来挪去。

其实很早之前也想过(并试过)上传到Maven仓库,比如本地搭建、阿里云私有的等等。但是都感觉限制性很高,然后也试过上传到mavenCentral,但是这个弄到一半,中途放弃了。

最近突然又想把这个事情办完算了,结果第一步就把我卡住了。

上面是啥意思呢?

简单来说就是以前的玩法不让玩了。然后又给了文档说明。

如果玩的话,要用新的玩法,我们这次,就是手把手教你,最新玩法怎么玩。官方文档地址:

https://central.sonatype.org/register/legacy/

注册账号

按照文档的意思,我们需要在这个网站注册登录

https://central.sonatype.com/

点击sign in 会出现如下界面:

这里我为了省事,直接选择用 github 账号授权登录。(在弹窗选择授权登录即可)

登录成功之后,我们选择:

正常情况下,新账号是Namespaces 选项卡下是没有任何内容的(我这里是已经注册好了一个Namespaces)。下一步我们就是去注册Namespaces。

注册Namespaces

找到Register New Namespace按钮,然后点击它。

会弹出如下界面:

这里我们填入我们的主域名即可。比如我买了个域名 fastcv.cc,那在这里填入cc.fastcv即可。

但是cc.fastcv我已经提交并且验证通过了,这里我就用fastcv.com来做演示。填入com.fastcv并提交之后,我们在Namespace选项卡下可以看到这个内容:

在这一步就是需要去验证这个域名是不是你的。

验证Namespace

我们点击Verify Namespace按钮

这里会给我们一段文本,比如这里的 “ssdiral7je”。

那怎么去验证呢?按照弹窗的提示,我们需要去我们域名里面创建一个Txt Record。

这是个啥?

以阿里云的域名来说,我们找到我们购买的域名后

点击进去查找域名解析

然后在域名解析里面找到解析设置。

再找到添加记录。

在添加记录弹窗里面配置如上信息后,再将之前的验证文本字符串填入到记录值的文本输入框里面。最后点击确定。就会在记录里面多出一条

这一步配置好之后,我们返回我们之前的这个页面

点击Confirm即可,然后等待验证结果即可。

怎么上传库?

在Namespace验证通过后,我们就可以准备去上传我们的库文件到Central Portal了。

因为安卓项目现在基本上都是gradle的项目配置。所以感兴趣的可以直接去官方文档看gradle的配置方式。

https://central.sonatype.org/publish/publish-portal-gradle/

在我写文档的这个时候,目前还没有官方出这个gradle插件。但是它推荐了一些用户自己实现的gradle插件:

这里我选择的是

地址如下:

https://github.com/yananhub/flying-gradle-plugin

安装它的说明文档结合我的实际情况,我的库文件module下的gradle配置如下:

plugins {
    alias(libs.plugins.android.library)
    alias(libs.plugins.kotlin.android)
    id("maven-publish")
    id("signing")
    id("tech.yanand.maven-central-publish") version ("1.3.0")
}

android {
    namespace = "cc.fastcv.line_number_clock"
    compileSdk = 34

    defaultConfig {
        minSdk = 24

        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
        consumerProguardFiles("consumer-rules.pro")
    }

    buildTypes {
        release {
            isMinifyEnabled = false
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
    }
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_11
        targetCompatibility = JavaVersion.VERSION_11
    }
    kotlinOptions {
        jvmTarget = "11"
    }
}

dependencies {

    implementation(libs.androidx.core.ktx)
    implementation(libs.androidx.appcompat)
    implementation(libs.material)
    testImplementation(libs.junit)
    androidTestImplementation(libs.androidx.junit)
    androidTestImplementation(libs.androidx.espresso.core)
}

publishing {
    publications {
        create<MavenPublication>("mavenJava") {
            afterEvaluate { artifact(tasks.getByName("bundleReleaseAar")) }
            groupId = "你的Namespace"
            artifactId = "库名称"
            version = "库版本"

            pom {
                name = "库的名称"
                description = "对库的描述"
                url = "https://github.com/fastcv-cc/LineNumberClock"
                // 许可证名称和地址
                licenses {
                    license {
                        name = "The Apache License, Version 2.0"
                        url = "http://www.apache.org/licenses/LICENSE-2.0.txt"
                    }
                }
                // 开发者信息
                developers {
                    developer {
                        name = "pisto"
                        email = "sayhigerry@gmail.com"
                    }
                }
                // 版本控制仓库地址
                scm {
                    url = "https://github.com/fastcv-cc/LineNumberClock"
                    connection = "scm:git:git://github.com/fastcv-cc/LineNumberClock.git"
                    developerConnection =
                        "scm:git:ssh://git@github.com:fastcv-cc/LineNumberClock.git"
                }
            }

        }
    }

    repositories {
    }
}


signing {
    sign(publishing.publications)
}

mavenCentral {
    authToken = rootProject.properties["authTokenValue"] as String
    // 上传是否应该自动发布。如果您希望手动执行此操作,请使用 'USER_MANAGED'。
    // 该属性是可选的,默认为 'AUTOMATIC'。
    publishingType = "AUTOMATIC"
    // 当发布类型为 'AUTOMATIC' 时,状态API获取 'PUBLISHING' 或 'PUBLISHED' 状态的最大等待时间
    // 或者当发布类型为 'USER_MANAGED' 时,获取 'VALIDATED' 状态。
    // 该属性是可选的,默认为60秒。
    maxWait = 60
}

最后在我们的项目根目录gradle.properties 文件中添加

signing.keyId=xxx
signing.password=xxx
signing.secretKeyRingFile=xxx
authTokenValue=xxx

这步配置完成之后,我们就可以使用以下命令将我们的库文件上传到Central Portal了。

./gradlew publishToMavenCentralPortal 

你问我这些信息从哪里获取?

不要急,我们接下来讲怎么获取这些配置信息

获取signing的相关配置信息

由于Central Portal会对我们上传的包进行签名验证。这里使用的签名采用的是公私钥(RSA)的模式,即私钥签名,公钥验证。所以我们需要先为项目生成一份公私钥对,并将公钥上传至公钥中心,再把私钥配置到项目中,为生成的包签名。

而GPG就是干这个活的,我的电脑是Mac,所以我以下记录的是Mac上关于GPG的操作过程。其它系统的大家到网上搜一下就行了,教程很多。

安装GPG

brew install gpg 

使用 GPG,生成公钥和私钥

在终端下执行命令

gpg --full-generate-key

输入命令后,一路选择默认到输入名字和邮箱的地方(回车就是选择默认的),输入你的名字和邮箱,中间有一次确认是否保存的选项,选择y即可。

在输入完名字和邮箱后,会有个新的选项出现,询问你是否需要修改信息,我们直接选择Okey(输入O)即可。接下来就是输入你的密码,然后确定就行。

整体大致如下:

千万要记住你的密码和相关信息哦!!!

查看密钥信息

gpg -k

可以看到刚才生成的密钥。

其中 183****BD5 为密钥指纹,指纹的后 8 位 「*****BD5」就是我们需要配置的 signing.keyId 的值。

你设置的密码就是 signing.password 的值。

导出私钥

gpg --export-secret-keys [密钥指纹] > private-key.gpg

使用以上命令导出我们的私钥。注意看我们这个命令执行的目录,生成的密钥就在这个目录。

然后我们将密钥放置在某个目录下,这个目录的路径就是 signing.secretKeyRingFile 的值。

上传公钥到公钥服务器

我们在前面说过,Central Portal会对我们上传的包进行签名验证,我们本地配置了私钥进行签名,但是我们的公钥Central Portal不知道,所以它会去公钥服务器里面根据我们的配置信息去找对应的公钥,然后做校验。

所以我们需要把我们的公钥上传到公钥服务器里面。

gpg --keyserver keyserver.ubuntu.com --send-keys [密钥指纹]

其中,keyserver.ubuntu.com 就是公钥服务器的地址,Central Portal校验签名就是从公钥服务器拉取。

目前支持的公钥服务器地址有三个:

  • pool.sks-keyservers.net
  • keyserver.ubuntu.com
  • keys.gnupg.net

如果一个地址访问失败,替换成换成其中任意一个都是可以的。

获取authTokenValue值

获取这个值我们需要回到我们的这个网站

https://central.sonatype.com/

选择View Account。

在弹窗里面复制它给我们的账号密码,然后找个Base64转码网站以

**username:password **的格式转码,获取到的Base64的编码就是我们需要的authTokenValue的值。

完成这一步之后,我们就可以通过命令去上传我们编码好的库文件了。

查看上传的库文件

在https://central.sonatype.com/ 里面点击这个

就可以看到你上传的库文件了,正常情况下,你的状态是推送中的状态,等待一段时间后就可以了。

如果使用自己的库文件

通过搜索自己库文件的名字。

点击进入,就可以看到相应的配置信息了。

使用 Python 和蒙特卡罗计算未来股价走势以及历史波动率和隐含波动率 蒙特卡罗模拟等工具使投资者能够洞察一系列潜在的未来。这远离了单纯的猜测,迈向了明智的、数据驱动的决策。 阅读详情

相关推荐

改善电流不匹配的级联电流镜布局设计 2002

模拟金属氧化物半导体 (MOS) 集成电路的性能在很大程度上取决于匹配精度的因素。 电流镜的匹配精度在模拟 IC 性能中尤为重要。 布局技术和器件尺寸被认为是可以在很大程度上改善匹配行为的主要因素。 尽管这些信息很重要,但对这两个因素的研究或研究有限。 在本文中,我们基于 Lan 等人 [1999] 提出的简单电流镜提出了一种新的级联电流镜布局技术。 Cascode电流镜的新布局在参数梯度存在的情况下改善了匹配特性。 讨论了跨晶体管有源区域的阈值梯度对电流镜匹配特性的影响。 使用 SPICE 仿真比较了新

Srfun的博客 4228

GPT与Gemini企业级能力对比:API优先vs工作流原生

大模型企业落地已超越单纯比拼参数或榜单分数,进入能力栈完整性竞争阶段。核心在于理解‘模型即服务(MaaS)’与‘AI即工作流(AI-as-Workflow)’两种技术范式——前者以OpenAI GPT为代表,强调可编排、可审计的原子化API能力;后者以Google Gemini为典型,深度耦合身份体系、终端策略与跨应用数据融合。这种差异直接决定企业在权限治理、数据主权、合规审计和低代码集成等关键场景的适配效率。尤其当面临‘gemini无法登录’‘gpt充值失败’等高频问题时,本质是底层权限模型与IT治理体系

weixin_34345753的博客 456

VL53L0X加盖玻片后精度暴跌?手把手教你完成串扰校准(CrossTalk Calibration)

本文详细解析了VL53L0X激光测距传感器加盖玻片后精度下降的原因,并提供了串扰校准(CrossTalk Calibration)的完整解决方案。通过分步指导和实用代码示例,帮助工程师恢复毫米级测距精度,适用于智能门锁、扫地机器人等应用场景。

weixin_33708432的博客 539

记一次从 Legacy OSSRH 到 Central Portal 进行迁移

使用以前的 OSSRH 账号登录 Central命名空间可以向 Central 发送邮件进行说明尽管不知道是否可以让他向我的新账号迁移,但是如果你不记得注册 OSSRH 时候的用户名与邮箱了,可以尝试一下,虽然希望会渺茫最后呢也是感叹一下 OSSRH 竟然是用户名+密码的方式登录的,在尝试邮箱+密码登录的时候不知道为什么不可以,或许是因为我将邮箱输入错误了吧。

子墨的日常 1252

CTF-Web习题:2019强网杯 UPLOAD

本题涉及知识点:代码审计、文件上传漏洞、反序列化漏洞

LJW123487的博客 1902

【银行测试】手机银行APP专项项目+测试点汇总(一)

1、手机银行APP转账项目讲解面试官:请介绍一下你所负责的模块如何进行的测试?求职者:好的,我最近测试的是XX银行的手机银行App项目。这个项目里面包含了转账、转账额度调整、网银转账、交易明细、添加账户、存款、投资理财、生活缴费等功能模块。我主要负责了转账模块,这个大模块中包含了智能转账、手机转账、语音转账、预约转账、收款人管理等5个子模块,我首先介绍一下我们生活中使用最多的手机转账子模块。对于转账需要关注的是转账前、转账中、转账后这三个状态下的测试。

m0_70102063的博客 1604

如何发布自己的项目到Maven Central Repository?

最近在看 Spring。依托Spring Framework写了一个轻量级的 ORM 框架,但是想把他上传到 Maven central repository,其他人引入 pom 文件就可以使用了。查看了一下网上的资料,发现大部分资料都是旧版通过 OSSRH 发布的教程比较麻烦,而且从 2024 年 3 月 12 日起,maven central reository 可以通过 Central Portal(中央门户)发布操作相对来说比较简单。

学员悟空的博客 1457

保姆级教程:用Fiddler+夜神模拟器搞定抖音App抓包(附SSL Pinning绕过实战)

本文提供了一套完整的移动端抓包解决方案,详细介绍了如何使用Fiddler和夜神模拟器进行抖音App抓包,并重点讲解了SSL Pinning绕过技术。通过Xposed框架和JustTrustMe模块的组合,实现高效抓包,适用于产品分析、竞品研究和安全测试等场景。

weixin_30855099的博客 421

AndroidStudio使用maven-publish发布aar至mavencentral中央仓库

AndroidStudio使用maven-publish发布aar至mavencentral中央仓库 1. 注册【sonatype】账号 2. 创建Group ID 3. 下载安装gnupg 4. 创建生成密钥 5. 配置maven-publish打包推送aar 6. 发布到mavencen

马腾蛟的博客 3481

SpringBoot实战教程-springboot概论

Spring Boot 是一个快速开发框架,能够快速的整合第三方框架,简化XML配置,全部采用注解形式,以及自动配置。内置web容器,帮助开发者能够实现快速开发,简化了应用系统的初始搭建以及开发过程。

鸟哥哥的专栏 4155

YOLOv11改进策略【模型轻量化】| 替换骨干网络为 GhostNet V1 基于 Ghost Module 和 Ghost Bottlenecks的轻量化网络结构

本文记录的是基于的YOLOv11网络模型轻量化方法研究。GhostNet中的Ghost模块和Ghost瓶颈结构是其轻量化的关键。Ghost模块克服了传统卷积层计算资源需求大的问题,Ghost瓶颈则合理设计了通道数量的变化以及与捷径连接的方式,能更好地在减少计算成本的同时保持较高性能,从而提升模型在移动设备上的应用能力和效率。

Limiiiing的博客 1430

这是一份详细&清晰的-上传Android-Library到JCenter-教程:如何使得自己的代码被别人优雅引用

Maven仓库 = 中央远程仓库。

2401_84149496的博客 861

学Simulink--环境感知场景实例:基于Simulink的毫米波雷达多目标跟踪仿真

本文介绍了基于Simulink的毫米波雷达多目标跟踪仿真系统,重点分析了FMCW雷达信号处理流程(Range/Doppler FFT、CFAR检测)和多目标跟踪算法(JPDA数据关联、EKF状态估计)。通过构建城市道路交叉场景,验证了系统在跟踪精度(位置误差<0.2m)、实时性(单帧处理24ms)和鲁棒性(ID切换率<5%)方面的性能优势,并提出了UKF滤波、多传感器融合等优化方向。该仿真系统为自动驾驶环境感知提供了实用的毫米波雷达跟踪解决方案。

amy_mhd的博客 92

Gradle 发布Jar到 Maven Central

Gradle 插件可创建一项publish任务,自动将所有 Java、Kotlin 或 Android 库上传到任何 Maven 实例。此插件基于Chris Banes 的初始实现 ,并进行了增强以添加 Kotlin 支持并跟上最新变化。生成后就会的到这个配置,这个配置的内容就是你所需要的 name,pasdword。这里直接复制我的配置即可,所有的变量都是可以改变的。如果你不知道我在说什么请重新查阅阶段一的详细教程,该插件内置了许多插件因此可以直接使用大部分功能。我们需要在里面配置密钥,但是注意不要将。

子墨的日常 2063

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

30分钟跑通流程:Android Library 发布 Maven Central 实战(附完整配置)

本文介绍了2026年最新版MavenCentral发布流程,将Android Library发布简化为三个关键步骤:1)注册Sonatype账号并创建Token;2)生成GPG签名密钥;3)使用Gradle插件配置发布。重点讲解了Sonatype账号申请、GPG密钥生成与导出方法,并提供了详细的Gradle配置示例,包括插件使用、pom文件设置和gradle.properties参数配置。最后通过执行Gradle任务完成发布,几分钟后即可在MavenCentral查看发布状态,使全球开发者能够通过imple

LIANGJIANGLI的专栏 650

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

2024.10 最新 Gradle 上传到 Maven Central 中央仓库

之前的都是旧的了,现在写一下新的,踩了不少坑。

weixin_73391279的博客 1575

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

AI画图不再写错字:ChatGPT Images 2.0实现文字可读性突破

文生图技术长期受限于文字渲染能力,‘AI画图写错字’成为商业落地的核心瓶颈。其本质是多模态对齐不足导致的文本-图像语义割裂,而非单纯分辨率或风格问题。DALL·E 3增强版通过‘生成即OCR自检’训练范式,强制模型在像素级理解汉字结构、字体特征与中文排版规则,显著提升文字可读性与提示词执行精度。该能力带来真实技术价值:将带文案图像的生成合格率从30%提升至85%以上,支持精准字体指定、中英文混排对齐、语义加权排版等工程化需求。典型应用场景覆盖公众号封面、电商主图、信息图生成、品牌VI延展及法律医疗文档可视化

aibiba0894的博客 823

工作中使用到的单词(软件开发)

1.エイリアス   alias 别名 powershell使用 get-help 命令时,会得到与此命令 相关(别名)的命令 2.プロキシ proxy 代 理 3.プロモート   promote 促进,提升   开发的系统新功能上线发布,有时会使用到这个词,比如 STプロモート 还有使用リリース这个词的。比如STリリース。个人认为两者含义相同。 4.見逃し み................................................................

sun0322 6万+

自定义组件上传到maven中央仓库2024实测可用最详细版

【代码】自定义组件上传到maven中央仓库2024实测可用最详细版。

m0_49605579的博客 1290

Android 开源库发布到MavenCentral,jitpack (gradle-maven-publish-plugin+io.github域名)

背景 如果你的aar库没有引用第三方库,也不需要远程仓库的话,只是想打成aar引用,那么看这个文章即可:https://blog.youkuaiyun.com/zx_android/article/details/111290928 如果你需要把本地引用了很多个第三方库的工程变成aar供别人远程使用的话,那么就需要上传到MavenCentral了。 如果你有自己的域名那么直接去看郭神的文章 如果你跟我一样,懒得去申请域名,就可以继续往下看了。 注册Sonatype账号 Sonatype公司是负责维护Maven Cent

Sir的专栏 2749

【免费下载】 使用gradle-maven-publish-plugin发布项目到Maven中央仓库指南

Maven中央仓库是Java/Kotlin生态中最重要、使用最广泛的公共仓库。对于开源项目来说,将库发布到Maven中央仓库可以让全球开发者更方便地使用你的项目。本文将详细介绍如何使用gradle-maven-publish-plugin插件将项目发布到Maven中央仓库。 ## 准备工作 在开始发布前,你需要完成以下准备工作: 1. **注册账号**:在Maven Central门户创建开...

gitblog_01167的博客 703

2024年2月后如何使用maven central发布自己的jar到中央仓库

在2024年2月1日,sonatype 终于放弃了原本的maven-central的注册方式,不再支持jira创建工单处理了下文介绍新的发布jar的流程。

不吃肥肉的傲寒 3217

具身智能 2026:启元人形机器人开发者生态的“安卓时刻”来了吗

一个贯穿全文的问题:人形机器人开发者生态,是否正从「封闭垂直」走向「开源平台化」?本文以开源底座的公开数据为标尺,盘点 SDK、URDF、仿真与技能分发的开放程度,并落回启元机器人的开源路径。所有关键数据均标注来源,文末附社区与学堂链接。

在北风吹起的时候加入我们的队伍 在秋雨到来的时候成为彼此的温暖 748

android-ad-cleaner:android免 Root 批量关闭系统开屏与营销推送

橘子,计算机视觉方向工程师,深耕 AIGC 与多媒体处理领域,专注技术实用化落地。本文为原创内容,转载请注明来源与作者。优快云 首发 | 版权所有 © 2026。

下载资源或查看教程前,请务必阅读置顶的《免责声明》 507

Android 14 SELinux策略深度解析

init 的全局公开约束(如 neverallow init execute_no_trans,放 public 才能约束所有分区的规则)这就是"哪些可见"的强制机制。alps_s0(MTK 工程)的 device/mediatek/sepolicy/basic/ 提供。所有分区(system/system_ext/product/vendor)都可引用。init的公开约束、跨分区共用的 type/attribute/neverallow。——vendor 的 .cil 只能引用 plat 的。

新时代农民工 103

Android 开发入门实践(二):Kotlin 空安全,从可空类型到安全访问

延续 NewsApp 项目中的新闻标题练习,记录 Kotlin 安全调用。

Easyhood的博客 277
上一篇: 记一次有趣的时钟效果复刻实现过程
下一篇: 这TextView也太闪了,咋做的?
fastcv
博客等级 码龄10年 90粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值