免root蚂蚁森林自动收能量,可自动解锁和自动触发

欢迎大家使用体验、提交错误,后面将逐步完善;

目前支持收好友能量和收自己能量

(看起来复杂,其实只是讲的比较详细)


私信小编获取github

目前只能收自己的,收好友能量的功能还在开发中...

0、效果演示:

​1、脚本实现功能

启动后,脚本处于监听状态,注意开启保护,不要被后台关闭了。一般能量每天都是同一个时间点成熟,成熟后会通知栏发出通知(下面有说怎么在蚂蚁森林里开启通知),脚本监听到该通知后,就会自动触发启动,点亮屏幕,解锁,进入蚂蚁森林。这时候,就需要用到你设置的时间了。因为是提前一分钟进入,所以能量还没成熟,但脚本会一直戳屏,直到到你设置的结束时间。所以输入时间并启动后,虽然没有任何动静,但只要不报错,一般就可以了;

2、下载源码安装autojs.apk

源码在文章底部


2.5 、解压小手图片并放到自己能记住的路径下

等会要填到程序里的findImg()!!




3、解压并导入到app

解压源码后,放到手机存储下的“脚本”目录;也可以是其他的,记得就行

打开autojs app,点击导入

​4、打开蚂蚁森林能量提醒功能

进入蚂蚁森林,点右上角“...”,进入设置,开启提醒


​5、打开无障碍服务、通知权限

​点击后如有跳转,就对应的完成设置

6、将autojs加入电池白名单、保护锁定,防止被后台关闭(这个大家都会的吧)

7、初次使用,程序中main()中的gesture()函数,是解锁功能,需要修改成自己的锁屏手势。

如果不改呢,就只是不能解锁而已,其他没影响

​可通过打开开发者选项中的指针位置查看坐标。

​8、运行脚本即可

9、由于是通过蚂蚁森林通知触发,所以输入时间并启动后,虽然没有任何动静,但只要不报错,一般就可以了;

输入时间处,点“确定”按钮左边的横线位置,就会弹出键盘。
如果想立即看到效果,可以在这里添加RunApp();后再运行:

​10、如果想测试解锁,在这里加条语句

sleep(2000);

main();

​然后按照点击运行、输入时间、锁屏,静待手机自动解锁

11、报错情况

  • 可能是通知栏权限没开
  • 可能是无障碍服务没开

​欢迎评论留言


源码


var MODE=0;


function CloseApp() {
    let packageName = currentPackage();
    app.openAppSetting(packageName);
    text(app.getAppName(packageName)).waitFor();  
    let is_sure = textMatches(/(.*强.*|.*停.*|.*结.*|.*行.*)/).findOne();
    if (is_sure.enabled()) {
        textMatches(/(.*强.*|.*停.*|.*结.*|.*行.*)/).findOne().click();
        textMatches(/(.*确.*|.*定.*)/).findOne().click();
        log(app.getAppName(packageName) + "应用已被关闭");
        sleep(1000);
        back();
    } else {
        log(app.getAppName(packageName) + "应用不能被正常关闭或不在后台运行");
        back();
    }
}

function EnterApp()
{
    toast("启动支付宝")
    app.launchApp("支付宝");
    //text("蚂蚁森林").waitFor();
    toast("启动完成");
    sleep(1000);
    
    className("android.widget.TextView").text("付钱").waitFor();
    //bounds(33,103,843,180).click();
    className("android.widget.ViewFlipper").click();
    sleep(1000);
    className("android.widget.TextView").desc("搜索").waitFor();
    //bounds(231,76,905,207).setText("蚂蚁森林");
    className("android.widget.EditText").setText("蚂蚁森林");
    sleep(500);
    className("android.widget.FrameLayout").desc("搜索").click();
    className("android.widget.TextView").text("蚂蚁森林,为你在荒漠种下一棵真树").waitFor();
    sleep(500);
    //bounds(44,757,291,996).click();
    className("android.widget.FrameLayout").clickable(true).depth(13).indexInParent(0).drawingOrder(1).click();
    toast("进入森林中...");
    var cnt = 0;
    while(cnt++<5)
    {
        sleep(500);
        if(className("android.view.View").text("社区生活 - 生活号").exists())
        {
            back();
            break;
        }
    }
    className("android.widget.Button").text("背包").waitFor();
    toast("进入完成");
}

function RunApp(){
    EnterApp();
      while(true){
        var dates = new Date();
        if(dates.getHours() == startTime[0] && dates.getMinutes() - startTime[1] >=0 && dates.getMinutes() - startTime[1] < 2)
        {
            MyPower();
        }
        else if(dates.getHours() == endTime[0] && dates.getMinutes() == endTime[1])
        {
            toast("结束");
            //exit();
            break;
        }
        else
        {
            toast("未到时间");
            sleep(5000);
        }
    }
}

