Giter Site home page Giter Site logo

robothelper's Issues

没连接usb进行模拟点击会导致手机卡主

出现的条件:

  1. 在Root的机器上面
  2. 用你的RootInput或者InstrumentationInput作为点击类
  3. 不要连接usb线
    按照上面的步骤,模拟点击的次数多了,会导致整个手机卡主。这个时候如果连接usb线,就恢复了。不管这个usb是连接到电脑,还是充电宝,都可以。一旦断开usb,就会出现手机卡主的情况。初步怀疑是终端要通过usb输出数据,发现没法输出的时候,导致了整个手机卡了。

能否考虑增加支持数字识别?

目前内置的文字识别方法对数字的准确度很低。游戏里很多地方要识别数字。
按键精灵有那种定义10个数字点阵的方式,准确度还挺高的,大大能否考虑下。

图片匹配报错

2021-01-23 15:56:58.623 31535-32038/? E/cv::error(): OpenCV(3.4.1) Error: Assertion failed (info.format == ANDROID_BITMAP_FORMAT_RGBA_8888 || info.format == ANDROID_BITMAP_FORMAT_RGB_565) in void Java_org_opencv_android_Utils_nBitmapToMat2(JNIEnv*, jclass, jobject, jlong, jboolean), file /build/master_pack-android/opencv/modules/java/generator/src/cpp/utils.cpp, line 37
2021-01-23 15:56:58.624 31535-32038/? E/org.opencv.android.Utils: nBitmapToMat caught cv::Exception: OpenCV(3.4.1) /build/master_pack-android/opencv/modules/java/generator/src/cpp/utils.cpp:37: error: (-215) info.format == ANDROID_BITMAP_FORMAT_RGBA_8888 || info.format == ANDROID_BITMAP_FORMAT_RGB_565 in function void Java_org_opencv_android_Utils_nBitmapToMat2(JNIEnv*, jclass, jobject, jlong, jboolean)
2021-01-23 15:56:58.624 31535-32038/? E/AndroidRuntime: FATAL EXCEPTION: Thread-4
Process: cn.xjiangwei.RobotHelper, PID: 31535
CvException [org.opencv.core.CvException: OpenCV(3.4.1) /build/master_pack-android/opencv/modules/java/generator/src/cpp/utils.cpp:37: error: (-215) info.format == ANDROID_BITMAP_FORMAT_RGBA_8888 || info.format == ANDROID_BITMAP_FORMAT_RGB_565 in function void Java_org_opencv_android_Utils_nBitmapToMat2(JNIEnv*, jclass, jobject, jlong, jboolean)
]
at org.opencv.android.Utils.nBitmapToMat2(Native Method)
at org.opencv.android.Utils.bitmapToMat(Utils.java:93)
at org.opencv.android.Utils.bitmapToMat(Utils.java:102)
at cn.xjiangwei.RobotHelper.Tools.Image.matchTemplate(Image.java:417)
at cn.xjiangwei.RobotHelper.GamePackage.Main.start(Main.java:46)
at cn.xjiangwei.RobotHelper.Service.RunTime.lambda$new$0(RunTime.java:12)
at cn.xjiangwei.RobotHelper.Service.-$$Lambda$RunTime$RDwjJ76_1WI5ryoCtkMEOSbuaCo.run(Unknown Source:0)
at java.lang.Thread.run(Thread.java:919)

游戏会检测xposed和Magisk root

RT, 用的自己改的magisk可以过root检测但是不能安装任何插件 也就是不能装xposed
是不是没法使用这个脚本编辑器了?

以前用过
按键精灵旧版 不支持Android10
XX助手 不支持Android10 停更
Auto.js 强制收费
Xscript 关服

想找个开源的平台,实在不想在代码迁移上折腾了

切换应用的办法

目前没有找到可以从一个应用切换到另一个应用的方法,我的场景是这样的,在一个游戏里执行一些动作后切换到Gmail应用读取验证码,然后回到游戏来输入得到的验证码。

