VLC for Android 构件发布指南:用 YubiKey 签名并将 libvlc、medialibrary 部署到 Maven Central
音视频移动开发【免费下载链接】vlc-androidVLC for Android, Android TV and ChromeOS项目地址https://gitcode.com/gh_mirrors/vl/vlc-android点击查看免费下载本文是 vlc-android 仓库维护者Release Manager专用的发布操作指南完整讲解如何将 libvlc、medialibrary 与 remote-access 三个 Android 库构件AAR签名并部署到 Sonatype 的 Maven Central。读者按本文操作可完成从「打 git tag 触发 CI 构建」→「下载 dbg.zip 产物」→「运行 deploy-to-mavencentral.sh 签名上传」→「在 Nexus Repository Manager 中 Close / Release」→「在 Maven Central 验证发布结果」的端到端发布闭环。发布对象与整体流程vlc-android 仓库对外发布的 Maven 构件由三个 Android 库模块产出统一使用org.videolan.android作为 groupId构件模块路径AAR 命名版本来源libvlc-alllibvlcjni/libvlcCI 中拉取libvlc-all-version.aarbuild.gradle 中的libvlcVersionmedialibrary-allmedialibrary/build.gradlemedialibrary-abi-version.aarbuild.gradle 中的medialibraryVersionremote-accessapplication/remote-access-client/build.gradlevlc-android-remote-access-version.aarbuild.gradle 中的remoteAccessVersion三个模块统一通过 buildsystem/publish.gradle 完成发布配置group org.videolan.androidversion library_version并定义了sourcesJar源码包与javadocJarJavadoc 包两个附加产物任务最终以archives形式挂载到构件集合中——这正是mvn gpg:sign-and-deploy-file所需的-Dsources与-Djavadoc参数来源。以当前仓库为例build.gradle 中定义的版本为VLC 3.x 分支下libvlcVersion 3.7.7、medialibraryVersion 0.13.24、remoteAccessVersion 0.24.0VLC 4.0 预览分支则分别为4.0.0-eap29与0.13.22-vlc4。实际发布版本以打出的 git tag 为准。整体发布流程如下打一个形如libvlc-版本的 git tag触发 GitLab CI 构建全部 ABI 的库并打包从 CI pipeline 下载名为dbg.zip的产物压缩包将压缩包放入buildsystem/maven目录插入 YubiKey 后执行部署脚本在 Sonatype Nexus 门户中关闭Close并发布Releasestaging 仓库在 Maven Central 与搜索门户中核验构件可被拉取。前置条件Prerequisites签名YubiKey 与 VideoLAN 签名密钥所有部署到 Maven Central 的构件都必须是 GPG 签名的。VideoLAN 使用 YubiKey 智能卡承载官方 Maven 签名密钥需按照官方 YubiKey 智能卡配置指南完成密钥迁移与 PIN 设置将以下密钥导入卡片49A7E6FE58DCF183F0B349DFB83763AD62ED0721该 key id 同时被写死在 deploy-to-mavencentral.sh 中作为mvn gpg:sign-and-deploy-file的-Dgpg.keyname参数即部署脚本会强制使用这把密钥签名发布者本人的密钥无法替代。工具Apache Maven部署过程依赖 Maven 的gpg:sign-and-deploy-file目标因此需要预先安装 Apache Mavensudo apt install maven凭证Sonatype 账号需要具备 Sonatype 平台的发布凭证用户名与密码脚本阶段使用。申请方式为注册 Sonatype JIRA 账号然后在对应的申请工单编号OSSRH-65611中请求加入org.videolan命名空间。只有被授予该命名空间权限的账号才能完成后续的 staging 上传与 release 操作。生成构件打 tag 触发 CI仓库不会手工构建发布用的 AAR而是通过 git tag 驱动 CI 产出。发布流程的起点是创建如下格式的 taglibvlc-[libvlc-version]例如libvlc-3.7.7。从 buildsystem/gitlab/.gitlab-ci.yml 的 CI 配置可以印证这一点.build-libs-base的触发规则为$CI_COMMIT_TAG ~ /^libvlc-3.*$/VLC 4 分支则匹配/^libvlc-4.*$/remote-access 构件由$CI_COMMIT_TAG ~ /^remoteaccess-.*$/独立触发见 publish_remote_access_lib 任务。触发后CI 会为arm64-v8a、armeabi-v7a、x86、x86_64四个 ABI 分别执行./buildsystem/compile.sh -l -a ${ARCH} -t -m2 $M2_REPO release ./buildsystem/compile.sh -ml -a ${ARCH} -t -m2 $M2_REPO release -b即先构建 libvlc-l、再构建 medialibrary-ml并使用-m2 $CI_PROJECT_DIR/aars/repository将产物安装到 CI 内的本地 Maven 仓库M2_REPO变量随后在 package 阶段执行publishToMavenLocal汇总各 ABI 产物。最终 pipeline 会打包两个关键产物.dbg/目录包含各 ABI 的调试符号.so文件供崩溃符号化使用$M2_REPO即aars/repository目录内含标准 Maven 布局的org/videolan/android/{medialibrary-all,libvlc-all,remote-access}构件树。两者的压缩包以libvlc-[版本].dbg命名挂在 pipeline artifacts 上对应文档中描述的dbg.zip。发布者需要做的就是把这个 zip 下载并复制到本仓库的buildsystem/maven目录下。执行部署脚本deploy-to-mavencentral.sh使用方法插入 YubiKey 后在buildsystem/maven目录下执行./deploy-to-mavencentral.sh [FILE_PATH]其中[FILE_PATH]是上一步下载的 zip 文件的路径。脚本采用set -euo pipefail严格模式任何一步失败都会立即中止保证发布过程可预期。脚本执行步骤拆解对照 deploy-to-mavencentral.sh 源码脚本依次执行以下动作检查并解压先校验参数非空无参数时直接报错退出随后检查 zip 是否存在存在则unzip到artifacts/目录否则以红色提示报错退出探测构件版本按 Maven 仓库标准布局检查artifacts/aars/repository/org/videolan/android/下是否存在medialibrary-all、libvlc-all、remote-access三个目录并用ls -tUd .../*/取时间戳最新的子目录名作为版本号三个版本分别存入MEDIALIB_VERSION、LIBVLC_VERSION、REMOTE_ACCESS_VERSION变量人工确认打印探测到的三个版本号等待输入y确认输入其他字符则安全退出读取 zip 密码交互式-sp隐藏输入读取settings.xml.zip的解压密码并进行 XML 转义→amp;等解压发布凭证用该密码unzip -P $pass settings.xml.zip解出settings.xml内含 Sonatype 凭证的 Maven server 配置与pwd.txt用于后续 API 调用的 token与此同时trap cleanup EXIT被注册保证脚本无论正常结束还是中途异常都会删除settings.xml与pwd.txt。安全警告原文强调一旦脚本执行到第 5 步之后settings.xml文件就包含明文凭证。若脚本在此之后失败务必手动删除该文件避免凭证泄露。脚本自身的trap cleanup EXIT机制只覆盖正常路径中断后的残留文件需人工兜底清理。签名并部署对三个构件存在的分别执行mvn gpg:sign-and-deploy-file。以 libvlc 为例脚本实际运行的命令为mvn gpg:sign-and-deploy-file \ --settings settings.xml \ -DpomFile$BASE_DIR/libvlc-all-$LIBVLC_VERSION.pom \ -Dfile$BASE_DIR/libvlc-all-$LIBVLC_VERSION.aar \ -Dsources$BASE_DIR/libvlc-all-$LIBVLC_VERSION-sources.jar \ -Djavadoc$BASE_DIR/libvlc-all-$LIBVLC_VERSION-javadoc.jar \ -Durlhttps://ossrh-staging-api.central.sonatype.com/service/local/staging/deploy/maven2/ \ -DgroupIdorg.videolan.android \ -Dgpg.keyname49A7E6FE58DCF183F0B349DFB83763AD62ED0721 \ -DrepositoryIdcentral参数含义参数作用--settings settings.xml使用刚解压出的、含 Sonatype 凭证的 Maven settings 文件-DpomFile构件对应的 POM 文件-Dfile要发布的 AAR 文件本体-Dsources/-Djavadoc源码包与 Javadoc 包对应 publish.gradle 中生成的sourcesJar/javadocJar-DurlSonatype 的 staging 部署端点maven2 协议-DgroupId固定为org.videolan.android-Dgpg.keyname固定为 VideoLAN 官方签名密钥 id-DrepositoryId对应 settings.xml 中server的 idcentral通知 Sonatype 手动上传部署完成后脚本还会对每个构件发起一次curlPOST携带Authorization: Bearer $PWDtoken 来自pwd.txt请求ossrh-staging-api.central.sonatype.com/manual/upload/defaultRepository/org.videolan将 staging 内容正式挂载到org.videolan仓库清理通过trap cleanup EXIT删除settings.xml与pwd.txt。缺失构件的容错脚本对三个构件逐一判断若 zip 中缺少某构件目录例如只发布了 libvlc 而未包含 remote-access对应版本变量为空脚本会打印 No version for xxx. Skipping 并跳过该构件的部署步骤不影响其他构件发布。在 Nexus Repository Manager 中发布ReleaseMaven 部署脚本只是把构件上传到了 Sonatype 的 staging 区发布者还需要在 Nexus 门户中完成最后的发布操作登录 Sonatype 的 Nexus Repository Manager 门户s01.oss.sonatype.org进入Build Promotion→Staging Repositories在列表中选择org.videolan仓库——该仓库中应已能看到脚本上传的构件点击CloseSonatype 会校验构件的完整性POM 合法性、GPG 签名、sources/javadoc 是否齐备等等待其状态变为已关闭closed点击Release将 staging 仓库推送到 Maven Central。发布后验证Release 完成后构件通常会在几分钟内同步到 Maven Central 的官方仓库可分别访问以下路径核验libvlcrepo1.maven.org/maven2/org/videolan/android/libvlc-all/medialibraryrepo1.maven.org/maven2/org/videolan/android/medialibrary-all/数小时后构件还会被索引到 Maven 中央仓库的搜索引擎中search.maven.org按g:org.videolan.android检索。届时任何 Android 工程只需在 Gradle 中声明implementation org.videolan.android:libvlc-all:version即可直接拉取使用。小结整套发布体系的核心设计可以总结为三点git tag 驱动 CI 出包版本与源码一一对应CI 配置见 buildsystem/gitlab/.gitlab-ci.yml、脚本化签名上传deploy-to-mavencentral.sh 将解压、版本探测、GPG 签名、staging 上传与凭证清理收敛为一个命令、Nexus 人工把关Close/Release 两步避免未经确认的构件流入 Maven Central。对需要 fork 或自建镜像的团队这套流程与脚本同样可以整体复用——只需替换settings.xml中的凭证与自己命名空间下的groupId即可。赞分享音视频移动开发【免费下载链接】vlc-androidVLC for Android, Android TV and ChromeOS项目地址https://gitcode.com/gh_mirrors/vl/vlc-android点击查看免费下载相关推荐EasyPermissions 库发布指南从 GPG 签名到 Maven Central 的完整发布流程EasyPermissions 库发布指南从 GPG 签名到 Maven Central 的完整发布流程 EasyPermissions 是用于简化 Andr移动开发认证鉴权Android Library 分发实战使用 Android Studio 将自研库发布到 jCenter 与 Maven CentralAndroid Library 分发实战使用 Android Studio 将自研库发布到 jCenter 与 Maven Central 导读在 Andr文档教程知识库Buzz 离线音频转录完整指南一条录音到字幕导出的快速上手Buzz 离线音频转录完整指南一条录音到字幕导出的快速上手 你录下十分钟的会议Buzz 把它变成一份完整的文字稿。Buzz 是一款离线音频转录工具它调用人工智能语音音频本地部署桌面应用上一篇BepInEx完整教程5分钟掌握Unity游戏模组框架安装与使用下一篇3分钟快速上手XNBCLI免费工具让你的星露谷物语模组制作更简单创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

