class AdbExtended::Adb

Public Class Methods

battery(serial) click to toggle source
# 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
devices() click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# File lib/adb_extended/adb.rb, line 36
def self.shell(serial)
  exec "adb -s #{serial} shell"
end
uninstall(package, serial = nil) click to toggle source
# 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