mobo 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 769b5307fcef24c8fd89ae3812977029429d9aa3
4
- data.tar.gz: 03bb960b0e2aa5bec20a8d9605d0dece15504896
3
+ metadata.gz: 8f77e20cff1a1e98f80bf8f37403cea15cffcbc5
4
+ data.tar.gz: b25b6714a1b911f45d20461c8472777fa34d5b8e
5
5
  SHA512:
6
- metadata.gz: 17af1fe2a87d0929d89cdc1d4b8762939a32300845fb0099279d7d638fd4047f3b9cbf2e8c1e11a11f240a67b02e08dd042f110dda9aa8a524b45f1c14ca4348
7
- data.tar.gz: 7e8831e69051b35a96797f5b31817a35ddc3eea5358cca8ac10e3afd7e2cd7deb4c20c2ef0dcf2d95ed785e0efaf05158ba4a532d69ba4859f8e7817dfdd4db2
6
+ metadata.gz: d55e7bf129fbec48f552aa2613072b9e49db8de1ad4defa88747914cd4d0b37499dfb3c20bb3b1ce84cda0bcc4957d6b4453ebc7d213c9986243be753aa9cef2
7
+ data.tar.gz: b1ee9d312f2b2b32247c3cbd27228a379e7156d3bb3e5ecbed1eaad10c90a879444a2267de3dbbafc97f342c6d7d87a460390c41bc17611936a669ebf064c4f0
data/lib/mobo/android.rb CHANGED
@@ -4,33 +4,49 @@ module Mobo
4
4
 
5
5
  class << self
6
6
  def exists?
7
- add_to_path
8
- Mobo.cmd("which android")
7
+ if Mobo.cmd("which android")
8
+ return true
9
+ # if exists? isn't true straight away, check if ANDROID_HOME is set, and try and
10
+ # fix the issue
11
+ elsif ENV['ANDROID_HOME'] and File.exists?(ENV['ANDROID_HOME'] + '/tools/android')
12
+ add_to_path(ENV['ANDROID_HOME'])
13
+ Mobo.cmd("which android")
14
+ end
9
15
  end
10
16
 
11
17
  def install
12
- Mobo.cmd("curl -O http://dl.google.com/android/android-sdk_r24.3.4-linux.tgz")
13
- Mobo.cmd("sudo tar -xf android-sdk_r24.3.4-linux.tgz -C /usr/local/")
14
- Mobo.cmd("sudo chown -R $(whoami) /usr/local/android-sdk-linux")
15
- add_to_path
18
+ if SystemCheck.ubuntu?
19
+ Mobo.cmd("curl -O http://dl.google.com/android/android-sdk_r24.3.4-linux.tgz")
20
+ Mobo.cmd("sudo tar -xf android-sdk_r24.3.4-linux.tgz -C /usr/local/")
21
+ Mobo.cmd("sudo chown -R $(whoami) /usr/local/android-sdk-linux")
22
+ add_to_path("/usr/local/android-sdk-linux")
23
+ elsif SystemCheck.osx?
24
+ Mobo.cmd("curl -O http://dl.google.com/android/android-sdk_r24.3.4-macosx.zip")
25
+ Mobo.cmd("sudo unzip android-sdk_r24.3.4-macosx.zip -d /usr/local/")
26
+ Mobo.cmd("sudo chown -R $(whoami) /usr/local/android-sdk-macosx")
27
+ add_to_path("/usr/local/android-sdk-macosx")
28
+ else
29
+ Mobo.log.error("Platform not yet supported! Please raise a request with the project to support it.")
30
+ end
16
31
  end
17
32
 
18
33
  # setting env variables in the bash profile and trying to reload them isn't easy,
19
34
  # as the variables are only set in the sub process the bash_profile is executed in
20
35
  # so we can set env variables, which take effect here, and also set them in bash_profile
21
36
  # for the user to use later on
