device_api-android 1.2.9 → 1.2.10

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: c09f0413dc5506bd026fdaa5f8bf85af6a18a404
4
- data.tar.gz: 2bc91a6a0affe29634f881f5592d3be10bde1efb
3
+ metadata.gz: f2949c4bb240ed0f093b79db016d0d36156db4b4
4
+ data.tar.gz: 18bf69ed9c381eee30d2229efff6481a5adab406
5
5
  SHA512:
6
- metadata.gz: 5247d30f5ce2233891a6f3770c5283b753466f6e9fd81249e1184ec14ea9a9064843228f924c01ea07325449b95a76c3e119b933634d95f81558068188438856
7
- data.tar.gz: 9fb2718ad39a1ceceaefa7ce4e1b2251d0b39d5afbbb109819f299b635d0d75b1438f8d76d7f28f8d4e48f3462775aaf1c2cfef578ffbc2fac41e97054c30855
6
+ metadata.gz: 77e3bd2c0c489a7a4334203bbc37ee3bb7a2792e048894aa845a998069b25016f73953af459ff724b2772749645820143334f29970fc24d8c829e5a5369913d4
7
+ data.tar.gz: 80b1257860b39542b8b088db4086d876fe9bb2cf4c82cd75668a4e69715e94fbd5712e3ef1e171dc101823f5cc1f032afc5879a7429efee7d870fdaec8db8f5a
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # DeviceAPI-Android
2
2
 
3
- *DeviceAPI-Android* is the android implementation of device_api -- an initiative to allow full automation of device activities.
3
+ *DeviceAPI-Android* is the android implementation of device_api -- an initiative to allow full automation of device activities. For a full list of release notes, see the [change log](CHANGELOG.md)
4
4
 
5
5
  ## Dependencies
6
6
 
@@ -104,6 +104,7 @@ This allows you to setup a keystore with the options required by any testing fra
104
104
  ## Testing
105
105
 
106
106
  device_api-android is defended with unit and integration level rspec tests. You can run the tests with:
107
+
107
108
  bundle exec rspec
108
109
 
109
110
  ## Issues
@@ -22,10 +22,10 @@ module DeviceAPI
22
22
  end
23
23
 
24
24
  # Retrieve device state for a single device
25
- # @param serial serial number of device
25
+ # @param qualifier qualifier of device
26
26
  # @return (String) device state
27
- def self.get_state(serial)
28
- result = execute('adb get-state -s #{serial}')
27
+ def self.get_state(qualifier)
28
+ result = execute('adb get-state -s #{qualifier}')
29
29
 
30
30
  raise ADBCommandError.new(result.stderr) if result.exit != 0
31
31
 
@@ -35,10 +35,10 @@ module DeviceAPI
35
35
  end
36
36
 
37
37
  # Get the properties of a specified device
38
- # @param serial serial number of device
38
+ # @param qualifier qualifier of device
39
39
  # @return (Hash) hash containing device properties
40
- def self.getprop(serial)
41
- result = shell(serial, 'getprop')
40
+ def self.getprop(qualifier)
41
+ result = shell(qualifier, 'getprop')
42
42
 
43
43
  lines = result.stdout.encode('UTF-16', 'UTF-8', invalid: :replace, replace: '').encode('UTF-8', 'UTF-16').split("\n")
44
44
 
@@ -46,37 +46,37 @@ module DeviceAPI
46
46
  end
47
47
 
48
48
  # Get the 'input' information from dumpsys
49
- # @param serial serial number of device
49
+ # @param qualifier qualifier of device
50
50
  # @return (Hash) hash containing input information from dumpsys
51
- def self.getdumpsys(serial)
52
- lines = dumpsys(serial, 'input')
51
+ def self.getdumpsys(qualifier)
52
+ lines = dumpsys(qualifier, 'input')
53
53
  process_dumpsys('(.*):\s+(.*)', lines)
54
54
  end
55
55
 
56
56
  # Get the 'iphonesubinfo' from dumpsys
57
- # @param serial serial number of device
57
+ # @param qualifier qualifier of device
58
58
  # @return (Hash) hash containing iphonesubinfo information from dumpsys
59
- def self.getphoneinfo(serial)
60
- lines = dumpsys(serial, 'iphonesubinfo')
59
+ def self.getphoneinfo(qualifier)
60
+ lines = dumpsys(qualifier, 'iphonesubinfo')
61
61
  process_dumpsys('(.*) =\s+(.*)', lines)
62
62
  end
63
63
 
64
64
  # Get the 'battery' information from dumpsys
