Intereting Posts
Галерея onItemClick и onTouchEvent не работают вместе с версии для Android версии 3.0 Сохранение веб-страницы в кеше с помощью webview в android Почему ViewPager и GridLayout с 30 элементами очень медленные? Как прослушивать изменение состояния в виджетах SwitchCompat? Как сделать HorizontalScrollView RIGHT на LEFT Scroll android Почему я не могу заставить один из моих представлений отображать в программном обеспечении? Детальный жизненный цикл активности Android (onAttachedToWindow ()) UserRecoverableAuthException: NeedPermission Невозможно добавить объявления в мое приложение. Перехват исходящих SMS-сообщений Чтение определенного файла из sdcard в android Как установить высоту AppBarLayout программно в библиотеке поддержки Android v24.0.0? Приложение для автоматического запуска после завершения загрузки в Android Как изменить высоту кнопки «Войти в систему с помощью Facebook»? Как отправить объект из одной активности Android в другой с помощью намерений?

Как вы можете избежать эксплойтов в играх для Android?

Мне нужно измерить период времени, который может длиться до нескольких часов. Я предполагаю, что обычный способ сделать это будет примерно таким:

Date date = new Date(); ...wait some time... (new Date()).getTime() - date.getTime()) 

Но может ли пользователь изменить часы Android на час, чтобы обмануть игру и сократить время? Будет ли лучшее время для чтения из онлайн-источника?

Solutions Collecting From Web of "Как вы можете избежать эксплойтов в играх для Android?"

new Date() использует System.currentTimeMillis() которая зависит от часов ОС – и может быть изменена, когда пользователь изменяет системную дату и время.

Вы должны использовать System.nanoTime() , который имеет следующие свойства:

 /** * Returns the current value of the most precise available system * timer, in nanoseconds. * * <p>This method can only be used to measure elapsed time and is * not related to any other notion of system or wall-clock time. * The value returned represents nanoseconds since some fixed but * arbitrary time (perhaps in the future, so values may be * negative). This method provides nanosecond precision, but not * necessarily nanosecond accuracy. No guarantees are made about * how frequently values change. Differences in successive calls * that span greater than approximately 292 years (2<sup>63</sup> * nanoseconds) will not accurately compute elapsed time due to * numerical overflow. * * <p> For example, to measure how long some code takes to execute: * <pre> * long startTime = System.nanoTime(); * // ... the code being measured ... * long estimatedTime = System.nanoTime() - startTime; * </pre> * * @return The current value of the system timer, in nanoseconds. * @since 1.5 */ public static native long nanoTime(); 

Это нельзя манипулировать, просто изменив системную дату.