emu_ctl 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 70b6267618c425101056703bb2c0a0f1b9853ee5
4
- data.tar.gz: afbe4dab8a920e3eae6c07c46ee5c04a7c2c6333
3
+ metadata.gz: b59cd6a2d27d2888a8ed1fc00997ebda567301d8
4
+ data.tar.gz: 24e5c4b60bdffff52828952ee7151c445e118a9e
5
5
  SHA512:
6
- metadata.gz: 05bc213291c3c847fa10d36f67c00bc921720c3f7e98f813f51231d613e9f95e2815416d732ebf6143e20dd93c88abd65aec80d317f0bf3b74ffd79f951ac864
7
- data.tar.gz: 14f903eafb516e901e18d2fac8611673cb188ad0e654635047fc9fbaf51d9024c27789de1859d80c0b156fc795372470e6868bc886aa16868bc0e2404f9a92af
6
+ metadata.gz: 6ebf8e2a355c0f1528e062456aee7c79dc5684e700d3ee559bb2813a4a8abee08383ecc8be6c09b5164dda589ee3577d2f05420ce7b29170c96ff0bbcda42e75
7
+ data.tar.gz: 98f73d1cdab2b88533bbce99bdbda05b456928540ce16abe7020378e2cb59d6957599e1d38b12e6562410e3c9455f38636cc2a2b49712821f2b0c1e671cdf994
data/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  Commandline util to maintain android emulators on headless machines (or just without window in gerneral).
4
4
 