65
- # @param [String] serial serial number of device
65
+ # @param [String] qualifier qualifier of device
66
66
  # @return [Hash] hash containing battery information from dumpsys
67
- def self.get_battery_info(serial)
68
- lines = dumpsys(serial, 'battery')
67
+ def self.get_battery_info(qualifier)
68
+ lines = dumpsys(qualifier, 'battery')
69
69
  process_dumpsys('(.*):\s+(.*)', lines)
70
70
  end
71
71
 
72
- def self.get_network_interface(serial, interface)
73
- result = shell(serial, "ifconfig #{interface}")
72
+ def self.get_network_interface(qualifier, interface)
73
+ result = shell(qualifier, "ifconfig #{interface}")
74
74
  result.stdout
75
75
  end
76
76
 
77
77
  # Get the network information
78
- def self.get_network_info(serial)
79
- lines = shell(serial, 'netcfg')
78
+ def self.get_network_info(qualifier)
79
+ lines = shell(qualifier, 'netcfg')
80
80
  lines.stdout.split("\n").map do |a|
81
81
  b = a.split(" ")
82
82
  { name: b[0], ip: b[2].split('/')[0], mac: b[4] }
@@ -100,15 +100,15 @@ module DeviceAPI
100
100
  end
101
101
 
102
102
  # Get the 'power' information from dumpsys
103
- # @param [String] serial serial number of device
103
+ # @param [String] qualifier qualifier of device
104
104
  # @return [Hash] hash containing power information from dumpsys
105
- def self.getpowerinfo(serial)
106
- lines = dumpsys(serial, 'power')
105
+ def self.getpowerinfo(qualifier)
106
+ lines = dumpsys(qualifier, 'power')
107
107
  process_dumpsys('(.*)=(.*)', lines)
108
108
  end
109
109
 
110
- def self.get_device_dpi(serial)
111
- lines = dumpsys(serial, 'window')
110
+ def self.get_device_dpi(qualifier)
111
+ lines = dumpsys(qualifier, 'window')
112
112
  dpi = nil
113
113
  lines.each do |line|
114
114
  if /sw(\d*)dp/.match(line)
@@ -119,17 +119,17 @@ module DeviceAPI
119
119
  end
120
120
 
121
121
  # Returns the 'dumpsys' information from the specified device
122
- # @param serial serial number of device
122
+ # @param qualifier qualifier of device
123
123
  # @return (Array) array of results from adb shell dumpsys
124
- def self.dumpsys(serial, command)
125
- result = shell(serial, "dumpsys #{command}")
124
+ def self.dumpsys(qualifier, command)
125
+ result = shell(qualifier, "dumpsys #{command}")
126
126
  result.stdout.split("\n").map { |line| line.strip }
127
127
  end
128
128
 
129
129
  # Installs a specified apk to a specific device
130
130
  # @param [Hash] options the options used for installing an apk
131
131
  # @option options [String] :apk path to apk to install
132
- # @option options [String] :serial serial number of device
132
+ # @option options [String] :qualifier qualifier of device
133
133
  # @return (String) return result from adb install command
134
134
  def self.install_apk(options = {})
135
135
  options[:action] = :install
@@ -139,7 +139,7 @@ module DeviceAPI
139
139
  # Uninstalls a specified package from a specified device
140
140
  # @param [Hash] options the options used for uninstalling a package
141
141
  # @option options [String] :package_name package to uninstall
142
- # @option options [String] :serial serial number of device
142
+ # @option options [String] :qualifier qualifier of device
143
143
  # @return (String) return result from adb uninstall command
144
144
  def self.uninstall_apk(options = {})
145
145
  options[:action] = :uninstall
@@ -149,14 +149,14 @@ module DeviceAPI
149
149
  def self.change_apk(options = {})
150
150
  package_name = options[:package_name]
151
151
  apk = options[:apk]
152
- serial = options[:serial]
152
+ qualifier = options[:qualifier]
153
153
  action = options[:action]
154
154
 
155
155
  case action
156
156
  when :install
157
- command = "adb -s #{serial} install #{apk}"
157
+ command = "adb -s #{qualifier} install #{apk}"
158
158
  when :uninstall
159
- command = "adb -s #{serial} uninstall #{package_name}"
159
+ command = "adb -s #{qualifier} uninstall #{package_name}"
160
160
  else
161
161
  raise ADBCommandError.new('No action specified')
162
162
  end
@@ -171,10 +171,10 @@ module DeviceAPI
171
171
  end
172
172
 
173
173
  # Returns the uptime of the specified device
