I want to statically determine unused code path in Android apk i.e. I want to find out all paths in .dex file that my code will never reach. What are the possible ways to do so ?
问问题
91 次
1 回答
2
一般来说,javac 编译器不会生成死代码。如果可以静态确定某些内容无法访问,则编译将失败。例如:
void foo() {
throw new RuntimeException();
doStuff();
}
这会导致“无法访问的语句”失败。无论如何,您都可以向编译器“提示”您要执行此操作:
void foo() {
if (true) throw new RuntimeException();
doStuff();
}
但是,编译器仍然知道对 doStuff() 的调用不可达,并丢弃它。
如果您确实设法将死代码放入 DEX 文件中,字节码验证器会选择性地告诉您 -DEAD_CODE_SCAN
在验证器源中查找。
所有这些都是针对方法内的死代码。为了识别从未实际调用过的整个方法,您可以使用ProGuard(这是一个可选但官方支持的 Android 应用程序构建部分)。这可能会误报并删除从未直接调用但可能通过反射调用的方法,因此有时需要手动覆盖。
于 2013-08-13T17:45:37.477 回答