Android最简化发布模块到mavenCentral

最近折腾jitpack发布,发现他对于项目结构要求比较严格。基本标配就是一个library目录加app,和settings.gradle,gradle这样的配置才行。多模块或者没有模块都比较麻烦。而且之前我遇到过一次,编译等了足足8个小时。

今天研究了mavenCentral,借助神迹github插件,现在已经十分轻松,而且很方便在android studio中操作。直接推荐。

1. 注册

central.sonatype

推荐直接使用github登录即可。官方推荐使用github,能分担他们的服务压力。

2. namespaces

检查是否有Namespaces, 如图:

没有的话,点击Register New Namespace创建。
namespace

3. UserName和Password

登录 Sonatype Central Portal

点击右上角用户头像 → View User Tokens

进入 Generate User Token

记录生成的 usernamepassword,保存好,后续不可见,后面使用1️⃣。

4. GPG

复制代码
# 安装 GPG
brew install gnupg

# 安装 pinentry-mac(用于密码输入)
brew install pinentry-mac

# 验证安装
gpg --version

也可以选择,自己下载:下载地址

安装完成后在控制台输入gpg --version,即可查看版本号。

生成gpg密钥对:

复制代码
# 生成密钥(推荐使用 RSA 4096)
gpg --full-generate-key

操作(这里最后的passphrase密码,后面有用2️⃣):

复制代码
请选择您要使用的密钥类型:
   (1) RSA 和 RSA
   (2) DSA 和 Elgamal
   (3) DSA(仅用于签名)
   (4) RSA(仅用于签名)
   (9) ECC(签名和加密)
  (10) ECC(仅用于签名)
您的选择是? 1

RSA 密钥的长度应在 1024 位与 4096 位之间。
您想要使用的密钥长度?(3072) 4096

请设定这个密钥的有效期限。
         0 = 密钥永不过期
密钥的有效期限是?(0) 0

真实姓名: Your Name
电子邮件地址: your-email@example.com
注释: Maven Central Deploy Key

# 设置一个强密码(passphrase),后续需要使用

查看(丢失了可以重复查看,后面有用3️⃣):

复制代码
# 列出所有密钥
gpg --list-keys

# 列出私钥及 keygrip(用于免密配置)
gpg --list-secret-keys --keyid-format LONG

### 输出结果:
----------------------------------
pub   rsa4096/123213131423 2026-01-01 [SC]
      xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxABCD1234
uid                 [ultimate] Your Name <your-email@example.com>
sub   rsa4096/XXXXXXXXXXXXXXXX 2026-01-01 [E]

上传到公开的密钥服务器(任一成功即可) :

复制代码
gpg --keyserver keys.openpgp.org --send-keys xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxABCD1234
gpg --keyserver pgp.mit.edu --send-keys xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxABCD1234
gpg --keyserver keyserver.ubuntu.com --send-keys xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxABCD1234

导出(后面有用4️⃣):

复制代码
gpg --export-secret-keys -o /Documents/xxx/xxx/secring.gpg

5. 配置属性

接下来,完形填空。创建配置文件,并添加上面操作的:1️⃣,2️⃣,3️⃣,4️⃣。其中3️⃣ 这个ID,注意只要最后的8位

复制代码
touch ~/.gradle/gradle.properties

# 1️⃣
mavenCentralUsername=2xxxXx
mavenCentralPassword=Sf111111xxxxdxxxxdddxxxK
# 2️⃣
signing.password=xxxx
# 3️⃣ 
signing.keyId=abcd1234 
# 4️⃣
signing.secretKeyRingFile=/Users/xxx/XXX/secring.gpg

6. 集成模块插件

直接在module的build.gradle中集成:

kotlin 复制代码
plugins {
		...
    id("com.vanniktech.maven.publish") version "0.35.0"
}

mavenPublishing {
  publishToMavenCentral()

  signAllPublications()
}

mavenPublishing {
  coordinates("com.example.mylibrary", "library-name", "1.0.3")

  pom {
    name = "My Library"
    description = "A description of what my library does."
    inceptionYear = "2026"
    url = "https://github.com/username/mylibrary/"
    licenses {
      license {
        name = "The Apache License, Version 2.0"
        url = "http://www.apache.org/licenses/LICENSE-2.0.txt"
        distribution = "http://www.apache.org/licenses/LICENSE-2.0.txt"
      }
    }
    developers {
      developer {
        id = "username"
        name = "User Name"
        url = "https://github.com/username/"
      }
    }
    scm {
      url = "https://github.com/username/mylibrary/"
      connection = "scm:git:git://github.com/username/mylibrary.git"
      developerConnection = "scm:git:ssh://git@github.com/username/mylibrary.git"
    }
  }
}

多个模块的时候,复制这些到其他子模块。修改其他的配置version,name等模块信息。

7. 发布

然后选择模块下的publishToMavenCentral,点击。你不用编译,他自己会编译。

注意这个时候,还没有发布:

再上到publishing。点击发布:

左边变成了· PUBLISHING状态。

等待几分钟。发布成功!

另外

建议在开发中,不要每次有一点修改就去发布。这样白费时间。错了还得修改。在前面发布的时候,不要急着publishToMavenCentral,而是先publishToMavenLocal()

在使用模块的项目中:

配置根目录settings.gradle:

添加本地mavenLocal() 和一些镜像站:

groovy 复制代码
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        mavenLocal() //追加一个本地查找
        maven { url 'https://maven.aliyun.com/repository/public' }
        maven { url 'https://maven.aliyun.com/repository/google' }
        maven { url 'https://maven.aliyun.com/repository/central' }
        maven { url 'https://repo.huaweicloud.com/repository/maven/' }
        maven { url 'https://mirrors.cloud.tencent.com/nexus/repository/maven-public/' }
        maven { url 'https://mirrors.163.com/maven/repository/maven-public/' }
        google()
        mavenCentral()
        maven { url 'https://www.jitpack.io' }
    }
}
相关推荐
Whisper_Sy1 天前
Flutter for OpenHarmony移动数据使用监管助手App实战 - 应用列表实现
android·开发语言·javascript·flutter·php
北海屿鹿1 天前
【MySQL】内置函数
android·数据库·mysql
臻一1 天前
rk3576+安卓14 ---上电时序调整
android
踢球的打工仔1 天前
typescript-接口的基本使用(一)
android·javascript·typescript
2501_915918411 天前
如何在iPad上找到并打开文件夹的完整指南
android·ios·小程序·uni-app·iphone·webview·ipad
臻一1 天前
rk3576+安卓14---uboot
android
2501_944521591 天前
Flutter for OpenHarmony 微动漫App实战:主题配置实现
android·开发语言·前端·javascript·flutter·ecmascript
2501_944521591 天前
Flutter for OpenHarmony 微动漫App实战:动漫卡片组件实现
android·开发语言·javascript·flutter·ecmascript
知1而N1 天前
电脑上运行APK文件(Android应用程序包),需要借助特定的软件或功能,因为Windows/macOS/Linux系统无法原生直接运行安卓应用
android·macos·电脑
代码s贝多芬的音符1 天前
HttpURLConnection post多个参数和一个图片
android·httpurlconn