Недоступный оператор из вывода декомпилятора

Я декомпилировал файл APK, затем попытался скомпилировать его и получил ошибку компилятора "Недоступное заявление". Я хочу знать, не является ли это уловкой обфускатора или ошибкой декомпилятора? Как это возможно? Используется dex2jar и Java Decompiler

А вот и декомпилированный метод

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();
}

1 ответ

Решение

Это возможно, потому что unreachable statement является полезной ошибкой времени компиляции, а не проверкой / ограничением времени выполнения.

Код, который вы декомпилировали, мог изначально иметь что-то вроде этого:

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

Компилятор достаточно умен, чтобы знать, что debug всегда верно и не беспокоит проверка в байт-коде (для эффективности).

Очевидно, мой пример довольно надуманный, в действительности он был, вероятно, более сложным (хотя конечный результат тот же).

Другие вопросы по тегам