ue5学习文档:水材质

ue5学习文档:水材质

一个简单的水材质蓝图第一章:表面系统 1.1 为什么用“绝对世界位置”而不是默认UV? 使用世界坐标的XY,意味着波浪的平铺是基于世界空间尺度的。无论水面怎么缩放,波浪的物理大小都不会变。 1.2 三层Panner:怎么让水“动…

2026/10/15 3:23:39 阅读更多 →
Apereo CAS 指标导出 Datadog 实战:Micrometer Registry 配置与运维指南

Apereo CAS 指标导出 Datadog 实战:Micrometer Registry 配置与运维指南

后端认证鉴权单点登录 【免费下载链接】cas Apereo CAS - Identity & Single Sign On for all earthlings and beyond. 项目地址: https://gitcode.com/gh_mirrors/ca/cas 点击查看 免费下载 本指南聚焦于 Apereo CAS 将运行时指标周期性地导出到 Datadog 的完…

2026/10/15 3:22:39 阅读更多 →
Impeller 渲染入门:用 10 行 C++ 绘制你的第一个三角形(Baby‘s First Triangle 实战指南)

Impeller 渲染入门:用 10 行 C++ 绘制你的第一个三角形(Baby‘s First Triangle 实战指南)

跨平台前端移动开发OpenHarmony 【免费下载链接】flutter_flutter 本仓库是 Flutter SDK 与 Flutter Engine 的 OpenHarmony 适配版本,由 CPF-Flutter 团队维护。开发者可使用熟悉的 Flutter 技术栈开发 OpenHarmony 应用,3.35.7 及以后的适配版本可基于…

