消除死代码
使用集合让一切井井有条
根据您的偏好保存内容并对其进行分类。
简介
Java 应用的源 jar 可能包含大量的源文件,
完全未使用或仅包含少数方法。将此无效代码转换为 Objective-C
会不必要地膨胀您的 iOS 应用,并且会增加遇到
转换错误,尤其是在某个 Java 库使用
J2ObjC 翻译器。
ProGuard是一个开源工具
混淆以及损坏 Java 字节码。(可选)给定一个字节码 jar,它可以输出
"使用"报告中列出了应用中所有未使用的类和方法。J2ObjC 可以使用
以便在翻译过程中跳过这些类和方法。
您可以在此处下载 ProGuard。
配置 ProGuard
ProGuard 接受配置文件作为命令行参数,指定对它的优化
以及应生成的报告由于 J2ObjC 只需要了解死代码,
您应停用所有优化功能和无关的日志记录;传递给 J2ObjC 的文件应该
仅包含 ProGuard 标头文本和使用情况报告。
首先,确保您的应用中有一个与源 jar 相对应的字节码 jar。
您可以将从 ProGuard 手册中复制的以下配置文件用作模板,
J2ObjC 预期的输出:
-injars app-bin.jar
-libraryjars /lib/rt.jar
-dontoptimize
-dontobfuscate
-dontpreverify
-printusage
-dontnote
-keep public class com.foo.app.Main {
public static void main(java.lang.String[]);
}
-keepclassmembers class * {
static final % *;
static final java.lang.String *;
}
修改此配置文件,以确保 ProGuard 不会去除不应包含的任何内容。
如果您的 jar 是一个应用,而不仅仅是库,则应按如下所示指定 main()
方法
以便保留所有必要的信息您可以从
使用 ProGuard 作为健全性检查
运行 ProGuard
在获得应用的字节码 jar 和自定义的 ProGuard 配置文件(称为
例如 usage.pg
),则可以使用以下命令创建使用情况报告文件:
java -jar proguard.jar @usage.pg > usage.log
这将创建一个名为 usage.log
的文件,其中会列出应用未使用的类和方法。
运行 J2ObjC 消除死代码
现在您已获得 ProGuard 使用情况报告,可以在以下位置启用死代码消除阶段:
使用命令行标志 --dead-code-report <file>
的 J2ObjC。DeadCodeEliminator 翻译
阶段将使用使用情况报告从每个源文件中移除死代码,然后再转换为
Objective-C。
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2024-08-29。
[[["易于理解","easyToUnderstand","thumb-up"],["解决了我的问题","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["没有我需要的信息","missingTheInformationINeed","thumb-down"],["太复杂/步骤太多","tooComplicatedTooManySteps","thumb-down"],["内容需要更新","outOfDate","thumb-down"],["翻译问题","translationIssue","thumb-down"],["示例/代码问题","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["最后更新时间 (UTC):2024-08-29。"],[[["J2ObjC can leverage ProGuard's usage reports to identify and eliminate unused Java code during the translation to Objective-C, resulting in smaller and more efficient iOS applications."],["ProGuard needs to be configured to solely generate a usage report, disabling optimizations and extraneous logging, to provide J2ObjC with the necessary information on unused classes and methods."],["A ProGuard usage report can be created by running ProGuard with a specific configuration file and redirecting its output to a file, which is then used by J2ObjC."],["J2ObjC's dead code elimination is activated using the `--dead-code-report` flag, followed by the path to the ProGuard usage report file generated in the previous steps."]]],[]]