174
- # @param serial serial number of device
174
+ # @param qualifier qualifier of device
175
175
  # @return (Float) uptime in seconds
176
- def self.get_uptime(serial)
177
- result = shell(serial, 'cat /proc/uptime')
176
+ def self.get_uptime(qualifier)
177
+ result = shell(qualifier, 'cat /proc/uptime')
178
178
 
179
179
  lines = result.stdout.split("\n")
180
180
  uptime = 0
@@ -187,23 +187,23 @@ module DeviceAPI
187
187
  end
188
188
 
189
189
  # Reboots the specified device
190
- # @param serial serial number of device
190
+ # @param qualifier qualifier of device
191
191
  # @return (nil) Nil if successful, otherwise an error is raised
192
- def self.reboot(serial)
193
- result = execute("adb -s #{serial} reboot")
192
+ def self.reboot(qualifier)
193
+ result = execute("adb -s #{qualifier} reboot")
194
194
  raise ADBCommandError.new(result.stderr) if result.exit != 0
195
195
  end
196
196
 
197
197
  # Runs monkey testing
198
- # @param serial serial number of device
198
+ # @param qualifier qualifier of device
199
199
  # @param [Hash] args hash of arguments used for starting testing
200
200
  # @option args [String] :events (10000) number of events to run
201
201
  # @option args [String] :package name of package to run the tests against
202
202
  # @option args [String] :seed pass the seed number (optional)
203
203
  # @option args [String] :throttle throttle value (optional)
204
204
  # @example
205
- # DeviceAPI::ADB.monkey( serial, :package => 'my.lovely.app' )
206
- def self.monkey(serial, args)
205
+ # DeviceAPI::ADB.monkey( qualifier, :package => 'my.lovely.app' )
206
+ def self.monkey(qualifier, args)
207
207
 
208
208
  events = args[:events] || 10000
209
209
  package = args[:package] or raise "package name not provided (:package => 'bbc.iplayer')"
@@ -214,71 +214,81 @@ module DeviceAPI
214
214
  cmd = cmd + " -s #{seed}" if seed
215
215
  cmd = cmd + " -t #{throttle}" if throttle
216
216
 
217
- shell(serial, cmd)
217
+ shell(qualifier, cmd)
218
218
  end
219
219
 
220
220
  # Take a screenshot from the device
221
- # @param serial serial number of device
221
+ # @param qualifier qualifier of device
222
222
  # @param [Hash] args hash of arguments
223
223
  # @option args [String] :filename name (with full path) required to save the image
224
224
  # @example
225
- # DeviceAPI::ADB.screenshot( serial, :filename => '/tmp/filename.png' )
226
- def self.screencap( serial, args )
225
+ # DeviceAPI::ADB.screenshot( qualifier, :filename => '/tmp/filename.png' )
226
+ def self.screencap( qualifier, args )
227
227
 
228
228
  filename = args[:filename] or raise "filename not provided (:filename => '/tmp/myfile.png')"
229
229
 
230
230
  convert_carriage_returns = %q{perl -pe 's/\x0D\x0A/\x0A/g'}
231
231
  cmd = "screencap -p | #{convert_carriage_returns} > #{filename}"
232
232
 
233
- shell(serial, cmd)
233
+ shell(qualifier, cmd)
234
234
  end
235
-
236
- def self.connect(ipaddress, port = 5555)
237
- ipaddressandport = "#{ipaddress}:#{port}"
238
- check_ip_address(ipaddressandport)
239
- cmd = "adb connect #{ipaddressandport}"
235
+
236
+ # Connects to remote android device
237
+ # @param [String] ip_address
238
+ # @param [String] port
239
+ # @example
240
+ # DeviceAPI::ADB.connect(ip_address, port)
241
+ def self.connect(ip_address, port=5555)
242
+ ip_address_and_port = "#{ip_address}:#{port}"
243
+ check_ip_address(ip_address_and_port)
244
+ cmd = "adb connect #{ip_address_and_port}"
240
245
  result = execute(cmd)
241
246
  if result.stdout.to_s =~ /.*already connected to.*/
242
- raise DeviceAlreadyConnectedError.new("Device #{ipaddressandport} already connected")
247
+ raise DeviceAlreadyConnectedError.new("Device #{ip_address_and_port} already connected")
243
248
  else
244
249
  unless result.stdout.to_s =~ /.*connected to.*/
245
- raise ADBCommandError.new("Unable to adb connect to #{ipaddressandport} result was: #{result.stdout}")
250
+ raise ADBCommandError.new("Unable to adb connect to #{ip_address_and_port} result was: #{result.stdout}")
246
251
  end