function MyPower(){
    do {
        var powerList = className("android.widget.Button").textStartsWith("收集能量").find();
            powerList.forEach(function(item){
            press(item.bounds().centerX(), item.bounds().centerY(), 80);
            //item.click();
            toast("收取一次");
            sleep(200);
            });
    } while (powerList.length);
    toast("未成熟");
    sleep(500);
}


function findImg()
{
    //toast("截图中...");
    var img = captureScreen();
    while(!img)
    {
        sleep(100);
        img = captureScreen();
    }
    toast("截图完成!");
    var icon = images.read("/storage/emulated/0/脚本/icon.jpg");
    var p = findImage(img, icon);
    if(p){
        toast("找到啦:" + p);
    }else{
        toast("没找到");
    }
    return p;
}


function FriendPower(){
    EnterApp();
    className("android.view.View").text("查看更多好友").findOne().click();
    
    if(MODE==1)
    {
        className("android.view.View").text("周排行榜").waitFor();
        sleep(1000);
        var cnt = 0;
        while(!className("android.view.View").text("邀请").exists() && cnt<30)
        {
            className("android.webkit.WebView").scrollDown();
            toast("down");
            sleep(500);
            cnt ++;
        } 
        lists=className("android.view.View").depth(14).find();
        if(lists.empty())
            console.log("empty");
        var index = 0;
        toast(lists.length);
        lists.forEach(function(item){
            if(index++>=2)
            {
                item.click();
                var cnt = 0;
                while(cnt<5)
                {
                    if(className("android.widget.Button").text("浇水").exists())
                    {
                        sleep(1000);
                        MyPower();
                        back();
                        sleep(1000);
                        break;
                    }
                    cnt ++;
                    if(cnt>=5) toast("跳过");
                    sleep(500);
                }
               sleep(1000);
            }
        });
    }
    else if(MODE==4)
    {
        sleep(1000);
        toast("模式4");
        while(true)
        {
            var p = findImg();
            if(p)
            {
                toast("找到");
                click(p.x-500, p.y+50);
                var cnt = 0;
                while(cnt<5)
                {
                    if(className("android.widget.Button").text("浇水").exists())
                    {
                        MyPower();
                        back();
                        sleep(1000);
                        break;
                    }
                    else
                    {
                        cnt ++;
                        sleep(500);
                    }
                }
             }
            else
            {
                toast("上滑");
                swipe(500,1800,500,500,500);
            }
            sleep(500);
        }
    }
}

function main(){
  device.wakeUp();
  sleep(1000);
  swipe(500,1800,500,500,100);
  sleep(1000);
  gesture(1000, [540,1425], [250,1700],[560,1700],[540,2020],[840,1700]);
  sleep(1000);
  RunApp();
  if(MODE==2)
      FriendPower();
  exit();
}

function selectMode(){
    var options = ["定时收自己", "马上收好友能量", "定时收自己再收好友", "马上收自己(注意时间就得填现在)","马上收好友(若卡在收好友界面不动,请选这个)"]
    var i = dialogs.select("请选择一个选项(默认第一项)", options);
    if(i >= 0){
        toast("您选择的是" + options[i]);
        MODE = i;
    }else{
        toast("您取消了选择");
        MODE = 0;
    }
}



//程序从这里开始
auto();
alert("使用须知", "需开启无障碍服务、通知栏权限,音量下键可中止脚本;本程序监听状态栏自动启动,支持自动亮屏解锁,并在指定时间内检查能量。");
alert("注意", "初次使用,程序中main()中的gesture()函数,是解锁功能,需要修改成自己的锁屏手势。可通过打开开发者选项中的指针位置查看坐标。");
//setScreenMetrics(1080, 2340);
if(!requestScreenCapture()){
    toast("请求截图失败");
    exit();
}

selectMode();
sleep(500);
if(MODE==1 || MODE==4)
{
    alert("注意!请核对'小手'图片存放位置,可在findImg()函数中修改,默认放在: /storage/emulated/0/脚本/icon.jpg");
    FriendPower();
    exit();
}

console.show();
var startTime = console.rawInput("请输入能量开始查询时间,如7.23:").split(".");
var endTime = console.rawInput("请输入能量结束查询时间,如7.25:").split(".");
console.log(">> 开始时间: "+startTime);
console.log(">> 结束时间: "+endTime);
sleep(1000);
console.hide();

toast("开始");
if(MODE==3)
{
    RunApp();
    exit();
}
events.observeNotification();
events.on("notification", function(n){
    log("收到新通知:\n 标题: %s, 内容: %s, \n包名: %s", n.getTitle(), n.getText(), n.getPackageName());
    if(n.getPackageName()=="com.eg.android.AlipayGphone")
    {
      if(n.getTitle()=="你的能量快成熟了")
        main();
    }
});


threads.start(function(){
    //在子线程中调用observeKey()从而使按键事件处理在子线程执行
    events.observeKey();
    events.on("key_down", function(keyCode, events){
        //音量键关闭脚本
        if(keyCode == keys.volume_down){
           // exit();
        }
    });
});
events.on("exit", function(){
    toast("脚本已结束");
});

});
举报
评论 0