Skip to content

cs8425/go-adbbot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

adbbot

Package adbbot provides basic functions for Android app automate. This package is based on the standard Go package and Android Debug Bridge (adb) execute file.

Code example

package main

import (
	"flag"
	"log"
	"runtime"
	"time"

	"./adbbot"
)

var (
	verbosity = flag.Int("v", 2, "verbosity")
	ADB       = flag.String("adb", "adb", "adb exec path")
	DEV       = flag.String("dev", "", "select device")

	OnDevice = flag.Bool("od", true, "run on device")

	APP  = flag.String("app", "com.android.vending", "app package name")
	TMPL = flag.String("tmpl", "tmpl.png", "template image")
)

func main() {

	log.SetFlags(log.Ldate | log.Ltime)
	flag.Parse()
	runtime.GOMAXPROCS(runtime.NumCPU())

	adbbot.Verbosity = *verbosity
	bot := adbbot.NewLocalBot(*DEV, *ADB)

	// run on android by adb user(shell)
	bot.IsOnDevice = *OnDevice

	Vlogln(2, "[adb]", "wait-for-device")
	_, err := bot.Adb("wait-for-device")
	if err != nil {
		Vlogln(1, "adb err", err)
	}

	// press Home key
	bot.KeyHome()

	// start APP
	bot.StartApp(*APP)

	// wait
	time.Sleep(time.Millisecond * 10000)

	// create matching region between Point <100,635> and <9999,9999>
	// reg := bot.NewRectAbs(100, 635, 9999, 9999)

	// or All the screen (slow)
	reg := bot.NewRectAll()

	// create matching template
	tmpl, err := bot.NewTmpl(*TMPL, reg)
	if err != nil {
		Vlogln(2, "load template image err", err)
	} else {

		// try to find target
		// 10 times with 1000ms delay between each search
		x, y, val := bot.FindExistReg(tmpl, 10, 1000)
		if x == -1 && y == -1 {
			Vlogln(2, "template not found", x, y, val)
		} else {
			Vlogln(2, "template found at", x, y, val)
		}

	}

	infoname := time.Now().Format("20060102_150405")
	err = bot.SaveScreen(infoname + ".png")
	if err != nil {
		Vlogln(2, "SaveScreen err", err)
	} else {
		Vlogln(2, "SaveScreen as file ", infoname+".png")
	}

	// force-stop APP
	bot.KillApp(*APP)

}

func Vlogln(level int, v ...interface{}) {
	if level <= *verbosity {
		log.Println(v...)
	}
}

TODO

  • more and faster block-matching algorithm
    • Full Search
    • Three Step Search
    • New Three Step Search
    • Four Step Search
    • Diamond Search
  • auto resize/scale template image to fit in device resolution

Thanks to:

Imaging : Image Load/Save and parallel process function are modify from here

Releases

No releases published

Packages

No packages published

Languages