jre 的生成与使用
前言
从 Java 9 开始,Oracle 不再单独提供 JRE(Java Runtime Environment) 的独立安装包,而是推荐开发者使用 模块化的 JRE 或 jlink 工具 来自定义运行时环境。
新版 Java(JDK 9+)的变化
-
不再提供独立的 JRE 安装包
- 以前:JDK(开发工具包)和 JRE(运行时环境)是分开的,用户可以只安装 JRE 来运行 Java 程序。
- 现在:Oracle 和 OpenJDK 只提供 完整的 JDK,但你可以使用
jlink
工具从 JDK 中提取最小化的 JRE。
-
模块化系统(Java Platform Module System, JPMS)
- Java 9 引入了模块化系统,允许你只打包应用所需的模块,而不是整个 JRE。
- 你可以使用
jlink
生成一个 自定义的、精简的 JRE,只包含你的应用所需的模块,从而大幅减小体积。
-
推荐使用
jlink
生成最小 JREjlink
是 JDK 自带的工具,可以创建仅包含必要模块的 JRE。- 这样你的 Electron 应用可以内置一个 很小的 JRE(可能只有 30-50MB,而不是完整的 200MB+)。
生成
jlink --add-modules java.base,java.desktop --output ./custom-jre --strip-debug --no-header-files --no-man-pages --compress=zip-6
参数解释
--add-modules java.base,java.desktop,java.sql \ # 你的应用依赖的模块
--output ./custom-jre \ # 输出目录
--strip-debug \ # 移除调试信息
--no-header-files \ # 移除头文件
--no-man-pages \ # 移除 man 手册
--compress=2 # 压缩级别(0=无, 1=常量, 2=全部)
生成apktool的jre
如果你自己生成的 JRE(Java Runtime Environment)缺少必要的模块或配置,可能会导致 Apktool 无法正常运行,并出现 无法初始化主类 brut.apktool.Main
这样的错误。以下是可能的原因和解决方案:
检查你的自定义 JRE 是否完整
Apktool 依赖 Java 标准库(如 java.base
)和一些额外模块(如 java.desktop
、java.xml
等)。
如果你的 JRE 是手动生成的(例如用 jlink
裁剪过),可能缺少关键模块。
✅ 解决方法
(1) 检查已安装的模块
运行以下命令,查看你的 JRE 包含哪些模块:
/Users/dsh/files.localized/code/andriod-helper/apps/main/src/tools/jre/bin/java --list-modules
Apktool 运行至少需要以下模块:
java.base
java.desktop
(用于 GUI 相关操作,即使 Apktool 是命令行工具,某些类可能依赖它)java.xml
(解析 XML 文件)
如果缺少关键模块,需要重新生成 JRE。
(2) 重新生成 JRE(包含必要模块)
如果你是用 jlink
生成的 JRE,确保包含 Apktool 所需的模块:
jlink --add-modules java.base,java.desktop,java.xml,java.sql,java.scripting --output ./myjre
然后使用新生成的 JRE 运行 Apktool:
./myjre/bin/java -jar apktool_2.9.3.jar --version
其它方案
从其他 OpenJDK 发行版下载预构建的 JRE(最简单)
虽然 Oracle 不再提供,但其他许多 OpenJDK 的提供商仍然在构建和分发 JRE。这对于你的需求来说是最直接、最简单的解决方案。
这些 JRE 是专门为嵌入式和分发场景设计的,体积更小。
推荐的提供商:
-
BellSoft Liberica JDK
- 优点:他们明确提供了“Standard JRE”下载选项,该选项是专门为运行时环境优化的,体积比完整的 JDK 小得多。
- 操作:
- 访问 BellSoft Liberica JDK 下载页面。
- 选择 Java 版本 (如 17)、操作系统、架构。
- 在 "Package Type" (包类型) 下拉菜单中,选择 "Standard JRE"。
- 下载
.zip
或.tar.gz
压缩包。
-
Azul Zulu Community
- 优点:另一个非常流行的选择,它们也提供了 JRE 的包。
- 操作:
- 访问 Azul Downloads。
- 使用筛选器选择 Java 版本、操作系统等。
- 确保包类型(Package)是 "JRE"。
- 下载
.zip
或.tar.gz
压缩包。
-
Eclipse Temurin (Adoptium)
- 优点:由 Eclipse 基金会领导,社区驱动,完全开源。
- 操作:
- 访问 Adoptium 官网。
- 选择你的操作系统、架构、版本。
- 在包类型(Package Type)中,选择 "JRE"。
- 下载
.zip
或.tar.gz
。
总结: 这个方法最省事。你直接下载一个别人已经为你准备好的、小型的、便携的 JRE,然后按照我们之前讨论的步骤将其捆绑到你的项目中即可。