0
点赞
收藏
分享

微信扫一扫

android悬浮窗状态下的点击、滑动

勇敢乌龟 2022-04-14 阅读 71
android

android悬浮窗状态下的点击、滑动:

提前的准备

  1. 需要到下载android源码中两个文件,可通过http://aospxref.com/ 或者http://androidxref.com/(更新慢)进行下载
  2. 下载路径/build/target/product/security里面的platform.pk8和platform.x509.pem
  3. 准备linux服务器
  4. 下载上述工具。keytool-importkeypair文件可通过https://github.com/getfatday/keytool-importkeypair 下载
  5. linux服务中配置java环境,下载jdk官网:https://www.oracle.com/java/technologies/downloads/#java8
  6. 目前在官网下载低于jdk1.8的java jdk的时候需要登陆,账号:913898356@qq.com 密码:Oracle123.
  7. 服务器解压:tar -zxvf jdk-8u181-linux-x64.tar.gz
  8. 删除压缩包:rm -f jdk-8u181-linux-x64.tar.gz
  9. 配置环境变量:vim /etc/profile 按I进入添加,ESC后输入:wq 保存退出
    export JAVA_HOME=/usr/local/jdk1.8.0_311  #jdk安装目录
    export JRE_HOME=${JAVA_HOME}/jre
    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
    export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
    export PATH=$PATH:${JAVA_PATH}
  10. 通过命令source /etc/profile让profile文件立即生效
  11. java -version 检查是否安装成功。

将自己的keystore打成系统级

  • 成功后 在keytool-importkeypair相关工具 解压后的目录中进入控制台,输入以下内容:
    ./keytool-importkeypair -k debug.keystore -p android(密码,不要带这个括号里的) -pk8 platform.pk8 -cert platform.x509.pem -alias platform

替换本地keystore

  • 生成后的debug.keystore替换 本地开发环境中.android/debug.keystore文件。
  • AndroidManifest.xml 中的 增加android:sharedUserId="android.uid.system
  • AndroidManifest.xml 增加权限
    以上基本配置完成

点击逻辑(仅供参考):

        /**
* 当maxX,maxY为-1时,方法为精确定位点击
* 当maxX,maxY 都不为-1时,为(x-maxX),(y-maxY) 范围内随机点击
* delayTime 点击时间
*/

fun touchDownAndUp(x: Int, y: Int, maxX:Int=-1,maxY:Int=-1,delayTime: Long = 50) {
Thread {
kotlin.run {
try {
val toX =when{
maxX==-1||maxY==-1->x
else->when{
x>maxX->(maxX..x).random()
else->(x..maxX).random()
}
}
val toY =when{
maxX==-1||maxY==-1->y
else->when{
y>maxX->(maxY..y).random()
else->(y..maxY).random()
}
}
val inst = Instrumentation()
val dowTime = SystemClock.uptimeMillis()
inst.sendPointerSync(
MotionEvent.obtain(
dowTime, dowTime,
MotionEvent.ACTION_DOWN, toX.toFloat(), toY.toFloat(), 0
)
)
inst.sendPointerSync(
MotionEvent.obtain(
dowTime + delayTime, dowTime + delayTime,
MotionEvent.ACTION_UP, toX.toFloat(), toY.toFloat(), 0
)
)
} catch (e: Exception) {
e.printStackTrace()
}
}
}.start()
}

滑动逻辑(仅供参考):

 /**
* x,y 滑动起始坐标
* toX,toY 结束坐标
* delayTime 持续时间
*/

fun touchMove(x: Int, y: Int, toX: Int, toY: Int, delayTime: Long = 100) {
Thread {
kotlin.run {
try {
val inst = Instrumentation()
val pTime = delayTime.div(10)
val pX = when {
toX - x == 0 -> {
0
}
else -> {
(toX - x).div(10)
}
}
val pY = when {
toY - y == 0 -> {
0
}
else -> {
(toY - y).div(10)
}
}
val dowTime = SystemClock.uptimeMillis()
inst.sendPointerSync(
MotionEvent.obtain(
dowTime, dowTime,
MotionEvent.ACTION_DOWN, x.toFloat(), y.toFloat(), 0
)
)
for (i in 0..10) {
inst.sendPointerSync(
MotionEvent.obtain(
dowTime, dowTime + pTime.times(i),
MotionEvent.ACTION_MOVE,
x.plus(pX.times(i)).toFloat(),
y.plus(pY.times(i)).toFloat(),
0
)
)
}
inst.sendPointerSync(
MotionEvent.obtain(
dowTime + delayTime, dowTime + delayTime,
MotionEvent.ACTION_UP, toX.toFloat(), toY.toFloat(), 0
)
)
} catch (e: Exception) {
e.printStackTrace()
}
}
}.start()
}
举报

相关推荐

0 条评论