Ubuntu/Debian系统下使用apt安装与配置OpenJDK 8为默认Java环境
1. 项目概述为什么在Linux上管理Java版本依然是个技术活如果你在Linux系统上做过Java开发尤其是接手过一些老项目大概率遇到过这样的场景项目文档里明确写着“需JDK 8环境”你信心满满地敲下java -version终端却返回一个更高版本号或者干脆提示“command not found”。这时你需要的不仅仅是一个安装命令而是一套从安装、配置到版本切换的完整解决方案。aptAdvanced Package Tool作为Debian/Ubuntu系Linux发行版的核心包管理工具是我们获取软件的一站式入口。但仅仅通过apt install openjdk-8-jdk把包装上距离“设置为系统默认Java”这个目标往往还差着几个关键的配置步骤。这个过程涉及Linux系统环境变量的优先级、替代alternatives系统的机制以及不同工具如java、javac的独立管理任何一个环节理解不到位都可能导致环境混乱影响后续所有依赖Java的应用。因此这个操作虽然基础却是一个检验开发者对Linux软件管理和环境配置理解程度的经典案例。它绝不仅仅是执行几条命令更是理解系统如何寻找和决定使用哪个程序的过程。接下来我将以一个十年运维开发者的视角带你彻底吃透在Ubuntu/Debian系统上用apt安装JDK 8并使其成为系统默认Java环境的每一个细节、原理和避坑点。2. 核心需求与方案选型解析2.1 明确“系统默认Java”的真实含义当我们说“设置系统默认Java”时具体指的是什么很多人会误以为就是修改JAVA_HOME环境变量。实际上在典型的Linux环境中这包含两个层面且后者更为关键Shell环境层面即当前用户或全局的环境变量如JAVA_HOME、PATH。这主要影响在终端中手动执行的命令、Shell脚本以及某些读取这些变量的应用程序如Maven、Gradle。你可以通过export JAVA_HOME/usr/lib/jvm/java-8-openjdk-amd64来临时或永久设置。系统命令链接层面这是实现“默认”的关键。Linux系统通过update-alternatives工具管理同一命令的多个候选版本。例如/usr/bin/java这个命令本身通常是一个符号链接symlink它指向/etc/alternatives/java而后者又是一个指向真实Java可执行文件如/usr/lib/jvm/java-8-openjdk-amd64/bin/java的符号链接。update-alternatives维护着一个优先级数据库系统级的java、javac、javadoc等命令最终指向谁由它决定。当你在任何地方包括非交互式Shell、cron任务、其他服务调用java时使用的都是这个系统链接决定的版本。为什么方案选型是aptupdate-alternativesapt的优势从官方仓库安装能自动处理依赖如必要的库文件并且后续可以方便地接收安全更新。对于OpenJDK 8这类成熟稳定的版本这是最安全、最省心的方式。手动下载.tar.gz包的劣势虽然更灵活可以安装任意版本包括Oracle JDK但需要手动解压、设置环境变量、手动管理update-alternatives升级和卸载也更麻烦。对于追求系统一致性和可维护性的生产环境或个人主力开发机apt方案是首选。update-alternatives的必要性它提供了官方的、系统级的版本切换方法比单纯修改用户~/.bashrc中的PATH变量更彻底、影响范围更广。特别是当系统同时存在多个JDK版本如JDK 8、JDK 11、JDK 17时用它来管理可以做到游刃有余。2.2 操作前的关键检查与准备在开始安装前花两分钟做一次系统状态检查能避免很多后续困惑。检查现有Java安装情况java -version javac -version记录下输出的版本信息。如果显示“未找到命令”说明系统尚未安装任何JDK。如果显示的是其他版本如openjdk 11.0.22这正是我们需要替换的目标。探查已安装的Java包dpkg -l | grep -i openjdk这条命令会列出所有名称中包含“openjdk”的已安装包。你可能会看到openjdk-11-jdk、openjdk-8-jre-headless等。这让你对当前系统JDK格局有个清晰认识。确认系统架构和仓库sudo apt update apt search openjdk-8-jdk首先更新包列表然后搜索JDK 8包。确保你的系统架构通常是amd64有对应的包可用。在绝大多数Ubuntu LTS版本如20.04, 22.04和Debian稳定版中OpenJDK 8包都是可用的。注意在一些最新的Ubuntu版本如24.04中OpenJDK 8可能已从主仓库移至universe仓库。如果搜索不到你可能需要先启用universe仓库sudo add-apt-repository universe然后再执行sudo apt update。3. 分步实操安装与配置全流程3.1 安装OpenJDK 8开发工具包安装命令本身非常简单sudo apt install openjdk-8-jdk这里安装的是openjdk-8-jdk它包含了完整的开发环境JRE 编译器、工具等。如果你只需要运行Java程序而不需要编译可以安装openjdk-8-jre但作为开发环境建议直接安装JDK。安装过程发生了什么apt会自动处理以下事情从配置的软件源下载openjdk-8-jdk包及其所有依赖包。将Java运行时环境JRE和开发工具JDK的文件安装到标准目录通常是/usr/lib/jvm/java-8-openjdk-amd64/路径可能因架构略有不同。自动运行update-alternatives的postinst安装后脚本将新安装的JDK 8中的java、javac等命令注册到替代系统中。但是注册并不等于设置为默认这是很多新手困惑的地方安装后java -version可能还是旧版本。3.2 深入理解并配置update-alternatives安装完成后我们需要主动介入告诉系统我们希望将JDK 8作为默认选择。首先查看java命令当前的替代项情况sudo update-alternatives --config java你会看到一个类似如下的交互式菜单There are 2 choices for the alternative java (providing /usr/bin/java). Selection Path Priority Status ------------------------------------------------------------ * 0 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 auto mode 1 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 manual mode 2 /usr/lib/jvm/java-8-openjdk-amd64/bin/java 1081 manual mode Press enter to keep the current choice[*], or type selection number:*号表示当前自动模式选择的版本这里是JDK 11。Priority优先级是一个数字优先级高的版本在“auto mode”下会被自动选中。通常新版本的优先级更高。Status为“auto mode”表示系统自动管理为“manual mode”表示用户手动指定。我们的目标将JDK 8设置为默认。你有两种策略策略一交互式手动选择推荐用于快速切换在提示符下输入JDK 8对应的选择编号上面例子中是2然后按回车。这样就将java命令手动切换到了JDK 8。你可以立即验证java -version应该输出类似openjdk version 1.8.0_412的信息。策略二使用非交互命令直接设置适合脚本化或确知路径sudo update-alternatives --set java /usr/lib/jvm/java-8-openjdk-amd64/bin/java这条命令直接指定java命令的链接目标效果与交互式选择相同。必须同步配置javac仅仅设置java是不够的编译命令javac是独立的。你需要对javac也执行同样的配置操作sudo update-alternatives --config javac # 同样选择JDK 8对应的编号或者使用--set命令 sudo update-alternatives --set javac /usr/lib/jvm/java-8-openjdk-amd64/bin/javac验证编译版本javac -version3.3 设置JAVA_HOME环境变量许多Java应用和构建工具如Tomcat, Maven, Gradle, Spring Boot都依赖JAVA_HOME环境变量来定位Java安装目录。update-alternatives不管理这个变量需要我们手动设置。首先找到准确的JDK 8安装路径。虽然通常是/usr/lib/jvm/java-8-openjdk-amd64但最好确认一下sudo update-alternatives --list java | grep java-8输出会是类似/usr/lib/jvm/java-8-openjdk-amd64/bin/java的路径其父目录的父目录就是JAVA_HOME。全局设置对所有用户生效编辑/etc/environment文件。这个文件是系统级别的环境变量配置文件。sudo nano /etc/environment在文件末尾添加请确保路径正确JAVA_HOME/usr/lib/jvm/java-8-openjdk-amd64保存并退出。重要这个更改需要重新登录系统或者运行source /etc/environment在当前shell中生效但只对当前shell有效。重启是最彻底的方式。用户级设置仅对当前用户生效编辑用户家目录下的~/.bashrc或~/.profile文件。nano ~/.bashrc在文件末尾添加export JAVA_HOME/usr/lib/jvm/java-8-openjdk-amd64 export PATH$JAVA_HOME/bin:$PATH第二行将JDK的bin目录添加到PATH变量最前面确保shell优先使用我们设置的JDK。保存后执行source ~/.bashrc使其立即生效。实操心得我通常建议在~/.bashrc中设置用户级JAVA_HOME因为更灵活且不影响其他用户。/etc/environment的设置更为“底层”但需要重启。在生产服务器上如果某个服务如systemd服务明确需要JAVA_HOME可以在其服务单元文件.service中直接通过Environment指令设置这样最精准避免全局污染。4. 验证与深度排查完成上述步骤后需要进行全面验证确保所有环节都已就绪。4.1 多维度验证环境验证系统命令链接ls -l /usr/bin/java /usr/bin/javac这两个文件应该是符号链接。依次查看它们指向哪里ls -l /usr/bin/java # 应指向 /etc/alternatives/java ls -l /etc/alternatives/java # 应最终指向 /usr/lib/jvm/java-8-openjdk-amd64/bin/java 这样的路径对javac执行同样的检查。验证版本输出java -version javac -version两者都应明确显示JDK 8的版本信息。验证JAVA_HOME变量echo $JAVA_HOME应输出/usr/lib/jvm/java-8-openjdk-amd64。如果为空请检查你是否正确执行了source命令或已重新登录。编写并运行一个简单的测试程序cat HelloWorld.java EOF public class HelloWorld { public static void main(String[] args) { System.out.println(Hello from JDK System.getProperty(java.version)); } } EOF javac HelloWorld.java java HelloWorld如果编译和运行成功并打印出“Hello from JDK 1.8.0_xxx”则证明你的开发环境完全配置正确。4.2 常见问题与排查技巧实录即使按照步骤操作你也可能会遇到一些“坑”。以下是我在实际工作中总结的常见问题及解决方法。问题1执行sudo update-alternatives --config java后菜单里没有出现JDK 8的选项。原因openjdk-8-jdk包的安装后脚本可能没有正确运行或者替代项未被注册。解决手动注册JDK 8到update-alternatives系统。# 注册java命令 sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-8-openjdk-amd64/bin/java 1081 # 注册javac命令 sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-8-openjdk-amd64/bin/javac 1081其中1081是优先级你可以设置一个比现有JDK 11如1111稍低的数字这样在自动模式下系统仍会优先选择高版本。但这不影响你手动选择。问题2设置了JAVA_HOME但某些IDE如IntelliJ IDEA或构建工具如Maven仍然使用了错误的Java版本。原因IDE和构建工具通常有自己独立的JDK配置选项它们不一定会读取系统的JAVA_HOME或使用/usr/bin/java链接。解决IntelliJ IDEA进入File - Project Structure - Project在“Project SDK”处手动添加并选择你安装的JDK 8路径。Maven可以在~/.mavenrc文件中设置JAVA_HOME或者更常见的使用Maven Wrappermvnw它自带JDK版本管理能力。通用法则对于有图形界面或独立配置的软件优先在其自身的设置中指定JDK路径这比依赖系统环境更可靠。问题3系统中有多个用户如何为所有用户统一设置默认Java解决update-alternatives --config和--set操作是系统级的使用sudo执行后对所有用户生效。JAVA_HOME环境变量如果需要全局生效如前所述可以编辑/etc/environment文件。但更规范的做法是在需要特定Java版本的系统服务如Jenkins、Elasticsearch的启动脚本或systemd服务文件中明确指定JAVA_HOME或JAVA_OPTS。问题4如何优雅地在不同项目间切换JDK版本场景你同时维护一个需要JDK 8的老项目和另一个需要JDK 17的新项目。解决方案手动运行update-alternatives --config切换是一种方式但更高效的工具是jenv或sdkman。jenv一个轻量级的Java环境管理工具可以方便地切换全局、目录项目或Shell会话级别的Java版本。sdkman功能更强大不仅可以管理多个Java版本还可以管理Maven、Gradle、Spring Boot CLI等众多SDK的版本。这是目前社区非常流行的方案。使用示例sdkman# 安装sdkman后 sdk list java # 列出所有可安装的Java版本 sdk install java 8.0.412-open # 安装某个特定发行版的JDK 8 sdk use java 8.0.412-open # 在当前Shell切换到JDK 8 sdk default java 8.0.412-open # 设置JDK 8为默认版本对于个人开发机我强烈推荐使用sdkman来管理Java及其他SDK它能彻底解决版本冲突和切换烦恼。问题5apt安装的OpenJDK和Oracle JDK有什么区别许可协议OpenJDK是GPLv2CPE许可证的开源实现Oracle JDK曾经是商业许可但现在其新版也基于OpenJDK构建发布协议不同。对于JDK 8Oracle后期版本的更新需要商业许可。功能与性能对于JDK 8两者核心功能基本一致。历史上Oracle JDK可能包含一些额外的商业特性或监控工具但对于绝大多数开发场景OpenJDK完全足够。更新支持Ubuntu/Debian官方仓库中的OpenJDK 8会持续接收重要的安全更新这是通过apt安装的最大优势。而Oracle JDK 8的公开更新已停止继续使用存在安全风险。结论在Linux上除非有非常特殊的、明确依赖Oracle JDK特定功能的场景否则一律建议使用apt安装的OpenJDK省心、安全、易维护。5. 进阶管理与维护建议5.1 管理多个并存的JDK版本随着时间推移你的系统上可能会积累多个JDK。使用以下命令可以清晰查看所有已注册的Java版本sudo update-alternatives --list java sudo update-alternatives --list javac要移除一个不再需要的JDK版本比如一个旧的测试版不要直接删除/usr/lib/jvm/下的目录而应该先卸载对应的apt包或者使用update-alternatives --remove将其从替代系统中注销。# 首先从alternatives中移除如果它还在列表中 sudo update-alternatives --remove java /path/to/unwanted/java # 然后通过apt卸载对应的包 sudo apt remove openjdk-11-jdk直接删除文件会导致update-alternatives数据库中存在指向无效路径的条目造成混乱。5.2 为特定应用或会话临时切换版本有时你只想在当前终端会话中临时使用某个JDK版本而不想改变系统全局设置。使用绝对路径这是最直接的方法。/usr/lib/jvm/java-11-openjdk-amd64/bin/java -version /usr/lib/jvm/java-11-openjdk-amd64/bin/javac MyClass.java使用update-alternatives --set临时设置用完再改回来。可以写一个简单的Shell函数放在~/.bashrc中use_java8() { sudo update-alternatives --set java /usr/lib/jvm/java-8-openjdk-amd64/bin/java sudo update-alternatives --set javac /usr/lib/jvm/java-8-openjdk-amd64/bin/javac echo Switched to Java 8 } use_java11() { sudo update-alternatives --set java /usr/lib/jvm/java-11-openjdk-amd64/bin/java sudo update-alternatives --set javac /usr/lib/jvm/java-11-openjdk-amd64/bin/javac echo Switched to Java 11 }这样只需要在终端输入use_java8或use_java11即可快速切换。注意这需要sudo权限且是系统级切换。5.3 排查“命令未找到”或版本混乱的终极思路当Java环境出现问题时可以按照以下顺序排查这能帮你定位问题根源检查命令路径which java。这会告诉你当前shell找到的java命令的完整路径。如果不在/usr/bin/java说明你的PATH变量可能被其他配置如conda、自定义安装修改了。追踪符号链接ls -l $(which java)。查看该命令最终链接到了哪个具体的可执行文件。检查update-alternatives状态sudo update-alternatives --display java。这个命令会给出非常详细的信息包括所有候选项、当前选择、模式自动/手动以及优先级。检查环境变量env | grep -i java。查看所有与Java相关的环境变量特别是JAVA_HOME和PATH。检查用户配置查看~/.bashrc,~/.profile,~/.bash_profile等文件是否有覆盖系统设置的语句。考虑其他版本管理工具如果你安装了jenv或sdkman它们可能会在Shell初始化时覆盖PATH。检查它们的初始化脚本。整个流程走下来你应该已经不仅仅是在执行命令而是在理解Linux系统如何管理软件的多版本共存。从apt获取软件到update-alternatives管理命令链接再到环境变量的作用域每一个环节都体现了Linux的模块化和可配置性。掌握这套方法未来无论是管理Python、Node.js还是其他多版本共存的软件你都能触类旁通。记住在Linux世界里弄清楚“为什么”比记住“怎么做”往往更重要它能让你在遇到新问题时拥有自己分析和解决的能力。

