在Android apk中静态地确定未使用的代码路径

时间:2013-08-13 16:22:39

标签: android code-analysis static-code-analysis

我想在Android apk中静态地确定未使用的代码路径,即我想找出.dex文件中我的代码永远不会到达的所有路径。有什么可能的方法呢?

1 个答案:

答案 0 :(得分:2)

一般来说,javac编译器不会生成死代码。如果可以静态地确定某些内容无法访问,则编译将失败。例如:

void foo() {
    throw new RuntimeException();

    doStuff();
}

这会导致“无法访问的语句”失败。你可以“提示”你想要执行此操作的编译器:

void foo() {
    if (true) throw new RuntimeException();

    doStuff();
}

但是,编译器仍然知道对doStuff()的调用是不可达的,并将其丢弃。

如果您确实设法将死代码放入DEX文件中,字节码验证程序将可选地告诉您 - 在verifier source中查找DEAD_CODE_SCAN

所有这些都是针对方法中的死代码。为了识别从未实际调用的整个方法,您可以使用ProGuard(这是Android应用程序版本中可选但正式支持的部分)。这可能是误报并删除从不直接调用但可以通过反射调用的方法,因此有时需要手动覆盖。