jre 的生成与使用

前言

Java 9 开始,Oracle 不再单独提供 JRE(Java Runtime Environment) 的独立安装包,而是推荐开发者使用 模块化的 JREjlink 工具 来自定义运行时环境。

新版 Java(JDK 9+)的变化

  1. 不再提供独立的 JRE 安装包

    • 以前:JDK(开发工具包)和 JRE(运行时环境)是分开的,用户可以只安装 JRE 来运行 Java 程序。
    • 现在:Oracle 和 OpenJDK 只提供 完整的 JDK,但你可以使用 jlink 工具从 JDK 中提取最小化的 JRE。
  2. 模块化系统(Java Platform Module System, JPMS)

    • Java 9 引入了模块化系统,允许你只打包应用所需的模块,而不是整个 JRE。
    • 你可以使用 jlink 生成一个 自定义的、精简的 JRE,只包含你的应用所需的模块,从而大幅减小体积。
  3. 推荐使用 jlink 生成最小 JRE

    • jlink 是 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.desktopjava.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 是专门为嵌入式和分发场景设计的,体积更小。

推荐的提供商:

  1. BellSoft Liberica JDK

    • 优点:他们明确提供了“Standard JRE”下载选项,该选项是专门为运行时环境优化的,体积比完整的 JDK 小得多。
    • 操作
      • 访问 BellSoft Liberica JDK 下载页面
      • 选择 Java 版本 (如 17)、操作系统、架构。
      • 在 "Package Type" (包类型) 下拉菜单中,选择 "Standard JRE"
      • 下载 .zip.tar.gz 压缩包。
  2. Azul Zulu Community

    • 优点:另一个非常流行的选择,它们也提供了 JRE 的包。
    • 操作
      • 访问 Azul Downloads
      • 使用筛选器选择 Java 版本、操作系统等。
      • 确保包类型(Package)是 "JRE"
      • 下载 .zip.tar.gz 压缩包。
  3. Eclipse Temurin (Adoptium)

    • 优点:由 Eclipse 基金会领导,社区驱动,完全开源。
    • 操作
      • 访问 Adoptium 官网
      • 选择你的操作系统、架构、版本。
      • 在包类型(Package Type)中,选择 "JRE"
      • 下载 .zip.tar.gz

总结: 这个方法最省事。你直接下载一个别人已经为你准备好的、小型的、便携的 JRE,然后按照我们之前讨论的步骤将其捆绑到你的项目中即可。

posted @ 2025-03-25 16:09  丁少华  阅读(148)  评论(0)    收藏  举报