相关新闻

CentOS 7下为Hadoop 3.1.4编译Snappy库的完整实战指南

CentOS 7下为Hadoop 3.1.4编译Snappy库的完整实战指南

1. 项目缘起:为什么要在CentOS 7上为Hadoop 3.1.4编译Snappy?如果你正在搭建一个基于Hadoop 3.1.4的数据平台,尤其是在CentOS 7这样的经典生产环境上,那么“Snappy压缩库”绝对是一个绕不开的话题。这不仅仅是一个简单的“安装”步…

2026/8/14 4:22:17 阅读更多 →
从io_service到io_context:C++异步编程核心演进与迁移实战

从io_service到io_context:C++异步编程核心演进与迁移实战

1. 项目概述:从 io_service 到 io_context 的演进之路如果你是一个长期使用 Boost.Asio 进行 C 网络或异步编程的开发者,那么对asio::io_service这个类一定不会陌生。它曾经是 Asio 库的心脏,负责驱动所有的异步操作,管理 I/O 服务…

2026/8/14 10:15:24 阅读更多 →
基于RAG与开源技术栈构建本地化代码智能问答系统实战指南

基于RAG与开源技术栈构建本地化代码智能问答系统实战指南

如果你是一名开发者,最近可能已经感受到了一个明显的趋势:AI 正在从“帮你写代码”的工具,演变为“理解你代码”的伙伴。过去,我们向 Copilot 提问,它给出代码片段;现在,我们开始期待 AI 能像一…

