要求:

在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 Animation动画实战(二):从屏幕底部弹出PopupWindow
  2. Android旋转屏幕时阻止activity重建
  3. 关于Android使用proguard进行代码混淆
  4. Android实现动态改变app图标的示例代码
  5. android 使用代码方式创建自定义progressBar——自定义控件学习(

随机推荐

  1. Android:复杂数据模型的传递
  2. 微服务-Android客户端: 实现注册和登录
  3. 浅析Android(安卓)MediaProvider之二
  4. Android实现录屏直播(三)MediaProjection +
  5. 【Android(安卓)开发】:UI控件之 ScrollVi
  6. android Activity线性布局和表格布局实例
  7. 如何检查 Android 应用的内存使用情况
  8. Android学习路线:如何成长为高级工程师
  9. APP开发 你应该iOS和Android都开发 还是
  10. Android面试宝典----1.选择填空分析及答