0

我反编译了一个 APK 文件,然后尝试编译它并收到“无法访问的语句”编译器错误,我想知道它是混淆器技巧,还是反编译器失败?这怎么可能?使用 dex2jarJava 反编译器

这是反编译的方法

public void onSensorChanged(SensorEvent paramSensorEvent) {
    float[] arrayOfFloat = paramSensorEvent.values;
    switch (paramSensorEvent.sensor.getType())
    {
    }
    do
    {
        return;
    } while (this.aDegree == arrayOfFloat[0]);
    this.aDegree = arrayOfFloat[0];
    invalidate();
}
4

1 回答 1

5

这是可能的,因为它unreachable statement是一个有用的编译时错误,而不是运行时检查/约束。

您反编译的代码最初可能有这样的内容:

boolean debug = true;
do {
    if(debug) {
        return;
    }
}while (this.aDegree == arrayOfFloat[0]);

编译器足够聪明,知道这debug总是正确的,并且不会打扰字节码的检查(为了提高效率)。

显然我的例子是相当做作的,实际上它可能更复杂(尽管最终结果是相同的)。

于 2014-10-27T18:04:43.670 回答