247
252
  end
248
253
  end
249
-
250
- def self.disconnect(ipaddress, port = 5555)
251
- ipaddressandport = "#{ipaddress}:#{port}"
252
- check_ip_address(ipaddressandport)
253
- cmd = "adb disconnect #{ipaddressandport}"
254
+
255
+ # Disconnects from remote android device
256
+ # @param [String] ip_address
257
+ # @param [String] port
258
+ # @example
259
+ # DeviceAPI::ADB.disconnect(ip_address, port)
260
+ def self.disconnect(ip_address, port=5555)
261
+ ip_address_and_port = "#{ip_address}:#{port}"
262
+ check_ip_address(ip_address_and_port)
263
+ cmd = "adb disconnect #{ip_address_and_port}"
254
264
  result = execute(cmd)
255
265
  unless result.exit == 0
256
- raise ADBCommandError.new("Unable to adb disconnect to #{ipaddressandport} result was: #{result.stdout}")
266
+ raise ADBCommandError.new("Unable to adb disconnect to #{ip_address_and_port} result was: #{result.stdout}")
257
267
  end
258
268
  end
259
269
 
260
270
  # Returns wifi status and access point name
261
- # @param serial serial number of device
271
+ # @param qualifier qualifier of device
262
272
  # @example
263
- # DeviceAPI::ADB.wifi(serial)
264
- def self.wifi(serial)
265
- result = shell(serial, 'dumpsys wifi | grep mNetworkInfo')
273
+ # DeviceAPI::ADB.wifi(qualifier)
274
+ def self.wifi(qualifier)
275
+ result = shell(qualifier, 'dumpsys wifi | grep mNetworkInfo')
266
276
 
267
277
  {:status => result.stdout.match("state:(.*?),")[1].strip, :access_point => result.stdout.match("extra:(.*?),")[1].strip.gsub(/"/,'')}
268
278
  end
269
279
 
270
280
  # Sends a key event to the specified device
271
- # @param [String] serial serial number of device
281
+ # @param [String] qualifier qualifier of device
272
282
  # @param [String] keyevent keyevent to send to the device
273
- def self.keyevent(serial, keyevent)
274
- shell(serial, "input keyevent #{keyevent}").stdout
283
+ def self.keyevent(qualifier, keyevent)
284
+ shell(qualifier, "input keyevent #{keyevent}").stdout
275
285
  end
276
286
 
277
287
  # ADB Shell command
278
- # @param [String] serial serial number of device
288
+ # @param [String] qualifier qualifier of device
279
289
  # @param [String] command command to execute
280
- def self.shell(serial, command)
281
- result = execute("adb -s '#{serial}' shell #{command}")
290
+ def self.shell(qualifier, command)
291
+ result = execute("adb -s '#{qualifier}' shell #{command}")
282
292
  case result.stderr
283
293
  when /^error: device unauthorized./
284
294
  raise DeviceAPI::UnauthorizedDevice, result.stderr
@@ -292,55 +302,55 @@ module DeviceAPI
292
302
  end
293
303
 
294
304
  # Sends a swipe command to the specified device
295
- # @param [String] serial serial number of the device
305
+ # @param [String] qualifier qualifier of the device
296
306
  # @param [Hash] coords hash of coordinates to swipe from / to
297
307
  # @option coords [String] :x_from (0) Coordinate to start from on the X axis
298
308
  # @option coords [String] :x_to (0) Coordinate to end on on the X axis
299
309
  # @option coords [String] :y_from (0) Coordinate to start from on the Y axis
300
310
  # @option coords [String] :y_to (0) Coordinate to end on on the Y axis
301
- def self.swipe(serial, coords = {x_from: 0, y_from: 0, x_to: 0, y_to: 0 })
302
- shell(serial, "input swipe #{coords[:x_from]} #{coords[:y_from]} #{coords[:x_to]} #{coords[:y_to]}").stdout
311
+ def self.swipe(qualifier, coords = {x_from: 0, y_from: 0, x_to: 0, y_to: 0 })
312
+ shell(qualifier, "input swipe #{coords[:x_from]} #{coords[:y_from]} #{coords[:x_to]} #{coords[:y_to]}").stdout
303
313
  end
304
314
 
305
315
  # Starts intent using adb
306
316
  # Returns stdout
307
- # @param serial serial number of device
317
+ # @param qualifier qualifier of device
308
318
  # @param command -option activity
309
319
  # @example
310
- # DeviceAPI::ADB.am(serial, "start -a android.intent.action.MAIN -n com.android.settings/.wifi.WifiSettings")
311
- def self.am(serial, command)
312
- shell(serial, "am #{command}").stdout
320
+ # DeviceAPI::ADB.am(qualifier, "start -a android.intent.action.MAIN -n com.android.settings/.wifi.WifiSettings")
321
+ def self.am(qualifier, command)
322
+ shell(qualifier, "am #{command}").stdout
313
323
  end
314
324
 
315
325
  # Package manager commands
316
- # @param serial serial of device
326
+ # @param qualifier qualifier of device
317
327
  # @param command command to issue to the package manager
318
- # @example DeviceAPI::ADB.pm(serial, 'list packages')
319
- def self.pm(serial, command)
320
- shell(serial, "pm #{command}").stdout
328
+ # @example DeviceAPI::ADB.pm(qualifier, 'list packages')
329
+ def self.pm(qualifier, command)
330
+ shell(qualifier, "pm #{command}").stdout
321
331
  end
322
332
 
323
333
  # Blocks a package, used on Android versions less than KitKat
324
334
  # Returns boolean
325
- # @param serial serial of device
335
+ # @param qualifier qualifier of device
326
336
  # @param package to block
327
- def self.block_package(serial, package)
328
- result = pm(serial, "block #{package}")
337
+ def self.block_package(qualifier, package)
338
+ result = pm(qualifier, "block #{package}")
329
339
  result.include?('true')
330
340
  end
331
341
 
332
342
  # Blocks a package on KitKat and above
333
343
  # Returns boolean
334
- # @param serial serial of device
344
+ # @param qualifier qualifier of device
335
345
  # @param package to hide
336
- def self.hide_package(serial, package)
337
- result = pm(serial, "hide #{package}")
346
+ def self.hide_package(qualifier, package)
347
+ result = pm(qualifier, "hide #{package}")
338
348
  result.include?('true')
339
349
  end
340
350
 
341
- def self.check_ip_address(ipaddressandport)
342
- unless ipaddressandport =~ /\A(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3}):[0-9]+\Z/
343
- raise ADBCommandError.new("Invalid IP address and port #{ipaddressandport}")
351
+ def self.check_ip_address(ip_address_and_port)
352
+ unless ip_address_and_port =~ /\A(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3}):[0-9]+\Z/
353
+ raise ADBCommandError.new("Invalid IP address and port #{ip_address_and_port}")
344
354
  end