2026/10/15 3:22:39 阅读更多 →

最新新闻

每日热门skill-别再看录播课了!清华把「AI 老师 + AI 同学」的课堂开源了:一句话生成一门课,29.6K Star 的 OpenMAIC 深度拆解

每日热门skill-别再看录播课了!清华把「AI 老师 + AI 同学」的课堂开源了:一句话生成一门课,29.6K Star 的 OpenMAIC 深度拆解

免费基金定投助手全功能拆解:为什么你的基金定投还在亏钱?因为你的工具用错了。动态平衡仓位管理8种智能定投策略引擎,会自己算买卖点的定投系统-CSDN博客 https://download.csdn.net/download/weitingfu/93448039?spm1001.2014.3001.5503 你…

2026/10/15 4:08:46 阅读更多 →
嵌入式学习 Day4

嵌入式学习 Day4

1.Cortex类似于大脑,不同型号效果不同 2.DSP:数字信号处理器,用于处理大量数字计算 3.FPU:浮点数运算单元 4.PC 程序计数器 Program count 用于计第一个程序地址 5.SP 栈指针 用于管理栈 6.LP 连接寄存器,用于保存返函…

2026/10/15 4:08:46 阅读更多 →
AI大模型18- 从零搭建推理增强:思维链、自一致性采样与自我反思完整指南

