简介
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。