2026/8/13 3:50:51 阅读更多 →

最新新闻

C语言系列之——(1)C语言中的语句

C语言系列之——(1)C语言中的语句

C语言中的语句1.空语句2.表达式语句3.函数调用语句4.复合语句5.控制语句C语言的语句可以分为五类:空语句、表达式语句、函数调用语句、复合语句和控制语句 1.空语句 顾名思义,空语句就是什么都不用干的语句,但它是一条语句,常用…

2026/8/14 13:10:42 阅读更多 →
Lua脚本反编译与工具:专为Cocos2d-x、XXTEA等引擎优化

Lua脚本反编译与工具:专为Cocos2d-x、XXTEA等引擎优化

温馨提示:文末有联系方式 工具核心功能 支持对已或混淆的Lua脚本(包括.luac格式、文件)进行全自动处理:拖入即,后精准反编译为原始.lua源代码。 同时兼容整包分析——直接拖入Android APK安装包,工具将自动…

2026/8/14 13:10:42 阅读更多 →
云手机多账号环境隔离与账号安全保障:原理与技术架构(2026)

云手机多账号环境隔离与账号安全保障:原理与技术架构(2026)

一、移动优先平台兴起,桌面端隔离方案为什么开始吃力这两年做海外社媒和跨境电商的人都有一个明显体感:流量和用户的注意力越来越多地落在手机上。TikTok自不必说,它的整个产品形态从注册、登录、内容发布到互动,本来就是为移动端…

