Java 中是否有“/usr/bin/strip”的对应项?

2024-04-24

有没有任何工具可以从 Java .class 文件中删除调试信息,就像/usr/bin/strip可以在 Linux 上从 C/C++ 目标文件中获取吗?

EDIT:我喜欢 Thilo 和 Peter 的回答:Peter 的回答很简短,而且暴露了我对 JDK 附带的内容的无知; Thilo 的 ProGuard 建议是我肯定会检查的,因为它似乎提供了所有这些额外的功能。谢谢蒂洛和彼得!


ProGuard http://proguard.sourceforge.net/index.html#/FAQ.html(例如 Android SDK 附带的用于减少代码大小),可以执行各种操作来缩小 JAR 文件:

  • 计算常量表达式。
  • 删除不必要的字段访问和方法调用。
  • 删除不必要的分支。
  • 删除不必要的比较和instanceof 测试。
  • 删除未使用的代码块。
  • 合并相同的代码块。
  • 减少变量分配。
  • 删除只写字段和未使用的方法参数。
  • 内联常量字段、方法参数和返回值。
  • 内联方法较短或仅调用一次。
  • 简化尾递归调用。
  • 合并类和接口。
  • 尽可能将方法设为私有、静态和最终。
  • 尽可能使类静态且最终。
  • 替换具有单一实现的接口。
  • 执行 200 多项窥孔优化,例如用 ...
  • (可选)删除日志记录代码。

他们没有提到删除该列表中的调试信息,但我想他们也可以这样做。

Update:确实是的:

默认情况下,编译后的字节码仍然包含大量调试信息:源文件名、行号、字段名、方法名、参数名、变量名等。这些信息使得反编译字节码和对整个程序进行逆向工程变得简单。有时,这是不可取的。 ProGuard 等混淆器可以删除调试信息,并用无意义的字符序列替换所有名称,从而使对代码进行逆向工程变得更加困难。作为奖励,它进一步压缩了代码。除了异常堆栈跟踪中给出的类名称、方法名称和行号之外,该程序在功能上保持等效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 中是否有“/usr/bin/strip”的对应项? 的相关文章