5
+ [![Gem Version](https://badge.fury.io/rb/emu_ctl.svg)](http://badge.fury.io/rb/emu_ctl)
6
+
5
7
  # NOT READY FOR PRODUCTION
6
8
 
7
9
  ## WHY?
data/bin/emu_ctl CHANGED
@@ -13,55 +13,67 @@ usage = "
13
13
  Usage:
14
14
  #{File.basename($0)} list prints all available emulators
15
15
  #{File.basename($0)} running shows all running emulators
16
- #{File.basename($0)} kill kills all running emulators
16
+ #{File.basename($0)} kill (ID|all) kills the emulator with ID (see `running`) or all runnig emulators
17
17
  #{File.basename($0)} launch ID runs the emulator with ID,
18
18
  ID is an integer form the output of `list`
19
19
  #{File.basename($0)} targets shows all possible targets and skins, will only display targets with abi
20
20
  #{File.basename($0)} new ID SKIN creates a new avd with API level according to ID and skin SKIN
21
21
  check `targets` for possible values (depends on installed sdk packages)
22
22
  Only works for targets with default abi
23
- #{File.basename($0)} rm ID deletes avd with ID returned in list"
23
+ #{File.basename($0)} rm ID deletes avd with ID returned in list
24
+ #{File.basename($0)} force-kill sends `kill -9` to all running emulator processes, BE CAREFUL"
24
25
 
25
26
  # command line args
26
27
  if ARGV.empty?
27
28
  puts "You need to specify an action"
28
29
  puts "#{usage}"
29
- exit(2)
30
+ exit 2
30
31
  end
31
32
 
32
33
  action = ARGV.shift
33
34
  case action
34
35
  when 'kill'
35
- pids = EmuCtl::Emulator.running_pids
36
+ arg = ARGV.shift
37
+ raise 'you need to specify which emulator to kill' if arg.nil?
38
+ running = emus = EmuCtl::ADB.devices
39
+ targets = arg == 'all' ? running : [ running[arg.to_i] ]
40
+ puts "trying to kill emulators: \n\t#{targets.join('\n\t')}"
41
+ targets.each{ |t| EmuCtl::ADB.kill_emu(t.qualifier)}
42
+ puts "done killing"
43
+ when 'force-kill'
44
+ warn "dont' use `force-kill` if you don't have to, it might coase android to leave some trash in /tmp/android-[user]/"
45
+ pids = EmuCtl::Ctl.running_pids
36
46
  puts "found running emulators with pid: #{pids}"
37
- EmuCtl::Emulator.kill_all
47
+ EmuCtl::Ctl.kill_pids(pids)
38
48
  puts "killed all emulators"
39
49
  when 'list'
40
- emus = EmuCtl::Emulator.list
41
- puts emus.map{ |o| "#{emus.index(o)} - #{o.to_s}" }.join("\n")
50
+ avds = EmuCtl::Ctl.list
51
+ puts avds.map{ |o| "#{avds.index(o)} - #{o.to_s}" }.join("\n")
42
52
  when 'launch'
43
53
  raise "you need to specify the emulator id\n#{usage}" if ARGV.empty?
44
54
  index = ARGV.shift.to_i
45
- emu = EmuCtl::Emulator.list[index]
46
- EmuCtl::Emulator.start(emu)
55
+ avd = EmuCtl::Ctl.list[index]
56
+ EmuCtl::Ctl.start(avd)
47
57
  when 'targets'
48
- targets = EmuCtl::Emulator.list_targets
58
+ targets = EmuCtl::Ctl.list_targets
49
59
  puts targets.map{ |o| "#{targets.index(o)} - #{o.to_s}" }.join("\n")
50
60
  when 'new'
51
61
  target_index = ARGV.shift.to_i
52
62
  skin = ARGV.shift
53
63
  raise "you need to specify target and skin" if target_index.nil? || skin.nil?
54
- target = EmuCtl::Emulator.list_targets[target_index]
64
+ target = EmuCtl::Ctl.list_targets[target_index]
55
65
  puts "creating new avd from #{target.id} with skin #{skin}"
56
- EmuCtl::Emulator.create(target, skin)
66
+ EmuCtl::Ctl.create(target, skin)
57
67
  when 'running'
58
- puts EmuCtl::ADB.devices
68
+ emus = EmuCtl::ADB.devices
69
+ puts emus.map{ |o| "#{emus.index(o)} - #{o.to_s}" }.join("\n")
59
70
  when 'rm'
60
71
  emu_index = ARGV.shift
61
72
  raise 'you need to specify the emulator id' if emu_index.nil?
62
- emu = EmuCtl::Emulator.list[Integer(emu_index)]
63
- puts "deleting: #{emu}"
64
- EmuCtl::Emulator.delete(emu)
73
+ avd = EmuCtl::Ctl.list[Integer(emu_index)]
74
+ puts "deleting: #{avd}"
75
+ EmuCtl::Ctl.delete(avd)
65
76
  else
66
- raise "unknown action #{action}\n#{usage}"
77
+ puts "unknown action #{action}\n#{usage}"
67
78
  end
79
+ exit 0
data/emu_ctl.gemspec CHANGED
@@ -4,13 +4,14 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require "emu_ctl/version"
5
5
 
6
6
  Gem::Specification.new do |s|
7
- s.name = "emu_ctl"
8
- s.version = EmuCtl::VERSION
9
- s.platform = Gem::Platform::RUBY
10
- s.authors = ["Nemo Oudeis"]
11
- s.email = ["nemo@oudeis.eu"]
12
- s.homepage = "https://github.com/NemoOudeis/EmulatorControl"
13
- s.summary = %q{command line tool to easily control android emulators}
7
+ s.name = "emu_ctl"
8
+ s.version = EmuCtl::VERSION
9
+ s.platform = Gem::Platform::RUBY
10
+ s.authors = ["Nemo Oudeis"]
11
+ s.email = ["nemo@oudeis.eu"]
12
+ s.homepage = "https://github.com/NemoOudeis/EmulatorControl"
13
+ s.summary = %q{command line tool to easily control android emulators}
14
+ s.license = 'MIT'
14
15
 
15
16
  s.files = `git ls-files`.split("\n")
16
17
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
data/lib/emu_ctl.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
  require 'emu_ctl/adb'
3
- require 'emu_ctl/emulator'
3
+ require 'emu_ctl/ctl'
4
4
  require 'emu_ctl/model'
5
5
  require 'open3'
data/lib/emu_ctl/adb.rb CHANGED
@@ -1,20 +1,44 @@
1
1
  module EmuCtl
2
2
  class ADB
3
+ def self.cli_opt(emu_qual)
4
+ "#{"-s #{emu_qual}" unless emu_qual.nil?}"
5
+ end
6
+
3
7
  def self.devices
4
- _, stdout, _ = Open3.popen3('adb devices')
8
+ _, stdout, _ = Open3.popen3('adb devices -l')
5
9
  lines = []
6
- stdout.each_line { |l| lines.push(l) }
7
- lines.join
10
+ stdout.each_line { |l| lines.push(l) if l.include?('emulator') }
11
+ lines.map{ |em| /(emulator-\d+)/.match(em)[1] }.map{ |qual| emu_info(qual) }
12
+ end
13
+
14
+ def self.emu_info(emu_qual=nil)
15
+ _, stdout, _ = Open3.popen3("adb #{cli_opt(emu_qual)} shell getprop")
16
+ pattern = /\[.+\]: \[(.+)\]/
17
+ api_lvl, os_version, sdk = nil, nil, nil
18
+ stdout.each_line do |l|
19
+ api_lvl = pattern.match(l)[1] if l.include?('ro.build.version.sdk')
20
+ os_version = pattern.match(l)[1] if l.include?('ro.build.version.release')
21
+ sdk = pattern.match(l)[1] if l.include?('ro.product.name')
22
+ end
23
+ return Emulator.new(emu_qual, api_lvl, os_version, sdk)
8
24
  end
9
25
 
10
- def self.boot_complete?
11
- _, stdout, stderr = Open3.popen3('adb shell getprop dev.bootcomplete')
26
+ def self.boot_complete?(emu_qual=nil)
27
+ cmd = "adb #{cli_opt(emu_qual)} shell getprop dev.bootcomplete"
28
+ _, stdout, stderr = Open3.popen3(cmd)
12
29
  return stderr.gets.nil?
13
30
  end
14
31
 
15
- def self.unlock_emulator
16
- system 'adb shell input keyevent 82'
17
- system 'adb shell input keyevent 4'
32
+ def self.unlock_emulator(emu_qual=nil)
33
+ tag = cli_opt(emu_qual)
34
+ system "adb #{tag} shell input keyevent 82"
35
+ system "adb #{tag} shell input keyevent 4"
36
+ end
37
+
38
+ def self.kill_emu(emu_qual)
39
+ cmd = "adb #{cli_opt(emu_qual)} emu kill"
40
+ puts cmd
41
+ Open3.popen3(cmd)
18
42
  end
19
43
  end
20
44
  end
@@ -1,15 +1,17 @@
1
1
  module EmuCtl
2
- class Emulator
2
+ class Ctl
3
3
  @@EMU_TIMEOUT = 180
4
4
 
5
5
  def self.start(emu)
6
6
  raise 'invalid name: nil' if emu.name.nil?
7
7
  puts "starting emulator: #{emu}"
8
- puts "emulator -no-boot-anim -avd #{emu.name} -no-snapshot-load -no-snapshot-save -no-window"
9
- system "emulator -no-boot-anim -avd #{emu.name} -no-snapshot-load -no-snapshot-save -no-window &"
8
+ cmd = "emulator -no-boot-anim -avd #{emu.name} -no-snapshot-load -no-snapshot-save -no-audio -no-window -verbose &"
9
+ puts "#{cmd}"
10
+ system "#{cmd}"
10
11
  starting_up = true
11
12
 
12
13
  start = Time.now
14
+
13
15
  until ADB.boot_complete?
14
16
  sleep 2
15
17
  ellapsed = Time.now - start
@@ -55,14 +57,16 @@ module EmuCtl
55
57
  end
56
58
 
57
59
  def self.running_pids
60
+ warn 'deprecated: controlling emulators via pids is a bad idea'
58
61
  _, stdout, _ = Open3.popen3("pgrep 'emulator'")
59
62
  pids = []
60
63
  stdout.each_line { |l| pids.push(l.strip) }
61
64
  pids
62
65
  end
63
66
 
64
- def self.kill_all
65
- Emulator.running_pids.each { |pid| system "kill -9 #{pid}" }
67
+ def self.kill_pids(pids)
68
+ warn 'deprecated: controlling emulators via pids is a bad idea'
69
+ pids.each { |pid| system "kill -9 #{pid}" }
66
70
  end
67
71
  end
68
72
  end
data/lib/emu_ctl/model.rb CHANGED
@@ -38,4 +38,20 @@ module EmuCtl
38
38
  "#{@name}"
39
39
  end
40
40
  end
41
+
42
+ class Emulator
43
+ attr_accessor(:qualifier, :api_lvl, :os_name, :sdk)
44
+
45
+ def initialize(qual, api_lvl, os_name, sdk)
46
+ @qualifier = qual
47
+ @api_lvl = api_lvl
48
+ @os_name = os_name
49
+ @sdk = sdk
50
+ end
51
+
52
+ def to_s
53
+ "#{qualifier}: Running #{os_name} on API Level #{api_lvl} with sdk #{sdk}"
54
+ end
55
+
56
+ end
41
57
  end
@@ -1,3 +1,3 @@
1
1
  module EmuCtl
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -1,37 +1,37 @@
1
1
  require "emu_ctl"
2
2
 
3
- RSpec.describe EmuCtl::Emulator do
3
+ RSpec.describe EmuCtl::Ctl do
4
4
  describe 'lists' do
5
5
  it 'looks up existings avds' do
6
- expect(EmuCtl::Emulator.list).to_not be_nil
6
+ expect(EmuCtl::Ctl.list).to_not be_nil
7
7
  end
8
8
 
9
9
  it 'looks up available targets' do
10
- expect(EmuCtl::Emulator.list_targets).to_not be_nil
10
+ expect(EmuCtl::Ctl.list_targets).to_not be_nil
11
11
  end
12
12
  end
13
13
 
14
14
  describe 'emulator creation and deletion' do
15
15
  it 'creates new emulator' do
16
- old_list = EmuCtl::Emulator.list
16
+ old_list = EmuCtl::Ctl.list
17
17
  # only targets with default abi
18
- target = EmuCtl::Emulator.list_targets.select{|t| t.abi.include?('default')}.last
18
+ target = EmuCtl::Ctl.list_targets.select{|t| t.abi.include?('default')}.last
19
19
  puts "creating emulator for target #{target.name} and skin #{target.skins[0]}"
20
20
 
21
- EmuCtl::Emulator.create(target, target.skins[0])
22
- expect(EmuCtl::Emulator.list.count).to eq(old_list.count + 1)
21
+ EmuCtl::Ctl.create(target, target.skins[0])
22
+ expect(EmuCtl::Ctl.list.count).to eq(old_list.count + 1)
23
23
  end
24
24
 
25
25
  it 'deletes emulators' do
26
- old_list = EmuCtl::Emulator.list
26
+ old_list = EmuCtl::Ctl.list
27
27
  emu = old_list.last
28
28
  puts "deleting emulator #{emu}"
29
- EmuCtl::Emulator.delete(emu)
30
- expect(EmuCtl::Emulator.list.count).to eq(old_list.count - 1)
29
+ EmuCtl::Ctl.delete(emu)
30
+ expect(EmuCtl::Ctl.list.count).to eq(old_list.count - 1)
31
31
  end
32
32
 
33
33
  it 'looks up available targets' do
34
- expect(EmuCtl::Emulator.list_targets).to_not be_nil
34
+ expect(EmuCtl::Ctl.list_targets).to_not be_nil
35
35
  end
36
36
  end
37
37
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: emu_ctl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nemo Oudeis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-18 00:00:00.000000000 Z
11
+ date: 2015-04-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -86,7 +86,7 @@ files:
86
86
  - emu_ctl.gemspec
87
87
  - lib/emu_ctl.rb
88
88
  - lib/emu_ctl/adb.rb
89
- - lib/emu_ctl/emulator.rb
89
+ - lib/emu_ctl/ctl.rb
90
90
  - lib/emu_ctl/model.rb
91
91
  - lib/emu_ctl/version.rb
92
92
  - spec/adb_spec.rb
@@ -94,7 +94,8 @@ files:
94
94
  - spec/model_spec.rb
95
95
  - spec/spec_helper.rb
96
96
  homepage: https://github.com/NemoOudeis/EmulatorControl
97
- licenses: []
97
+ licenses:
98
+ - MIT
98
99
  metadata: {}
99
100
  post_install_message: |2+
100
101