我觉得似乎可以取得应用包名然后用instrumentation类来做,不过具体怎么写没有想法。想请教一些作者有没有什么思路。

适配rooted机器屏幕旋转问题

机型: rog phone 2 (rooted)
问题: 在运行横屏程序的时候,不能正确对应屏幕旋转方向给出旋转后的坐标
解决: 临时解决办法是把x与y手动交换,并且屏幕左方朝下时需要用重新计算的新坐标 ( 1080 - y )

取色工具

这个项目挺不错,取色的工具操作不太方便,C#写了个带界面的可以自动取色生成代码。自动取选择范围的不同色,还能魔棒取色,适合像游戏那样背景变化时用。另外我结合美团的开源项目robust,实现了可以热更新,这样代码可以直接生效,项目可以加上这功能。
取色工具界面如下,希望能有用可以加入到项目
https://github.com/bigursa/comImg/blob/main/tool.gif

图片模板匹配

图片模板匹配成功概率有点低,还会造成crash,有什么好的配置阈值吗?

opencv 安装问题

能给个安装opencv的教程吗?我试了好久都安装不成功。还有再问一下,只有这个抓图工具吗?有没有别的替代抓图工具

是不是暂时不支持Android模拟器

模拟器 网易Mumu
Android: 6.0.1
ExecTypeAccessibillty 无障碍
Accessibility状态:已加载
opencv加载成功
取点成功
然后执行点击的时候 提示
image
获得无障碍权限后重启过模拟器还是一样的提权错误
是不是无障碍也只支持Android 7 或者8 以上的?
PS: Android 10 无障碍 一点启动直接死机,log停留在opencv加载成功

雷电模拟器中不定时闪退

用的雷电4.0.53或者4.0.54
逍遥的 7.6.5
都是用的XP框架,同样的脚本和游戏,逍遥模拟器不会出现闪退,雷电会不定时直接退出了,就像被杀掉了一样,起初怀疑是被游戏杀了,但后来用了多款游戏,逍遥都正常,雷电还是一样不定时就直接退了。
测试了root模式,在雷电下取的坐标和点击的坐标有转向不匹配,找了资料也没解决。逍遥下root没生效。
之前用的按键精灵在雷电下跑,多开了时间长就卡,这也是我找到这里的一个原因,现在是雷电下用RobotHelper写的脚本多开跑时间长也不卡,但就是经常不定时直接退了,很难受。换成逍遥的脚本跑再长时间也不会退,但可能和逍遥模拟器本身有关,开多了有时候会几个模拟器全不动了,或者游戏中聊天窗口打开就是输入文字的时候直接卡死。
现在是彻底没用按键精灵了,在用逍遥的。雷电中因为没有任何日志,直接就退掉了,我本身不是搞android开发的技术也有限,搞不定,希望有高手来帮着排查一下雷电中闪退的原因(有偿)

尝试使用回收的位图错误如何解决?

问题描述:在ScreenCaptureUtil.getScreenCap时,有时会抛出如下错误
2021-01-26 23:19:11.760 2294-3396/cn.xjiangwei.RobotHelper E/AndroidRuntime: FATAL EXCEPTION: Thread-12
Process: cn.xjiangwei.RobotHelper, PID: 2294
java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@f8ae68c
at android.graphics.Canvas.throwIfCannotDraw(Canvas.java:1271)
at android.graphics.Canvas.drawBitmap(Canvas.java:1368)
at android.graphics.Bitmap.createBitmap(Bitmap.java:807)
at android.graphics.Bitmap.createBitmap(Bitmap.java:701)
at android.graphics.Bitmap.createBitmap(Bitmap.java:681)
at cn.xjiangwei.RobotHelper.Tools.ScreenCaptureUtil.getScreenCap(ScreenCaptureUtil.java:49)
at cn.xjiangwei.RobotHelper.Tools.ScreenCaptureUtil.getScreenCap(ScreenCaptureUtil.java:108)
at cn.xjiangwei.RobotHelper.GamePackage.Main$9.run(Main.java:617)
at java.lang.Thread.run(Thread.java:761)

