前言

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

jre 的生成与使用的更多相关文章

  1. Java项目生成可执行jar包、exe文件以及在Windows下的安装文件

    1.如何通过eclipse将Java项目生成可执行jar包 首先把在eclipse下的java项目导出jar file 下一步 下一步 下一步 最后点击完成,便生成了可执行的jar文件.可以在刚刚选择 ...

  2. 开发回归测试之Selenium开发环境搭建

    前言 在解bug的过程中,经常遇到解完某个bug带来新的bug,原因一般是因为回归测试不足或不全面,下面我们来看看怎么利用selenium工具来完成开发后的回归测试, 虽然这可能是QA的事,不过有利于 ...

  3. CAS多点登录

    转自:http://www.blogjava.net/alwayscy/archive/2012/12/01/392322.html 场景 想要用到的场景:用户访问WEB服务,WEB访问非WEB服务1 ...

  4. 把Jar文件转成exe安装文件

    1.你要清楚的目标文件是32位还是64位的,如果生成的是32位,你就要使用32位的jre,如果生成的是64位,就要使用64位的jre. 图 1 在圆圈位置进行32bit或64bit的选择.因为我要创建 ...

  5. 2019.12.04 ADT on eclipse 配置篇

    今天看JerryWang的简书博客https://www.jianshu.com/p/74ad8e4bbc49 ,SAP GUI 和ADT是互为补充的关系,有很多SAP新出的技术都没有办法在GUI上开 ...

  6. jdk11下载安装及环境变量配置

    jdk11下载安装及环境变量配置 官网地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-50666 ...

  7. 为实践javaweb项目,搭建了相应环境

    为实践javaweb项目,搭建了相应环境,现总结一下. JDK与JRE的安装与配置 前提准备: 1.我们下载的JDK安装包里面既包含JDK又包含JRE: 2.要确认你的电脑里面没有JDK和JRE的残留 ...

  8. 【工具】Java转换exe

    一.导出jar包 eclipse中对着要转换的项目,右键,导出 搜索jar,选择jar文件,下一步 选择要输出的项目 继续下一步 选择主程序 完成 二.下载及安装exe4j,并转换jar文件为exe文 ...

  9. servlet包找不到,webservlet注解无效

    把tomcat/lib/  中的annotations-api.jar和servlet-api.jar复制到jdk/jre/lib/ext/目录中就行了 mine:C:\environment\apa ...

  10. Oracle 11g数据库详解(2)

    FAILED_LOGIN_ATTEMPTS 用于指定连续登陆失败的最大次数 达到最大次数后,用户会被锁定,登陆时提示ORA-28000 UNLIMITED为不限制 精确无误差 是 实时 PASSWOR ...

随机推荐

  1. Spring 的 resolveBeforeInstantiation 方法作用详解

    一.定义 resolveBeforeInstantiation 是 Spring 框架中 AbstractAutowireCapableBeanFactory 类的核心方法之一,它在 Bean 的实例 ...

  2. Redis使用IO多路复用进行事件处理机制

    一.epoll多路复用 这里重点要说的就是redis的IO编程模型,首先了解下 为什么要有多路复用呢 ? 案例 引用知乎上一个高赞的回答来解释什么是I/O多路复用.假设你是一个老师,让30个学生解答一 ...

  3. redis那些数据类型?分别在那些场景使用

    (1)string 这是最基本的类型了,没啥可说的,就是普通的set和get,做简单的kv缓存 例子:常规计数:微博数,粉丝数等 (2)hash 这个是类似map的一种结构,这个一般就是可以将结构化的 ...

  4. 函数组件的声明方式及差异+React.memo和userCallback区别

    1.函数组件的声明方式及差异 普通函数声明 箭头函数声明 使用React.FC类型(TypeScript专用) interface Props { content: string } // 写法一 c ...

  5. Traefik,想说爱你不容易:一场动态反向代理的心累之旅

    前言:技术选型的初心 在微服务盛行.容器部署逐渐常态化的今天,"动态反向代理"显得尤为重要. Traefik 凭借其原生支持 Docker.自动生成路由.集成 Let's Encr ...

  6. element ui select组件 实现鼠标悬浮 自动展开选项

    利用鼠标悬浮事件: 同样的原理也可以设置鼠标移开自动关闭

  7. 漏洞预警 | Ivanti Connect Secure栈溢出漏洞

    0x00 漏洞编号 CVE-2025-0282 0x01 危险等级 高危 0x02 漏洞概述 Ivanti Connect Secure是一款远程访问和零信任安全解决方案,它提供了SSL VPN功能, ...

  8. 代码随想录第八天| Leecode 344. 反转字符串、Leecode 541 反转字符串 II

    Leecode 344 反转字符串 题目链接:https://leetcode.cn/problems/reverse-string/description/ 题目描述 编写一个函数,其作用是将输入的 ...

  9. Flutter视频压缩技术:如何在应用中优化视频文件的质量和大小?

    @charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...

  10. 用 Tarjan 算法求解有向图的强连通分量

    图论中的连通性概念是许多算法与应用的基础.当我们研究网络结构.依赖关系或路径问题时,理解图中的连通性质至关重要.对于不同类型的图,连通性有着不同的表现形式和算法解决方案. 无向图与有向图的连通性 在无 ...