0
点赞
收藏
分享

微信扫一扫

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

勇敢乌龟 2022-04-14 阅读 72
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 条评论