无法在逍遥模拟器Android7.1.2版本使用

目前我有写了几个脚本,在雷电模拟器可以使用,但是我在逍遥模拟器上却出现RobotHelper停止运行的情况。想麻烦作者看看问题出在哪里,能不能解决。

请问一下一些脚本的功能

1 请问这个软件是否有录制脚本的功能 就是读取玩家的触摸坐标。是用什么实现的 Instrumentation adb 还是辅助功能 请提示一下 我再去你的代码相应部分里面仔细寻找。

2 这个软件生成的apk 很大 如果多台机器安装更新一下会很吃力 有精简的版本吗。

3 让游戏无法检测是模拟器还是手机 这种可能性存在吗 业界实现了吗。

最后感谢一下作者 竟然能做出如此优秀的软件 一个人就把按键精灵一个大公司给比下去了 哈哈。还是免费的。

不同分辨率有办法点到相同的按钮么

自己测试,找不到规律。识别同一张图片。识图后的坐标,点击不到那个图片。
有的是横坐标按比例缩放的,但纵坐标不变。有个横坐标纵坐标都缩放,但和和分辨率/DPI没法做一套自适应的算法。。。不能按比例换算。

截取部分画面,会出现坐标轴偏移的问题

雷电模拟器,无障碍模式,截取屏幕,720*1280 320dpi。
截取0,0,720,1280。会包含两边的黑框。导致不是实际想截取的画面。。。
是要每个机型适配,还是有匹配的方法的?大佬

关于中断脚本的问题

目前main()里 在不停的进行点击,识图操作。
在【停止脚本】按钮加了 thread.interrupt();希望通过捕捉异常的方式停止脚本。
把脚本放在try里面。try{脚本} catch ( InterruptedException e ) {}
但基本停不下来。
我现在是在识图的方法里加了判断,然后exit。但这样直接把整个程序弄崩了。。
if(Thread.currentThread().isInterrupted()){
System.exit( 0 );
}

大佬,有没有什么好点的办法?网上查了资料,好像java里就是不太好停止一个正在运行的程序。只能一步步判断正常结束线程吗?

root模式下,点击次数的限制

不管是root模式,还是xp模式,点击的次数超过一定次数,就无效了,不知道是不是因为往shell中写数据是有限制

这个框架还可以正常运行吗?

我之前用这个框架写的脚本都是可以正常运行的,现在都不行了。重新编译也不行,界面正常打开,点击开始脚本没有任何反应,编译运行也没有报错。但没有执行Start方法,大家有没有遇到类似的情况?

可以适配安卓11吗?

我目的是将脚本软件安装在手机上,然后运行脚本,但是发现我的手机是安卓11,经过一番排查发现安卓11的文件存储发生了很大的变化,导致脚本并不能正常运行。

关于Toast函数显示时长

目前的Toast函数没办法更改显示时长,我自己有尝试重载了一个,但是还是没有显示更久,想请问怎么做?
附上代码:

//Toast.java

package cn.xjiangwei.RobotHelper.Tools;

import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Handler;
import android.os.Looper;
import android.os.Vibrator;

import cn.xjiangwei.RobotHelper.MainApplication;

import static android.content.Context.VIBRATOR_SERVICE;

public class Toast {

/**
 * Toast提示
 * @param msg
 */
public static void show(final String msg) {
    Handler handler = new Handler(Looper.getMainLooper());
    handler.post(new Runnable() {
        public void run() {
            android.widget.Toast.makeText(MainApplication.getInstance(), msg, android.widget.Toast.LENGTH_LONG).show();
        }
    });
}

/**
 * Toast提示
 * @param msg
 * @param duration
 */
public static void show(final String msg,int duration) {
    Handler handler = new Handler(Looper.getMainLooper());
    handler.post(new Runnable() {
        public void run() {
            android.widget.Toast.makeText(MainApplication.getInstance(), msg, duration).show();
        }
    });
}

/**
 * 声音提示
 */
public static void notice() {
    Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    Ringtone r = RingtoneManager.getRingtone(MainApplication.getInstance(), notification);
    r.play();
    Vibrator vibrator = (Vibrator) MainApplication.getInstance().getSystemService(VIBRATOR_SERVICE);
    vibrator.vibrate(1000);
}

}