2026/8/14 13:10:42 阅读更多 →
GM DPS数据包与自动打包工具|通用DPS封装软件安装指南,支持工程师一键刷写

GM DPS数据包与自动打包工具|通用DPS封装软件安装指南,支持工程师一键刷写

温馨提示:文末有联系方式 GM DPS数据包与打包一体化解决方案 本工具专为汽车电子控制单元(ECU)开发与售后标定设计,集成DPS数据、智能排序与自动打包全流程功能,兼容主流GM车型DPS格式,开箱即用。 ## 免日…

2026/8/14 13:10:42 阅读更多 →
多账号运营稳定性的四个技术支点:指纹、隔离、代理与云手机

多账号运营稳定性的四个技术支点:指纹、隔离、代理与云手机

一、为什么“哪款账号运营最稳”不能简单用一句话回答如果你正在纠结“到底哪款多账号环境隔离工具能把账号运营风险压到最低”,我得先泼盆冷水:这个世界上不存在“某款工具保证把异常判定率压到最低”这种说法。原因特别简单——主流平台从来不会官方公…

2026/8/14 13:10:41 阅读更多 →
微信读书笔记插件WeReader快速上手指南:标注一键导出为Markdown笔记

微信读书笔记插件WeReader快速上手指南:标注一键导出为Markdown笔记

