Skip to content

Latest commit

 

History

History
117 lines (84 loc) · 2.35 KB

README.md

File metadata and controls

117 lines (84 loc) · 2.35 KB

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