22
- def add_to_path
23
- android_home = "/usr/local/android-sdk-linux"
24
-
25
- if !ENV['PATH'].match(/#{android_home}/)
37
+ def add_to_path(android_home)
38
+ android_tools = android_home + '/tools'
39
+ unless ENV['PATH'].match(/#{android_home}/)
26
40
  ENV['ANDROID_HOME'] = android_home
27
- ENV['PATH'] += ":#{ENV['ANDROID_HOME']}/tools"
28
- Mobo.cmd("echo \"export ANDROID_HOME=#{ENV['ANDROID_HOME']}\" >> ~/.bash_profile")
29
- Mobo.cmd("echo \"export PATH=#{ENV['PATH']}\" >> ~/.bash_profile")
41
+ ENV['PATH'] += ":#{android_tools}"
42
+ end
43
+ unless Mobo.cmd("grep -i ANDROID_HOME ~/.bash_profile")
44
+ Mobo.cmd("echo 'export ANDROID_HOME=#{android_home}' >> ~/.bash_profile")
45
+ Mobo.cmd("echo 'export PATH=\$PATH:#{android_tools}' >> ~/.bash_profile")
30
46
  Mobo.log.info("ANDROID_HOME and PATH env variables have been updated.
31
47
  Start a new terminal session for them to take effect")
32
- raise "Setting ANDROID_HOME and PATH failed" unless self.exists?
33
48
  end
49
+ raise "Setting ANDROID_HOME and PATH failed" unless self.exists?
34
50
  end
35
51
 
36
52
  def package_exists?(package)
@@ -74,7 +90,7 @@ module Mobo
74
90
  module Avd
75
91
  class << self
76
92
  def create(device)
77
- SystemCheck.target_exists(device["target"])
93
+ SystemCheck.target_exists?(device["target"])
78
94
  SystemCheck.abi_exists?(device["target"], device["abi"])
79
95
  SystemCheck.skin_exists?(device["target"], device["skin"])
80
96
  emulator_cmd =
@@ -97,7 +113,7 @@ module Mobo
97
113
  def add_to_path
98
114
  if !ENV['PATH'].match(/platform-tools/)
99
115
  ENV['PATH'] += ":#{ENV['ANDROID_HOME']}/platform-tools"
100
- Mobo.cmd("echo \"export PATH=#{ENV['PATH']}\" >> ~/.bash_profile")
116
+ Mobo.cmd("echo 'export PATH=\$PATH:#{ENV['ANDROID_HOME']}/platform-tools' >> ~/.bash_profile")
101
117
  Mobo.log.debug("ENV['PATH'] set to #{ENV['PATH']}")
102
118
  Mobo.log.info("PATH env variables has been updated.
103
119
  Start a new terminal session for it to take effect")
@@ -105,7 +121,6 @@ module Mobo
105
121
  end
106
122
 
107
123
  def exists?
108
- add_to_path
109
124
  Mobo.cmd("which adb")
110
125
  end
111
126
 
@@ -171,6 +186,7 @@ module Mobo
171
186
  Mobo.cmd(cmd)
172
187
  Mobo.log.info("Emulator #{@device["name"]} has stopped")
173
188
  }
189
+ Process.detach(pid)
174
190
 
175
191
  @device["pid"] = pid
176
192
  @device["id"] = "emulator-#{@device["port"]}"
@@ -186,8 +202,12 @@ module Mobo
186
202
  elsif !running?
187
203
  Mobo.log.error("Emulator #{@device["name"]} has stopped")
188
204
  break
205
+ elsif booting?
206
+ Mobo.log.info("waiting for #{@device["id"]} to boot...")
207
+ sleep(BOOT_SLEEP)
189
208
  else
190
- Mobo.log.debug("waiting for #{@device["id"]} to boot...")
209
+ # adb does not always recgnoise new emulators booted up, so it needs to be restarted
210
+ Mobo.cmd('adb kill-server')
191
211
  sleep(BOOT_SLEEP)
192
212
  end
193
213
  end
@@ -209,11 +229,12 @@ module Mobo
209
229
 
210
230
  def booted?
211
231
  bootanim = Mobo.cmd_out("adb -s #{@device["id"]} shell 'getprop init.svc.bootanim'")
212
- if bootanim.match(/stopped/)
213
- return true
214
- else
215
- return false
216
- end
232
+ bootanim.match(/stopped/)
233
+ end
234
+
235
+ def booting?
236
+ bootanim = Mobo.cmd_out("adb -s #{@device["id"]} shell 'getprop init.svc.bootanim'")
237
+ bootanim.match(/running/)
217
238
  end
218
239
 
219
240
  def unlock
@@ -7,19 +7,25 @@ module Mobo
7
7
  raise error unless $?.success?
8
8
  end
9
9
 
10
- def android
11
- Android.exists?
10
+ def android?
11
+ Android.install unless Android.exists?
12
12
  end
13
13
 
14
- def target_exists(target)
14
+ def adb?
15
+ Android::Adb.install unless Android::Adb.exists?
16
+ end
17
+
18
+ def target_exists?(target)
15
19
  unless Android::Targets.exists?(target)
16
- SystemSetup.install_target(target)
20
+ Android.install_package(target) if Android.package_exists?(target)
17
21
  end
18
22
  end
19
23
 
20
24
  def abi_exists?(target, abi)
21
25
  unless Android::Targets.has_abi?(target, abi)
22
- SystemSetup.install_abi(target, abi)
26
+ package_name = Android::Targets.abi_package(target, abi)
27
+ Android.install_package(package_name) if Android.package_exists?(package_name)
28
+ raise "Cannot install abi: #{abi} for #{target}" unless $?.success?
23
29
  end
24
30
  end
25
31
 
@@ -27,15 +33,17 @@ module Mobo
27
33
  Android::Targets.has_skin?(target, abi)
28
34
  end
29
35
 
30
- def adb
31
- unless Android::Adb.exists?
32
- SystemSetup.install_adb
33
- end
34
- end
35
-
36
36
  def device_file_exists?(filename)
37
37
  File.exists?(filename)
38
38
  end
39
+
40
+ def ubuntu?
41
+ RUBY_PLATFORM.match(/linux/) and Mobo.cmd("which apt-get")
42
+ end
43
+
44
+ def osx?
45
+ RUBY_PLATFORM.match(/darwin/)
46
+ end
39
47
  end
40
48
  end
41
49
  end
@@ -3,30 +3,11 @@ module Mobo
3
3
  class << self
4
4
 
5
5
  def base_libraries
6
- #if ubuntu
7
- if(Mobo.cmd("which apt-get"))
6
+ if SystemCheck.ubuntu?
8
7
  Mobo.cmd("sudo apt-get install -y libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5 lib32z1")
9
8
  end
10
9
  end
11
10
 
12
- def install_android
13
- Android.install
14
- end
15
-
16
- def install_target(target)
17
- Android.install_package(target) if Android.package_exists?(target)
18
- raise "Cannot install target: #{target}" unless $?.success?
19
- end
20
-
21
- def install_abi(target, abi)
22
- package_name = Android::Targets.abi_package(target, abi)
23
- Android.install_package(package_name) if Android.package_exists?(package_name)
24
- raise "Cannot install abi: #{abi} for #{target}" unless $?.success?
25
- end
26
-
27
- def install_adb
28
- Android::Adb.install unless Android::Adb.exists?
29
- end
30
11
  end
31
12
  end
32
13
  end
data/lib/mobo.rb CHANGED
@@ -60,8 +60,8 @@ module Mobo
60
60
 
61
61
  def system_checks
62
62
  SystemSetup.base_libraries
63
- SystemCheck.android
64
- SystemCheck.adb
63
+ SystemCheck.android?
64
+ SystemCheck.adb?
65
65
  end
66
66
 
67
67
  def up(filename)
@@ -83,7 +83,7 @@ module Mobo
83
83
  File.open(MOBO_DEVICES_CACHE_FILE, "w") do |file|
84
84
  file.write Mobo.devices.to_yaml
85
85
  end
86
- Process.waitall
86
+ Process.wait
87
87
  end
88
88
 
89
89
  def status(filename)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mobo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mark O'Shea
@@ -17,7 +17,6 @@ executables:
17
17
  extensions: []
18
18
  extra_rdoc_files: []
19
19
  files:
20
- - mobo.rb
21
20
  - lib/mobo/android.rb
22
21
  - lib/mobo/system_check.rb
23
22
  - lib/mobo/system_setup.rb
@@ -43,7 +42,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
43
42
  version: '0'
44
43
  requirements: []
45
44
  rubyforge_project:
46
- rubygems_version: 2.0.3
45
+ rubygems_version: 2.0.14
47
46
  signing_key:
48
47
  specification_version: 4
49
48
  summary: Mobo - android emulator abstraction
data/mobo.rb DELETED
@@ -1,80 +0,0 @@
1
- #!/usr/bin/env ruby
2
- require 'yaml'
3
- require 'pp'
4
- require 'logger'
5
- require_relative 'lib/mobo/android'
6
- require_relative 'lib/mobo/system_check'
7
-
8
- module Mobo
9
- class << self
10
- attr_accessor :log, :data, :devices
11
-
12
- def log
13
- @log || @log = Logger.new(STDOUT)
14
- end
15
-
16
- def cmd(command)
17
- log.debug(command)
18
- system(command)
19
- end
20
-
21
- def cmd_out(command)
22
- log.debug(command)
23
- `#{command}`
24
- end
25
-
26
- def start_process(cmd)
27
- pid = Process.spawn(cmd)
28
- Process.detach(pid)
29
- pid
30
- end
31
-
32
- def devices
33
- @devices = @devices.nil? ? {} : @devices
34
- end
35
-
36
- def device_config(device)
37
- defaults = {
38
- "name" => "default",
39
- "target" => "android-22",
40
- "abi" => "default/x86_64",
41
- "height" => "1200",
42
- "width" => "720",
43
- "sdcard_size" => "20M" }
44
- defaults.merge(device)
45
- end
46
-
47
- def up
48
- # retrive settings for one of each device
49
- Mobo.data["devices"].each do |device|
50
- device = device_config(device)
51
- Mobo.devices[device["name"]] = device
52
- end
53
-
54
- # build and boot devices
55
- Mobo.devices.each_pair do |name, device|
56
- Mobo::Android::Avd.create(device)
57
- emulator = Android::Emulator.new(device)
58
- emulator.start
59
- emulator.unlock_when_booted
60
- end
61
- File.open(MOBO_DEVICES_FILE, "w") do |file|
62
- file.write Mobo.devices.to_yaml
63
- end
64
- end
65
-
66
- def status
67
- Mobo.data.each_pair do |name, device|
68
- Mobo::Android::Emulator.new(device).status
69
- end
70
- end
71
-
72
- def destroy
73
- Mobo.data.each_pair do |name, device|
74
- Mobo::Android::Emulator.new(device).destroy
75
- end
76
- end
77
-
78
- end
79
-
80
- end