345
355
  end
346
356
  end
@@ -9,6 +9,7 @@ module DeviceAPI
9
9
  module Android
10
10
  # Device class used for containing the accessors of the physical device information
11
11
  class Device < DeviceAPI::Device
12
+ attr_reader :qualifier
12
13
 
13
14
  @@subclasses; @@subclasses = {}
14
15
 
@@ -25,11 +26,22 @@ module DeviceAPI
25
26
  end
26
27
 
27
28
  def initialize(options = {})
28
- @serial = options[:serial]
29
+ # For devices connected with USB, qualifier and serial are same
30
+ @qualifier = @serial = options[:serial]
29
31
  @state = options[:state]
30
32
  @remote = options[:remote] ? true : false
33
+ if is_remote?
34
+ set_ip_and_port
35
+ @serial = self.serial_no
36
+ end
31
37
  end
32
38
 
39
+ def set_ip_and_port
40
+ address = @qualifier.split(":")
41
+ @ip_address = address.first
42
+ @port = address.last
43
+ end
44
+
33
45
  def is_remote?
34
46
  @remote || false
35
47
  end
@@ -45,12 +57,21 @@ module DeviceAPI
45
57
  'no permissions' => :no_permissions
46
58
  }[@state]
47
59
  end
60
+
61
+ def connect
62
+ ADB.connect(@ip_address, @port)
63
+ end
48
64
 
49
65
  def disconnect
50
66
  unless is_remote?
51
- raise DeviceAPI::Android::DeviceDisconnectedWhenNotARemoteDevice.new("Asked to disconnect device #{serial} when it is not a remote device")
67
+ raise DeviceAPI::Android::DeviceDisconnectedWhenNotARemoteDevice.new("Asked to disconnect device #{qualifier} when it is not a remote device")
52
68
  end
53
- ADB.disconnect(serial)
69
+ ADB.disconnect(@ip_address, @port)
70
+ end
71
+
72
+ # Return whether device is connected or not
73
+ def is_connected?
74
+ ADB.devices.any? {|device| device.include? qualifier}
54
75
  end
55
76
 
56
77
  # Return the device range
