Class: AdbExtended::Adb

Inherits:
Object
  • Object
show all
Defined in:
lib/adb_extended/adb.rb

Class Method Summary collapse

Class Method Details

.battery(serial) ⇒ Object



30
31
32
33
34
# File 'lib/adb_extended/adb.rb', line 30

def self.battery(serial)
  stats = dumpsys(serial, "battery")

  return stats.select { |s| s.include?("level") }[0]
end

.devicesObject



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/adb_extended/adb.rb', line 9

def self.devices
  stdout, stderr, status = Open3.capture3("adb devices -l")
  device_ids = stdout.lines[0...-1]
  return device_ids.drop(1).map{ |device|
    split = device.gsub(/\s+/m, ' ').strip.split(" ")
    {
        :serial => split[0],
        :type => split[1],
        :usb => split[2].gsub('usb:', ''),
        :product => split[3].gsub('product:', ''),
        :model => split[4].gsub('model:', ''),
        :transport_id => split[5].gsub('transport_id:', '')
    }
  }
end

.dumpsys(serial, stat = nil) ⇒ Object



25
26
27
28
# File 'lib/adb_extended/adb.rb', line 25

def self.dumpsys(serial, stat = nil)
  stdout, stderr, status = Open3.capture3("adb -s #{serial} shell dumpsys #{stat}")
  return stdout.lines
end

.enter_text(text, submit = false, serial = nil) ⇒ Object



84
85
86
87
88
89
90
91
92
93
94
# File 'lib/adb_extended/adb.rb', line 84

def self.enter_text(text, submit = false, serial = nil)
  key_event = submit ? 66 : 61
  if serial != nil
    stdout, stderr, status = Open3.capture3("adb -s #{serial} shell input tap 0 500 && adb -s #{serial} shell input text #{text} && adb -s #{serial} shell input keyevent #{key_event}")
  else
    devices.each { |device|
    stdout, stderr, status = Open3.capture3("adb -s #{device[:serial]} shell input tap 0 500 && adb -s #{device[:serial]} shell input text #{text} && adb -s #{device[:serial]} shell input keyevent #{key_event}")
    }
  end
  sleep 0.1
end

.install(path, serial = nil) ⇒ Object



62
63
64
65
66
67
68
69
70
71
# File 'lib/adb_extended/adb.rb', line 62

def self.install(path, serial = nil)
  if serial != nil
    exec "adb -s #{serial} install -r #{path}"
  else
    devices.each { |device|
      puts "Installing on #{device[:model]}"
      exec "adb -s #{device[:serial]} install -r #{path}"
    }
  end
end

.logcat(serial, level = "D", package) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/adb_extended/adb.rb', line 44

def self.logcat(serial, level = "D", package)

  stdout, stderr, status = Open3.capture3("adb -s #{serial} shell ps")

  filter = nil

  if package != nil
    package_info = stdout.lines.select { |line| line.include?("#{package}") }
    if package_info.size == 0
      puts 'Application not running'
      exit 1
    end
    columns = package_info[0].gsub(/\s+/m, ' ').strip.split(" ")
    filter = "| grep -F #{columns[1]}"
  end
  exec "adb -s #{serial} logcat *:#{level} #{filter}"
end

.pidcat(serial, level = "d", package = nil) ⇒ Object



40
41
42
# File 'lib/adb_extended/adb.rb', line 40

def self.pidcat(serial, level = "d", package = nil)
  exec "pidcat -s #{serial} -l #{level} #{package}"
end

.screenshot(serial = nil) ⇒ Object



96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/adb_extended/adb.rb', line 96

def self.screenshot(serial = nil)
  t = Time.now
  timestamp = t.strftime("%Y%m%d-%H%M%S")
  if serial != nil
    exec "adb -s #{serial} shell /system/bin/screencap /sdcard/screen.png && adb -s #{serial} pull /sdcard/screen.png screen-#{timestamp}.png && adb -s #{serial} shell rm /sdcard/screen.png"
  else
    devices.each { |device|
      puts "Taking screenshot on #{device[:model]}"
      stdout, stderr, status = Open3.capture3("adb -s #{device[:serial]} shell /system/bin/screencap /sdcard/screen.png && adb -s #{device[:serial]} pull /sdcard/screen.png screen-#{timestamp}-#{device[:model]}.png && adb -s #{device[:serial]} shell rm /sdcard/screen.png")
      puts stdout
    }
  end
end

.shell(serial) ⇒ Object



36
37
38
# File 'lib/adb_extended/adb.rb', line 36

def self.shell(serial)
  exec "adb -s #{serial} shell"
end

.uninstall(package, serial = nil) ⇒ Object



73
74
75
76
77
78
79
80
81
82
# File 'lib/adb_extended/adb.rb', line 73

def self.uninstall(package, serial = nil)
  if serial != nil
    exec "adb -s #{serial} uninstall #{package}"
  else
    devices.each { |device|
      puts "Uninstalling from #{device[:model]}"
      exec "adb -s #{device[:serial]} uninstall #{package}"
    }
  end
end