随机推荐

  • 在 Excel 中通过宏向表添加列时设置列标题

    因此 我正在研究这个宏 它根据表中的其他列自动将列添加到表中 所以这是功能 我在此表中有许多标题为 CY 2010 CY 2020 的列 这些年将不可避免地发生变化 然后我想为每个 CY 列在表中添加一列 此外 我希望这些列的标题与年份相匹
  • 如何检查已触摸对象的 ID (iOS)

    在我的视图中 我有一个包含一堆不同点的数组 然后我通过循环运行该数组以在视图中创建一堆不同的正方形 您还可以看到我尝试使用辅助功能标识符来创建类似 ID 的系统 这可能是一个非常糟糕的做法 但我没有主意了哈哈 这是视图 import Lev
  • MongoDB聚合,按值区间分组,

    MongoDB 文档 id 123213 elevation 2300 area 25 id 343221 elevation 1600 area 35 id 545322 elevation 500 area 12 id 234234 e
  • 查找重复邮寄地址的策略

    我正在尝试想出一种根据相似度分数查找重复地址的方法 考虑这些重复的地址 addr 1 3 FAIRMONT LINK SOUTH addr 2 3 FAIRMONT LINK S addr 3 5703 48TH AVE adrr 4 57
  • 将标头添加到 WCF RequestSecurityToken 消息

    我正在尝试设置将使用 WSHttpBinding 进行通信的客户端 Web 应用程序 和服务 WCF 服务 看来 为了使用此绑定 客户端会发送初步消息来设置通道 客户端和服务之间存在一条服务总线 该总线在自定义标头上进行路由 当使用 Bas
  • 为什么 Glass 缺少 Google Play 服务?

    谷歌眼镜上不包含谷歌播放服务的原因是什么 将来会添加它们吗 看来将来还会在 Glass 上添加 Google Play 服务 有一个问题已被 接受 尽管具有中等优先级 请参阅来自谷歌眼镜官方发行网站
  • 如何从 node_modules 延迟加载外部模块?

    我们可以像这个模块一样延迟加载本地模块 path somePpath loadChildren app path some module SomeModule 我们如何延迟加载来自驻留在node modules中的外部库的模块 要在路由器模
  • 从 ASP 的 Ajax.ActionLink 获取 JsonResult

    如何使用 Ajax ActionLink 从控制器方法实际获取 JSON 我尝试搜索该网站 但我得到的最接近的是返回 JSON 或部分 html 的 ASP NET MVC 控制器操作 https stackoverflow com que
  • 如何从模数、指数和私有指数创建 Crypt::RSA 对象?

    我正在尝试将以下 php 功能移植到 perl public function loadKey mod exp type public rsa new Crypt RSA rsa gt signatureMode CRYPT RSA SIG
  • 如何在webRTC android中将视频流数据录制为mp4?

    请帮我 我在中使用了这个例子https github com pcab AndroidRTC https github com pchab AndroidRTC将视频和音频从 Android 设备流式传输到其他 Android 设备 在这个
  • Scipy Weibull CDF 计算

    我正在 Scipy 中进行生存计算 但无法获得正确的值 My code x a c 1000 1 5 5000 vals exponweib cdf x a c loc 0 scale 1 vals应该等于 0 08555935639278
  • Boost python 导出单例

    我有一个单例 来自 boost serialization class LogManager public boost serialization singleton
  • 将日期时间设置为下一刻钟

    让我们想象一下这个datetime gt gt gt import datetime gt gt gt dt datetime datetime 2012 10 25 17 32 16 我想把时间限制在下一刻钟 以便 datetime da
  • 使用 JMeter 时陷入嵌套循环。嵌套循环控制器和 CSV 数据集配置。

    在我的网站上 我有两个商家操作 搜索和浏览 一次搜索通常会触发三次浏览 我有一个 JMeter 测试 它使用商家和商家 ID 号的 CSV 文件 在大规模运行此测试时 我希望使用我网站上的所有商家 我已经在 J Meter 中映射了它 如下
  • 使用选项模式的依赖注入

    我正在尝试从 appsettings 文件加载一些设置 但在使用选项模式时加载列表的方式遇到了一个小问题 假设我有以下类 用于加载设置 public class Application public string Name get set
  • NUnit 不会因 Finalizer 中的异常而失败

    在我们的框架中 有一些具有文件句柄或 WCF 客户端连接的关键对象 这些对象是IDiposable我们有验证代码 抛出异常 以确保它们在不再需要时得到正确处置 仅调试 这样我们就不想在发布时崩溃 这不一定是在关机时发生的 最重要的是 我们有
  • Jersey Rest 客户端未添加查询参数

    我正在尝试为 google 搜索 api 制作一个简单的球衣休息客户端 Client client ClientBuilder newClient WebTarget target client target https www googl
  • Realm 为我的 apk 添加了额外的大小

    在添加 Realm 库之前 我的 apk 的初始大小为 2 3 MB 添加相同的库后 apk 大小增加到 10 61 MB 是否可以减小大小 如果是 如何减小 如果没有 请推荐 Realm 的替代品 您可以使用 abi split 来减小
  • 是否可以取消 NKAssetDownload?

    我在 App Store 上有一个杂志阅读器 我目前正在实现 NewsstandKit 功能 我的应用程序具有此下载工作流程 用户可以随时取消当前下载 我希望用户能够购买应用内产品 并以报刊亭后台下载的方式开始下载 杂志包含多媒体 因此它们
  • Java 中是否有“/usr/bin/strip”的对应项?

    有没有任何工具可以从 Java class 文件中删除调试信息 就像 usr bin strip可以在 Linux 上从 C C 目标文件中获取吗 EDIT 我喜欢 Thilo 和 Peter 的回答 Peter 的回答很简短 而且暴露了我