@@ -63,6 +84,12 @@ module DeviceAPI
63
84
  "#{device}_#{model}"
64
85
  end
65
86
 
87
+ # Return the serial number of device
88
+ # @return (String) serial number
89
+ def serial_no
90
+ get_prop('ro.serialno')
91
+ end
92
+
66
93
  # Return the device type
67
94
  # @return (String) device type string
68
95
  def device
@@ -101,9 +128,9 @@ module DeviceAPI
101
128
 
102
129
  def block_package(package)
103
130
  if version < "5.0.0"
104
- ADB.block_package(serial, package)
131
+ ADB.block_package(qualifier, package)
105
132
  else
106
- ADB.hide_package(serial, package)
133
+ ADB.hide_package(qualifier, package)
107
134
  end
108
135
  end
109
136
 
@@ -163,7 +190,7 @@ module DeviceAPI
163
190
  end
164
191
 
165
192
  def list_installed_packages
166
- packages = ADB.pm(serial, 'list packages')
193
+ packages = ADB.pm(qualifier, 'list packages')
167
194
  packages.split("\r\n")
168
195
  end
169
196
 
@@ -180,13 +207,13 @@ module DeviceAPI
180
207
  # Initiate monkey tests
181
208
  # @param [Hash] args arguments to pass on to ADB.monkey
182
209
  def monkey(args)
183
- ADB.monkey(serial, args)
210
+ ADB.monkey(qualifier, args)
184
211
  end
185
212
 
186
213
  # Capture screenshot on device
187
214
  # @param [Hash] args arguments to pass on to ADB.screencap
188
215
  def screenshot(args)
189
- ADB.screencap(serial, args)
216
+ ADB.screencap(qualifier, args)
190
217
  end
191
218
 
192
219
  # Get the IMEI number of the device
@@ -215,13 +242,13 @@ module DeviceAPI
215
242
 
216
243
  # Unlock the device by sending a wakeup command
217
244
  def unlock
218
- ADB.keyevent(serial, '26') unless screen_on?
245
+ ADB.keyevent(qualifier, '26') unless screen_on?
219
246
  end
220
247
 
221
248
  # Return the DPI of the attached device
222
249
  # @return [String] DPI of attached device
223
250
  def dpi
224
- get_dpi(serial)
251
+ get_dpi(qualifier)
225
252
  end
226
253
 
227
254
  # Return the device type based on the DPI
@@ -237,23 +264,23 @@ module DeviceAPI
237
264
  # Returns wifi status and access point name
238
265
  # @return [Hash] :status and :access_point
239
266
  def wifi_status
240
- ADB.wifi(serial)
267
+ ADB.wifi(qualifier)
241
268
  end
242
269
 
243
270
  def battery_info
244
- ADB.get_battery_info(serial)
271
+ ADB.get_battery_info(qualifier)
245
272
  end
246
273
 
247
274
  # @param [String] command to start the intent
248
275
  # Return the stdout of executed intent
249
276
  # @return [String] stdout
250
277
  def intent(command)
251
- ADB.am(serial, command)
278
+ ADB.am(qualifier, command)
252
279
  end
253
280
 
254
281
  #Reboots the device
255
282
  def reboot
256
- ADB.reboot(serial)
283
+ ADB.reboot(qualifier)
257
284
  end
258
285
 
259
286
  # Returns disk status
@@ -264,12 +291,12 @@ module DeviceAPI
264
291
 
265
292
  # Returns the device uptime
266
293
  def uptime
267
- ADB.get_uptime(serial)
294
+ ADB.get_uptime(qualifier)
268
295
  end
269
296
 
270
297
  # Returns the Wifi IP address
271
298
  def ip_address
272
- interface = ADB.get_network_interface(serial, 'wlan0')
299
+ interface = ADB.get_network_interface(qualifier, 'wlan0')
273
300
  if interface.match(/ip (.*) mask/)
274
301
  Regexp.last_match[1]
275
302
  elsif interface.match(/inet addr:(.*)\s+Bcast/)
@@ -281,7 +308,7 @@ module DeviceAPI
281
308
 
282
309
  # Returns the Wifi mac address
283
310
  def wifi_mac_address
284
- interface = ADB.get_network_interface(serial, 'wlan0')
311
+ interface = ADB.get_network_interface(qualifier, 'wlan0')
285
312
  if interface.match(/HWaddr (.*)/)
286
313
  Regexp.last_match[1].strip
287
314
  else
@@ -294,21 +321,21 @@ module DeviceAPI
294
321
  private
295
322
 
296
323
  def get_network_info
