guominmin / TimeSpeed

用于Android的时间加速实现,通过hook libc.so库中获取时间的函数,加工后返回加快的时间,可用于挂机游戏加速动画

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

说明

在获取时间时,通常使用System.currentTimeMillis()获取系统时间,该时间是我们生活中使用的时间,即UTC时间,该时间可通过设置应用进行修改,正因为如此,我们在使用该时间作为计量单位时,可能出现真实时间被篡改所带来的一些不确定问题。另外一种则是系统开机时间,可以使用SystemClock.uptimeMillis()方法获取,该时间无法修改,但每次重启设备都会被重置。

在Android的动画系统或者游戏的动画系统中,通常使用开机时间来计算动画播放速度,诸如回合制游戏,基本都是根据数据按时间播放一段动画完成游戏过程,这类游戏耗费大量时间,从而市面上有人开发游戏加速助手通过加快时间来使整个过程变快。

众所周知,Android内核是基于Linux的,那么Android中获取时间的方法,本质是调用/system/lib/libc.so中的gettimeofday方法和clock_gettime方法,前者获取utc时间,后者获取开机时间,通过hook这两个函数,则可以改变当前进程获取的时间。

使用

该项目支持对这两种时间的速度改变,加快或减慢,示例代码如下

TimeSpeed.speedClockTime(this, 10f)  //加快开机时间
TimeSpeed.speedClockTime(this, 0.5f)  //减慢开机时间
TimeSpeed.speedUTCTime(this, 10f)  //加快UTC时间
TimeSpeed.speedUTCTime(this, 0.5f)  //减慢UTC时间

时间加快后如果想停下来,可以把速率传1,但时间不可倒退,即加速的时间不能变成正常时间,由于加速是以进程为单位的,所以只会改变有调用该方法进程的时间,不会影响其他进程或其他App。

About

用于Android的时间加速实现,通过hook libc.so库中获取时间的函数,加工后返回加快的时间,可用于挂机游戏加速动画


Languages

Language:C++ 52.3%Language:Kotlin 33.7%Language:CMake 14.0%