微信读书笔记插件WeReader快速上手指南:标注一键导出为Markdown笔记 【免费下载链接】wereader 一个浏览器扩展:主要用于微信读书做笔记,对常使用 Markdown 做笔记的读者比较有帮助。 项目地址: https://gitcode.com/gh_mirrors/wer/weread…

2026/8/14 13:09:41 阅读更多 →

日新闻

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

在这个流量为王、视觉至上的互联网时代,对于临沂乃至整个山东乃至全国的传统中小企业来说,拥有一张精美的“数字名片”早已不再是可选项,而是生存的必答题。每当夜幕降临,沂河两岸灯火辉煌,物流之都的喧嚣逐渐沉淀为对未来的思考。我们常常听到老板们在茶余饭后探讨:为什…

2026/8/14 0:00:26 阅读更多 →
Flutter与OpenHarmony实现剧本杀组队表单开发实战

Flutter与OpenHarmony实现剧本杀组队表单开发实战

1. 项目概述在移动应用开发领域,跨平台框架Flutter因其高效的开发体验和出色的性能表现,已经成为众多开发者的首选。而OpenHarmony作为新兴的操作系统平台,其开放性和灵活性为开发者提供了全新的可能性。本文将聚焦于一个实际应用场景——剧本…

2026/8/14 0:00:26 阅读更多 →
大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

在这个数字化浪潮席卷全球的今天,企业想要在激烈的市场竞争中站稳脚跟,拥有一张好看的“数字名片”已经远远不够了。很多老板在刚开始接触互联网业务时,都有一个共同的困惑:为什么我花了钱建的网站,就像是在真空中自嗨?访客进来转了两圈就跑了,线索石沉大海,甚至连客服…

2026/8/14 0:01:27 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/13 10:41:52 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/13 10:41:51 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/13 10:41:50 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/13 10:41:49 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/13 10:41:49 阅读更多 →