297
- ADB.get_network_info(serial)
324
+ ADB.get_network_info(qualifier)
298
325
  end
299
326
 
300
327
  def get_disk_info
301
- @diskstat = DeviceAPI::Android::Plugin::Disk.new(serial: serial) unless @diskstat
328
+ @diskstat = DeviceAPI::Android::Plugin::Disk.new(qualifier: qualifier) unless @diskstat
302
329
  @diskstat.process_stats
303
330
  end
304
331
 
305
332
  def get_battery_info
306
- @battery = DeviceAPI::Android::Plugin::Battery.new(serial: serial) unless @battery
333
+ @battery = DeviceAPI::Android::Plugin::Battery.new(qualifier: qualifier) unless @battery
307
334
  @battery
308
335
  end
309
336
 
310
337
  def get_memory_info
311
- @memory = DeviceAPI::Android::Plugin::Memory.new(serial: serial) unless @memory
338
+ @memory = DeviceAPI::Android::Plugin::Memory.new(qualifier: qualifier) unless @memory
312
339
  @memory
313
340
  end
314
341
 
@@ -321,34 +348,34 @@ module DeviceAPI
321
348
 
322
349
  def get_prop(key)
323
350
  if !@props || !@props[key]
324
- @props = ADB.getprop(serial)
351
+ @props = ADB.getprop(qualifier)
325
352
  end
326
353
  @props[key]
327
354
  end
328
355
 
329
356
  def get_dumpsys(key)
330
- @props = ADB.getdumpsys(serial)
357
+ @props = ADB.getdumpsys(qualifier)
331
358
  @props[key]
332
359
  end
333
360
 
334
361
  def get_powerinfo
335
- ADB.getpowerinfo(serial)
362
+ ADB.getpowerinfo(qualifier)
336
363
  end
337
364
 
338
365
  def get_phoneinfo
339
- ADB.getphoneinfo(serial)
366
+ ADB.getphoneinfo(qualifier)
340
367
  end
341
368
 
342
369
  def install_apk(apk)
343
- ADB.install_apk(apk: apk, serial: serial)
370
+ ADB.install_apk(apk: apk, qualifier: qualifier)
344
371
  end
345
372
 
346
373
  def uninstall_apk(package_name)
347
- ADB.uninstall_apk(package_name: package_name, serial: serial)
374
+ ADB.uninstall_apk(package_name: package_name, qualifier: qualifier)
348
375
  end
349
376
 
350
377
  def get_dpi
351
- ADB.get_device_dpi(serial)
378
+ ADB.get_device_dpi(qualifier)
352
379
  end
353
380
  end
354
381
 
@@ -6,11 +6,12 @@ module DeviceAPI
6
6
  # you can unlock that device by broadcasting a 'WakeUp' intent. On Kindle devices, this does not
7
7
  # work due to Amazons implementation of the Keyguard.
8
8
  def unlock
9
- ADB.keyevent(serial, '26') unless screen_on?
9
+ ADB.keyevent(qualifier, '26') unless screen_on?
10
10
  if orientation == :landscape
11
- ADB.swipe(serial, { x_from: 500, y_from: 575, x_to: 500, y_to: 250 } )
11
+ ADB.swipe(qualifier, { x_from: 500, y_from: 750, x_to: 500, y_to: 250 } ) if version.split('.').first.to_i >= 5
12
+ ADB.swipe(qualifier, { x_from: 900, y_from: 500, x_to: 300, y_to: 500 } ) if version.split('.').first.to_i < 5
12
13
  else
13
- ADB.swipe(serial, { x_from: 300, y_from: 900, x_to: 300, y_to: 600 } )
14
+ ADB.swipe(qualifier, { x_from: 300, y_from: 900, x_to: 300, y_to: 600 } )
14
15
  end
15
16
  end
16
17
  end
@@ -3,14 +3,14 @@ module DeviceAPI
3
3
  module Plugin
4
4
  class Audio
5
5
 
6
- attr_reader :serial
6
+ attr_reader :qualifier
7
7
 
8
8
  def initialize(options)
9
- @serial = options #[:serial]
9
+ @qualifier = options #[:serial]
10
10
  end
11
11
 
12
12
  def get_volume_steps
13
- audio = ADB.dumpsys( @serial, 'audio' )
13
+ audio = ADB.dumpsys( @qualifier, 'audio' )
14
14
  vol_steps = audio.detect { |a| a.include?('volume steps:') }
15
15
  return nil if vol_steps.nil?
16
16
 
@@ -58,12 +58,12 @@ module DeviceAPI
58
58
 
59
59
  def change_volume(op, key)
