要求:

在Android上按像素位置进行模拟屏幕点击,无论前台程序是什么(类似于按键精灵)。

解决方案:

使用安卓中的linux命令行来进行模拟(可以完成目标但是不优雅)。

前提知识:

  • ADB中可以使用”adb shell tap x y”来模拟点击
  • Android代码中可以使用ProcessBuilder来执行命令行语句。
  • 参考链接: Android通过代码模拟物理、屏幕点击事件 , Android adb shell 获得点击屏幕的位置坐标

示例代码:

package com.example.wkm.motioneventgenerator;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.drawable.Drawable;import android.os.Process;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.KeyEvent;import android.view.MotionEvent;import android.widget.ImageView;import android.widget.Toast;import java.io.IOException;public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        final int width = getWindowManager().getDefaultDisplay().getWidth();        final int height = getWindowManager().getDefaultDisplay().getHeight();        //每10s产生一次点击事件,点击的点坐标为(0.2W - 0.8W,0.2H - 0.8 H),W/H为手机分辨率的宽高.        new Thread(new Runnable() {            @Override            public void run() {                while (true) {                    //生成点击坐标                    int x = (int) (Math.random() * width * 0.6 + width * 0.2);                    int y = (int) (Math.random() * height * 0.6 + height * 0.2);                    //利用ProcessBuilder执行shell命令                    String[] order = {                            "input",                            "tap",                            "" + x,                            "" + y                    };                    try {                        new ProcessBuilder(order).start();                    } catch (IOException e) {                        e.printStackTrace();                    }                    //线程睡眠10s                    try {                        Thread.sleep(10000);                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                }            }        }).start();    }    /**     * 打印点击的点的坐标     * @param event     * @return     */    @Override    public boolean onTouchEvent(MotionEvent event) {        int x = (int) event.getX();        int y = (int) event.getY();        Toast.makeText(this, "X at " + x + ";Y at " + y, Toast.LENGTH_SHORT).show();        return true;    }}



后话(没时间就不用看后面的了,没有什么有用的)

看了一些游戏外挂相关的东西才对这些有了兴趣,本来想在代码里面通过API实现(我觉得那样比较优雅,直接shell命令太野蛮),但是现在的知识还不够。
我要实现的就是类似于按键精灵这种可以程序操纵手机的(手点的话太费事了),看了安卓手机微信抢红包后,稍微了解了一下,但是开始对游戏内容进行分析的时候发现这个策略行不通,因为游戏大都是动画制作的(比如unity3d等,我也不了解这些),这种跟微信那种纯Android组件构成的应用还不一样(因为游戏界面就不是由Android组件构成的),所以没办法我只能退而求其次简略地进行点击模拟来完成我的目的(目的就是不停地点屏幕,不过现在看来没有那么简单,还需要对当前的图形进行处理,感觉不该这么麻烦的)。不知道有没有别的可以用于修改,比如说检测内存这种,这都需要对安卓系统更加了解才行,需要多多学习。

有谁对这种(非Android组件构成的)游戏有什么了解的话,希望可以不吝赐教。

更多相关文章

  1. 在android中使用SOAP与webservice进行数据交互
  2. Android初次使用遇到的两个问题
  3. Android(安卓)http中文乱码问题 转
  4. Android(安卓)Studio3.0 新特性 ~ New Features in Android(安卓)
  5. Unity编译Android的原理解析和apk打包分析
  6. ADB的使用
  7. 【转】Android(安卓)虚拟机安装APK文件方法
  8. [android]关于开发无触摸屏(智能电视)的android selector无法实
  9. 关于Android使用proguard进行代码混淆

随机推荐

  1. gson使用在android使用例子
  2. Android 拍照及相册选图的那些坑
  3. android 设置bitmap 设置图片的大小
  4. android SQLiteDatebase 实践
  5. Ubuntu上安装和使用Android Studio
  6. android音频、视频、拍照基础操作
  7. Android SDK与ADT不匹配的问题 This Andr
  8. Android(安卓)UI ListView讲解
  9. Android下读取logcat的信息
  10. 搭建 android 代码镜像服务