Недоступный оператор из вывода декомпилятора
Я декомпилировал файл 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
всегда верно и не беспокоит проверка в байт-коде (для эффективности).
Очевидно, мой пример довольно надуманный, в действительности он был, вероятно, более сложным (хотя конечный результат тот же).