60
60
  op.times do
61
- ADB.keyevent(@serial, key )
61
+ ADB.keyevent(@qualifier, key )
62
62
  end
63
63
  end
64
64
 
65
65
  def get_system_volume
66
- audio = ADB.dumpsys( @serial, 'audio' )
66
+ audio = ADB.dumpsys( @qualifier, 'audio' )
67
67
  index = audio.index('- STREAM_SYSTEM:')
68
68
 
69
69
  return nil if index.nil?
@@ -5,8 +5,8 @@ module DeviceAPI
5
5
  attr_reader :current_temp, :max_temp, :max_current, :voltage, :level, :health, :status
6
6
 
7
7
  def initialize(options = {})
8
- serial = options[:serial]
9
- props = ADB.get_battery_info(serial)
8
+ qualifier = options[:qualifier]
9
+ props = ADB.get_battery_info(qualifier)
10
10
  @current_temp = props["temperature"]
11
11
  @max_temp = props["mBatteryMaxTemp"]
12
12
  @max_current = props["mBatteryMaxCurrent"]
@@ -3,14 +3,14 @@ module DeviceAPI
3
3
  module Plugin
4
4
  class Disk
5
5
 
6
- attr_reader :serial
6
+ attr_reader :qualifier
7
7
  def initialize(options = {})
8
- @serial = options[:serial]
8
+ @qualifier = options[:qualifier]
9
9
  end
10
10
 
11
11
  def process_stats(options = {})
12
12
  disk_info = {}
13
- stats = options[:data] || ADB.dumpsys(@serial, 'diskstats')
13
+ stats = options[:data] || ADB.dumpsys(@qualifier, 'diskstats')
14
14
  stats.each do |stat|
15
15
  if /(.*)-.*:\s(.*)\s\/\s([0-9]*[A-Z])\s[a-z]*\s=\s([0-9]*%)/.match(stat)
16
16
  disk_info["#{Regexp.last_match[1].downcase}_total"] = Regexp.last_match[3]
@@ -31,8 +31,8 @@ module DeviceAPI
31
31
  attr_accessor :processes, :mem_info
32
32
 
33
33
  def initialize(options = {})
34
- @serial = options[:serial]
35
- info = options[:data] || ADB.dumpsys(@serial, 'meminfo')
34
+ @qualifier = options[:qualifier]
35
+ info = options[:data] || ADB.dumpsys(@qualifier, 'meminfo')
36
36
  process_data(info)
37
37
  end
38
38
 
@@ -46,7 +46,7 @@ module DeviceAPI
46
46
  end
47
47
 
48
48
  def update
49
- meminfo = ADB.dumpsys(@serial, 'meminfo')
49
+ meminfo = ADB.dumpsys(@qualifier, 'meminfo')
50
50
  process_data(meminfo)
51
51
  end
52
52
 
@@ -54,6 +54,7 @@ module DeviceAPI
54
54
  # @param [String] apk_path full path to apk to check
55
55
  # @return returns false if the apk is unsigned, true if it is signed
56
56
  def self.is_apk_signed?(apk_path)
57
+ raise SigningCommandError.new('AAPT not available') unless DeviceAPI::Android::AAPT.aapt_available?
57
58
  result = execute("aapt list #{apk_path} | grep '^META-INF\/.*'")
58
59
  return false if result.stdout.empty?
59
60
  true
@@ -63,6 +64,7 @@ module DeviceAPI
63
64
  # @param [String] apk_path full path to the apk
64
65
  # @return [Boolean, Exception] returns true if the apk is successfully unsigned, otherwise an exception is raised
65
66
  def self.unsign_apk(apk_path)
67
+ raise SigningCommandError.new('AAPT not available') unless DeviceAPI::Android::AAPT.aapt_available?
66
68
  file_list = execute("aapt list #{apk_path} | grep '^META-INF\/.*'")
67
69
  result = execute("aapt remove #{apk_path} #{file_list.stdout.split(/\s+/).join(' ')}")
68
70
  raise SigningCommandError.new(result.stderr) if result.exit != 0
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: device_api-android
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.9
4
+ version: 1.2.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Buckhurst
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2016-08-09 00:00:00.000000000 Z
14
+ date: 2016-10-03 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: device_api
@@ -79,7 +79,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
79
79
  version: '0'
80
80
  requirements: []
81
81
  rubyforge_project:
82
- rubygems_version: 2.6.6
82
+ rubygems_version: 2.5.1
83
83
  signing_key:
84
84
  specification_version: 4
85
85
  summary: Android Device Management API