要求:

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

解决方案:

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

前提知识:

示例代码:

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组件构成的)游戏有什么了解的话,希望可以不吝赐教。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