AI大模型18- 从零搭建推理增强:思维链、自一致性采样与自我反思完整指南

18-推理增强:从 CoT 到自我反思 免费基金定投助手全功能拆解:为什么你的基金定投还在亏钱?因为你的工具用错了。动态平衡仓位管理8种智能定投策略引擎,会自己算买卖点的定投系统-CSDN博客 https://download.csdn.net/download/wei…

2026/10/15 4:08:46 阅读更多 →
PHP上传文件为什么会被覆盖

PHP上传文件为什么会被覆盖

最近排查一个 PHP 后台时遇到过这种情况:用户连续上传两份文件,页面都提示成功,但最后服务器目录里只剩下一份。数据库记录有两条,下载时却都指向同一个文件。 继续看上传代码后发现,程序直接使用了用户原始文件名保存…

2026/10/15 4:08:46 阅读更多 →
纯纳米泡与DDA正电修饰纳米泡强化赤铁矿-高岭土反浮选——正电泡促高岭土卡房结构,异步絮凝压赤铁矿夹带

纯纳米泡与DDA正电修饰纳米泡强化赤铁矿-高岭土反浮选——正电泡促高岭土卡房结构,异步絮凝压赤铁矿夹带

论文来源:Huaizhi Shao, Panwu Li, Ahmed Sobhy, Xiangyang Ling, Dongping Tao, Ming Zhang. Effects of Pure and Modified Nanobubbles on the Reverse Flotation of Kaolinite from Hematite[J]. Mineral Processing and Extractive Metallurgy Review, 2023. D…

2026/10/15 4:08:46 阅读更多 →
怎么查看 Windows 11 里用的是什么 GPU?获取显卡详细信息——4 种方法

怎么查看 Windows 11 里用的是什么 GPU?获取显卡详细信息——4 种方法

看某款游戏的系统要求时,我们经常会遇到这种情况。显卡是玩游戏的关键一环。和处理器、内存不同,我们常去看的系统属性里并不显示装的显卡型号,但每台电脑——不管你有没有单独花钱买显卡——都有一块集成显卡。 有时候,你也需要了解集成显卡的详细信息。在 Windows 11 上…

2026/10/15 4:07:46 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →