前言

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. CM311-1A魔百和刷armbian或openwrt系统包

    系统包下载链接:Openwrt:阿里云盘链接:https://www.aliyundrive.com/s/tEemRbs1TYB已失效下载后请解压!!!!!!!!! Armbian:链接:https: ...

  2. SpringMvc怎么样把数据带给页面

    例子. /** * SpringMVC除过在方法上传入原生的request和session外还能怎么样把数据带给页面 * * 1).可以在方法处传入Map.或者Model或者ModelMap. * 给 ...

  3. [设计模式/Java] 设计模式之门面模式(外观模式)【20】

    概述 : 门面模式 := 外观模式 := Facade Pattern 产生背景 软件开发过程中,我们经常会遇到复杂系统,其中包含多个子系统和接口.在这种情况下,为了简化客户端的调用过程,提高代码的可 ...

  4. sonarqube+gitlab+jenkins+maven集成搭建(三)

    安装JENKINS 关闭防火墙[root@localhost ~]# systemctl stop firewalld[root@localhost ~]# systemctl disable fir ...

  5. ubuntu安装clamav

    直接apt安装 sudo apt-get update sudo apt-get install clamav clamav-daemon clamscan --version 停止服务更新病毒库 为 ...

  6. 服务器时间漂移,如何开启Linux NTP自动同步

    前言 在日常服务器运维中,我们往往默认服务器的时间是精准的.但最近一次偶然的 date 查询,让我发现--服务器时间竟然悄悄地漂移了-- 本文记录了整个排查与解决的过程,希望能帮到遇到类似问题的朋友, ...

  7. smail log插桩(模板)

    即插即用 后面都用hook了,但是为了方便,还是分享下吧 Log const-string v0, "MYTAG" const-string v1, "Message&q ...

  8. JavaScript编程艺术:掌门人的代码之道

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

  9. dll正由另一进程使用,因此该进程无法访问此文件

    打开 Windows 资源监视器:按下 Win+R 快捷键打开"运行"对话框,输入 resmon 命令并按下回车键.在资源监视器中,选择"CPU"选项卡,然后在 ...

  10. B1071 小赌怡情 (15 分)

    描述 常言道"小赌怡情".这是一个很简单的小游戏:首先由计算机给出第一个整数:然后玩家下注赌第二个整数将会比第一个数大还是小:玩家下注 t 个筹码后,计算机给出第二个数.若玩家猜对 ...