//Main.java

package cn.xjiangwei.RobotHelper.GamePackage;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Environment;

import org.opencv.android.Utils;
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.imgproc.Imgproc;

import java.io.IOException;
import java.io.InputStream;

import cn.xjiangwei.RobotHelper.MainApplication;
import cn.xjiangwei.RobotHelper.Tools.Image;
import cn.xjiangwei.RobotHelper.Tools.MLog;
import cn.xjiangwei.RobotHelper.Tools.Point;
import cn.xjiangwei.RobotHelper.Tools.Robot;
import cn.xjiangwei.RobotHelper.Tools.ScreenCaptureUtil;
import cn.xjiangwei.RobotHelper.Tools.TessactOcr;
import cn.xjiangwei.RobotHelper.Tools.Toast;

import static android.os.SystemClock.sleep;

public class Main {
private static final String SD_PATH = Environment.getExternalStorageDirectory().getPath();

/**
 * 在这个函数里面写你的业务逻辑
 */
public void start() {
    sleep(5000); //点击开始后等待5秒后再执行,因为状态栏收起有动画时间,建议保留这行代码



    /****************************  模板匹配demo  *******************************/
    InputStream is = null;
    try {
        is = MainApplication.getInstance().getAssets().open("Chrome_Icon_bmp.bmp");
    } catch (IOException e) {
        e.printStackTrace();
    }

    Bitmap bitmap = BitmapFactory.decodeStream(is);

    Toast.show(bitmap.toString());

    //在当前屏幕中查找模板图片
    Point point = Image.matchTemplate(ScreenCaptureUtil.getScreenCap(), bitmap, 0.7);
    MLog.info("找到模板", point.toString());
    Toast.show(point.toString());


    // 点击找到的这个图
    Robot.tap(point);
    Toast.show("tap!");


    /**************************** 文字识别demo  **********************************/
    try {
        //识别素材文件中的ocrTest.png图片中的文字
        is = MainApplication.getInstance().getAssets().open("ocrTest.png");
    } catch (IOException e) {
        e.printStackTrace();
    }
    bitmap = BitmapFactory.decodeStream(is);
    String res = TessactOcr.img2string(bitmap, "chi_sim", "", "");
    MLog.info("文字识别结果:" + res);

    Toast.show(res,10000);


    /*****************************  特征点找图  ************************************/
    //当前屏幕中查找chrome图标(特征点是3120X1440分辨率手机制作)
    point = Image.findPointByMulColor(ScreenCaptureUtil.getScreenCap(), "434FD7,65|0|414DDB,90|55|46CDFF,5|86|5FA119");
    //点击chrome图标
    Robot.tap(point);



    /***** 提示  *****/
    Toast.show("运行结束!");
    //声音提示
    Toast.notice();

}

}

能告诉我你的安卓环境吗

我在android studio 4.11上 使用雷电模拟器64 运行截图失败了.我发现你的源码使用 gradle5.11.
能说说你正常运行的android studio版本和使用的什么模拟器吗  .安卓模拟器推荐用什么版本啊? 现在是安卓11.

没有可以进行荧幕缩放的函数

目前我写的脚本有需要做到荧幕的缩放,但是使用现有的函数比如down,up,moveTo来重写一个都没办法做到。因为对android及java其实不是很熟悉,所以希望作者可以写一下实现的方法,谢谢。

交流

大神,建个交流群呗

我有个小问题

这个要怎么使用呀,能不能来个说明
我跑起来 提示我xp框架加载失败
里面有个OcrServer 和python要怎么使用?
求大佬解惑

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.