ADB 0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format Fuubar
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm 1.9.3-p194@ADB --create
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/ADB/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Jeffrey S. Morgan"]
6
+ gem.email = ["jeff.morgan@leandog.com"]
7
+ gem.description = %q{Simple wrapper over Android Debug Bridge command-line tool}
8
+ gem.summary = %q{Simple wrapper over Android Debug Bridge command-line tool}
9
+ gem.homepage = "http://github.com/cheezy/ADB"
10
+
11
+ gem.files = `git ls-files`.split($\)
12
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
+ gem.name = "ADB"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = ADB::VERSION
17
+
18
+ gem.add_dependency 'childprocess', '>= 0.3.5'
19
+
20
+ gem.add_development_dependency 'rspec', '>= 2.11.0'
21
+ gem.add_development_dependency 'cucumber', '>= 1.2.0'
22
+
23
+ end
@@ -0,0 +1,10 @@
1
+ === 0.1 / 2012-8-10
2
+ Initial release of the gem. It has support for the following commands
3
+ * start-server => start_server
4
+ * kill-server => stop_server
5
+ * connect => connect
6
+ * disconnect => disconnect
7
+ * devices => devices
8
+ * wait-for-device => wait_for_device
9
+ * install => install
10
+ * uninstall => uninstall
data/Gemfile ADDED
@@ -0,0 +1,10 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'rake'
4
+ gem 'fuubar'
5
+ gem 'growl'
6
+ gem 'guard-rspec'
7
+ gem 'guard-cucumber'
8
+
9
+ # Specify your gem's dependencies in ADB.gemspec
10
+ gemspec
@@ -0,0 +1,18 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ guard 'rspec', :version => 2, :cli => '--color --format Fuubar' do
5
+ watch(%r{^spec/.+_spec\.rb$})
6
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
7
+ watch('spec/spec_helper.rb') { "spec" }
8
+ end
9
+
10
+ guard 'cucumber', :notification => true, :all_after_pass => false, :cli => '--profile default' do
11
+ watch(%r{^features/.+\.feature$})
12
+ watch(%r{^features/support/.+$}) { 'features' }
13
+ watch(%r{^features/step_definitions/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'features' }
14
+ watch(%r{^lib/.+\.rb$}) { "features" }
15
+ watch(%r{^cucumber.yml$}) { "features" }
16
+ end
17
+
18
+
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Jeffrey S. Morgan
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,29 @@
1
+ # ADB
2
+
3
+ A simple wrapper around the Android Debug Bridge
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'ADB'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install ADB
18
+
19
+ ## Usage
20
+
21
+ TODO: Write usage instructions here
22
+
23
+ ## Contributing
24
+
25
+ 1. Fork it
26
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
27
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
28
+ 4. Push to the branch (`git push origin my-new-feature`)
29
+ 5. Create new Pull Request
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
3
+ require 'rspec/core/rake_task'
4
+ require 'cucumber'
5
+ require 'cucumber/rake/task'
6
+
7
+ RSpec::Core::RakeTask.new(:spec) do |spec|
8
+ spec.ruby_opts = "-I lib:spec"
9
+ spec.pattern = 'spec/**/*_spec.rb'
10
+ end
11
+ task :spec
12
+
13
+ Cucumber::Rake::Task.new(:features, "Run all features") do |t|
14
+ t.profile = 'default'
15
+ end
16
+
17
+ desc 'Run all specs and features'
18
+ task :test => ['spec', 'features']
19
+
20
+ task :lib do
21
+ $LOAD_PATH.unshift(File.expand_path("lib", File.dirname(__FILE__)))
22
+ end
23
+
24
+ task :default => :spec
25
+
@@ -0,0 +1 @@
1
+ default: --no-source --color --format pretty
@@ -0,0 +1,24 @@
1
+ Feature: Using the ADB module
2
+
3
+ Scenario: Starting the adb server
4
+ When the adb server is started
5
+ Then the adb server should be running
6
+
7
+ Scenario: Connecting to a device
8
+ Given the adb server is started
9
+ Then I should be able to connect to a local device
10
+
11
+ Scenario: Getting list of devices
12
+ Given the adb server is started
13
+ And I am connected to the local device
14
+ Then I should see the device "localhost:5555"
15
+
16
+ Scenario: Installing applications on the device
17
+ Given the adb server is started
18
+ And I am connected to the local device
19
+ Then I should be able to install the sample application
20
+
21
+ Scenario: Uninstalling the application
22
+ Given the adb server is started
23
+ And I am connected to the local device
24
+ Then I should be able to uninstall the sample application
@@ -0,0 +1,34 @@
1
+ When /^the adb server is started$/ do
2
+ start_server
3
+ end
4
+
5
+ Then /^the adb server should be running$/ do
6
+ last_stdout.should include "daemon started successfully"
7
+ end
8
+
9
+ Then /^I should be able to connect to a local device$/ do
10
+ connect('localhost')
11
+ last_stdout.should include "connected to localhost"
12
+ disconnect('localhost')
13
+ end
14
+
15
+ Given /^I am connected to the local device$/ do
16
+ connect
17
+ end
18
+
19
+ Then /^I should see the device "(.*?)"$/ do |device|
20
+ devices.should include device
21
+ end
22
+
23
+ Then /^I should be able to install the sample application$/ do
24
+ sn = devices[0]
25
+ wait_for_device({:serial => sn}, 60)
26
+ install 'features/support/ApiDemos.apk', {:serial => sn}, 60
27
+ last_stdout.should include 'Success'
28
+ end
29
+
30
+ Then /^I should be able to uninstall the sample application$/ do
31
+ sn = devices[0]
32
+ uninstall 'com.example.android.apis', {:serial => sn}
33
+ last_stdout.should include 'Success'
34
+ end
@@ -0,0 +1,21 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '../../', 'lib'))
2
+
3
+ require 'rspec/expectations'
4
+ require 'childprocess'
5
+ require 'ADB'
6
+
7
+ World(ADB)
8
+
9
+ emulator = ChildProcess.build('emulator', '-avd', 'Android_4.0.3')
10
+ emulator.start
11
+
12
+ at_exit do
13
+ emulator.stop
14
+ end
15
+
16
+
17
+ After do
18
+ stop_server
19
+ sleep 1
20
+ end
21
+
@@ -0,0 +1,156 @@
1
+ require 'ADB/version'
2
+ require 'ADB/errors'
3
+ require 'childprocess'
4
+ require 'tempfile'
5
+
6
+ #
7
+ # Mixin that provides access to the commands of the adb executable
8
+ # which is a part of the android toolset.
9
+ #
10
+ module ADB
11
+
12
+ attr_reader :last_stdout, :last_stderr
13
+
14
+ #
15
+ # start the server process
16
+ #
17
+ # @param timeout value for the command to complete. Defaults to 30
18
+ # seconds.
19
+ #
20
+ def start_server(timeout=30)
21
+ execute_adb_with(timeout, 'start-server')
22
+ raise ADBError, "Server didn't start" unless stdout_contains "daemon started successfully"
23
+ end
24
+
25
+ #
26
+ # stop the server process
27
+ #
28
+ # @param timeout value for the command to complete. Defaults to 30
29
+ # seconds.
30
+ #
31
+ def stop_server(timeout=30)
32
+ execute_adb_with(timeout, 'kill-server')
33
+ end
34
+
35
+ #
36
+ # connect to a running device via TCP/IP
37
+ #
38
+ # @param hostname defaults to 'localhost'
39
+ # @param port defaults to '5555'
40
+ # @param timeout value for the command to complete. Defaults to 30
41
+ # seconds.
42
+ #
43
+ def connect(hostname='localhost', port='5555', timeout=30)
44
+ execute_adb_with(timeout, "connect #{hostname}:#{port}")
45
+ raise ADBError, "Could not connect to device at #{hostname}:#{port}" unless stdout_contains "connected to #{hostname}"
46
+ end
47
+
48
+ #
49
+ # disconnect from a device
50
+ #
51
+ # @param hostname defaults to 'localhost'
52
+ # @param port defaults to '5555'
53
+ # @param timeout value for the command to complete. Defaults to 30
54
+ # seconds.
55
+ #
56
+ def disconnect(hostname='localhost', port='5555', timeout=30)
57
+ execute_adb_with(timeout, "disconnect #{hostname}:#{port}")
58
+ end
59
+
60
+ #
61
+ # list all connected devices
62
+ #
63
+ # @param timeout value for the command to complete. Defaults to 30
64
+ # seconds.
65
+ #
66
+ def devices(timeout=30)
67
+ execute_adb_with(timeout, 'devices')
68
+ device_list = last_stdout.split("\n")
69
+ device_list.shift
70
+ device_list.collect { |device| device.split("\t").first }
71
+ end
72
+
73
+ #
74
+ # wait for a device to complete startup
75
+ #
76
+ # @param [Hash] which device to wait for. Valid keys are :device,
77
+ # :emulator, and :serial.
78
+ # @param timeout value for the command to complete. Defaults to 30
79
+ # seconds.
80
+ #
81
+ def wait_for_device(target={}, timeout=30)
82
+ execute_adb_with(timeout, "#{which_one(target)} wait-for-device")
83
+ end
84
+
85
+ #
86
+ # install an apk file to a device
87
+ #
88
+ # @param the path and filename to the apk you wish to install
89
+ # @param [Hash] which device to wait for. Valid keys are :device,
90
+ # :emulator, and :serial.
91
+ # @param timeout value for the command to complete. Defaults to 30
92
+ # seconds.
93
+ #
94
+ def install(installable, target={}, timeout=30)
95
+ execute_adb_with(timeout, "#{which_one(target)} install #{installable}")
96
+ raise ADBError, "Could not install #{installable}" unless stdout_contains "Success"
97
+ end
98
+
99
+ #
100
+ # uninstall an apk file to a device
101
+ #
102
+ # @param the package name of the apk ou wish to uninstall
103
+ # @param [Hash] which device to wait for. Valid keys are :device,
104
+ # :emulator, and :serial.
105
+ # @param timeout value for the command to complete. Defaults to 30
106
+ # seconds.
107
+ #
108
+ def uninstall(package, target={}, timeout=30)
109
+ execute_adb_with(timeout, "#{which_one(target)} uninstall #{package}")
110
+ raise ADBError, "Could not uninstall #{package}" unless stdout_contains "Success"
111
+ end
112
+
113
+ private
114
+
115
+ def execute_adb_with(timeout, arguments)
116
+ args = arguments.split
117
+ process = ChildProcess.build('adb', *args)
118
+ process.io.stdout, process.io.stderr = std_out_err
119
+ process.start
120
+ kill_if_longer_than(process, timeout)
121
+ @last_stdout = output(process.io.stdout)
122
+ @last_stderr = output(process.io.stderr)
123
+ end
124
+
125
+ def which_one(target)
126
+ direct = ''
127
+ direct = '-d' if target[:device]
128
+ direct = '-e' if target[:emulator]
129
+ direct = "-s #{target[:serial]}" if target[:serial]
130
+ direct
131
+ end
132
+
133
+ def kill_if_longer_than(process, timeout)
134
+ begin
135
+ process.poll_for_exit(timeout)
136
+ rescue ChildProcess::TimeoutError
137
+ process.stop
138
+ end
139
+ end
140
+
141
+ def output(file)
142
+ file.rewind
143
+ out = file.read
144
+ file.close
145
+ file.unlink
146
+ out
147
+ end
148
+
149
+ def std_out_err
150
+ return ::Tempfile.new("adb-out#{Time.now}"), ::Tempfile.new("adb-err#{Time.now}")
151
+ end
152
+
153
+ def stdout_contains(expected)
154
+ last_stdout.include? expected
155
+ end
156
+ end
@@ -0,0 +1,8 @@
1
+ module ADB
2
+ class Error < StandardError
3
+ end
4
+
5
+ class ADBError < Error
6
+ end
7
+
8
+ end
@@ -0,0 +1,3 @@
1
+ module ADB
2
+ VERSION = "0.1"
3
+ end
@@ -0,0 +1,160 @@
1
+ require 'spec_helper'
2
+
3
+ describe ADB do
4
+ it "should know how to start the adb server" do
5
+ ADB.should_receive(:last_stdout).and_return("daemon started successfully")
6
+ should_call_adb_with('start-server')
7
+ ADB.start_server
8
+ end
9
+
10
+ it "should know how to stop the adb server" do
11
+ should_call_adb_with('kill-server')
12
+ ADB.stop_server
13
+ end
14
+
15
+ it "should stop process if it takes too long" do
16
+ ADB.should_receive(:last_stdout).and_return("device")
17
+ process = double('process')
18
+ process.should_receive(:start)
19
+ process.should_receive(:poll_for_exit).and_raise(ChildProcess::TimeoutError)
20
+ process.should_receive(:stop)
21
+ mock_output_file(process)
22
+ ChildProcess.should_receive(:build).with('adb', 'devices').and_return(process)
23
+ ADB.devices
24
+ end
25
+
26
+ it "should know how to provide list of devices" do
27
+ ADB.should_receive(:last_stdout).and_return("device")
28
+ should_call_adb_with('devices')
29
+ ADB.devices
30
+ end
31
+
32
+ context "when connecting to a device" do
33
+ before(:each) do
34
+ ADB.should_receive(:last_stdout).and_return("connected to localhost")
35
+ end
36
+
37
+ it "should connect successfully" do
38
+ should_call_adb_with('connect', 'localhost:5555')
39
+ ADB.connect('localhost', '5555')
40
+ end
41
+
42
+ it "should default to using port 5555" do
43
+ should_call_adb_with('connect', 'localhost:5555')
44
+ ADB.connect('localhost')
45
+ end
46
+
47
+ it "should default to using host localhost" do
48
+ should_call_adb_with('connect', 'localhost:5555')
49
+ ADB.connect
50
+ end
51
+ end
52
+
53
+ context "when disconnecting from a device" do
54
+ it "should disconnect successfully" do
55
+ should_call_adb_with('disconnect', 'localhost:5555')
56
+ ADB.disconnect('localhost', '5555')
57
+ end
58
+
59
+ it "should default to using port 5555" do
60
+ should_call_adb_with('disconnect', 'localhost:5555')
61
+ ADB.disconnect('localhost')
62
+ end
63
+
64
+ it "should default to using host localhost" do
65
+ should_call_adb_with('disconnect', 'localhost:5555')
66
+ ADB.disconnect
67
+ end
68
+ end
69
+
70
+ context "wating for a device to start" do
71
+ it "should wait for only device" do
72
+ should_call_adb_with('wait-for-device')
73
+ ADB.wait_for_device
74
+ end
75
+
76
+ it "should wait for the only connected device" do
77
+ should_call_adb_with('-d', 'wait-for-device')
78
+ ADB.wait_for_device :device => 'blah'
79
+ end
80
+
81
+ it "should wait for the only emulator" do
82
+ should_call_adb_with('-e', 'wait-for-device')
83
+ ADB.wait_for_device :emulator => 'blah'
84
+ end
85
+
86
+ it "should wait for a device when using serial number" do
87
+ should_call_adb_with('-s', 'sernum', 'wait-for-device')
88
+ ADB.wait_for_device :serial => 'sernum'
89
+ end
90
+ end
91
+
92
+ context "when installing an apk" do
93
+ it "should be able to install an application" do
94
+ ADB.should_receive(:last_stdout).and_return("Success")
95
+ should_call_adb_with('install', 'Test.apk')
96
+ ADB.install 'Test.apk'
97
+ end
98
+
99
+ it "should install to the only connected device" do
100
+ ADB.should_receive(:last_stdout).and_return("Success")
101
+ should_call_adb_with('-d', 'install', 'Test.apk')
102
+ ADB.install 'Test.apk', :device => 'blah'
103
+ end
104
+
105
+ it "should install to the only emulator" do
106
+ ADB.should_receive(:last_stdout).and_return("Success")
107
+ should_call_adb_with('-e', 'install', 'Test.apk')
108
+ ADB.install 'Test.apk', :emulator => 'blah'
109
+ end
110
+
111
+ it "should install to a target using serial number" do
112
+ ADB.should_receive(:last_stdout).and_return("Success")
113
+ should_call_adb_with('-s', 'sernum', 'install', 'Test.apk')
114
+ ADB.install 'Test.apk', :serial => 'sernum'
115
+ end
116
+
117
+ it "should raise an error when the install fails" do
118
+ ADB.should_receive(:last_stdout).and_return("some error")
119
+ should_call_adb_with('install', 'Test.apk')
120
+ expect { ADB.install('Test.apk') }.to raise_error(ADBError)
121
+ end
122
+ end
123
+
124
+ context "when uninstalling an apk" do
125
+ it "should be able to uninstall an application" do
126
+ ADB.should_receive(:last_stdout).and_return('Success')
127
+ should_call_adb_with('uninstall', 'com.example')
128
+ ADB.uninstall 'com.example'
129
+ end
130
+
131
+ it "should uninstall from the only connected device" do
132
+ ADB.should_receive(:last_stdout).and_return('Success')
133
+ should_call_adb_with('-d', 'uninstall', 'com.example')
134
+ ADB.uninstall 'com.example', :device => 'blah'
135
+ end
136
+
137
+ it "should uninstall from the only emulator" do
138
+ ADB.should_receive(:last_stdout).and_return('Success')
139
+ should_call_adb_with('-e', 'uninstall', 'com.example')
140
+ ADB.uninstall 'com.example', :emulator => 'blah'
141
+ end
142
+
143
+ it "should unistall from a device using the serial number" do
144
+ ADB.should_receive(:last_stdout).and_return('Success')
145
+ should_call_adb_with('-s', 'sernum', 'uninstall', 'com.example')
146
+ ADB.uninstall 'com.example', :serial => 'sernum'
147
+ end
148
+
149
+ it "should raise an error when the uninstall fails" do
150
+ ADB.should_receive(:last_stdout).and_return('some error')
151
+ should_call_adb_with('uninstall', 'com.example')
152
+ expect { ADB.uninstall('com.example') }.to raise_error(ADBError)
153
+ end
154
+ end
155
+
156
+
157
+ def should_call_adb_with(*args)
158
+ ChildProcess.should_receive(:build).with('adb', *args).and_return(process_mock)
159
+ end
160
+ end
@@ -0,0 +1,29 @@
1
+ # encoding: utf-8
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
4
+
5
+ require 'rspec'
6
+ require 'ADB'
7
+ require 'childprocess'
8
+
9
+ include ADB
10
+
11
+ def process_mock
12
+ process_mock = double('process_mock')
13
+ process_mock.should_receive(:start)
14
+ process_mock.should_receive(:poll_for_exit)
15
+ mock_output_file(process_mock)
16
+ process_mock
17
+ end
18
+
19
+ def mock_output_file(output)
20
+ output.should_receive(:io).exactly(4).times.and_return(output)
21
+ output.should_receive(:stdout=)
22
+ output.should_receive(:stdout).and_return(output)
23
+ output.should_receive(:stderr=)
24
+ output.should_receive(:stderr).and_return(output)
25
+ output.should_receive(:rewind).twice
26
+ output.should_receive(:read).twice.and_return([])
27
+ output.should_receive(:close).twice
28
+ output.should_receive(:unlink).twice
29
+ end
metadata ADDED
@@ -0,0 +1,125 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ADB
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Jeffrey S. Morgan
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-08-11 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: childprocess
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 0.3.5
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 0.3.5
30
+ - !ruby/object:Gem::Dependency
31
+ name: rspec
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: 2.11.0
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 2.11.0
46
+ - !ruby/object:Gem::Dependency
47
+ name: cucumber
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: 1.2.0
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: 1.2.0
62
+ description: Simple wrapper over Android Debug Bridge command-line tool
63
+ email:
64
+ - jeff.morgan@leandog.com
65
+ executables: []
66
+ extensions: []
67
+ extra_rdoc_files: []
68
+ files:
69
+ - .gitignore
70
+ - .rspec
71
+ - .rvmrc
72
+ - ADB.gemspec
73
+ - ChangeLog
74
+ - Gemfile
75
+ - Guardfile
76
+ - LICENSE
77
+ - README.md
78
+ - Rakefile
79
+ - cucumber.yml
80
+ - features/ADB.feature
81
+ - features/step_definitions/adb_steps.rb
82
+ - features/support/ApiDemos.apk
83
+ - features/support/env.rb
84
+ - lib/ADB.rb
85
+ - lib/ADB/errors.rb
86
+ - lib/ADB/version.rb
87
+ - spec/lib/ADB_spec.rb
88
+ - spec/spec_helper.rb
89
+ homepage: http://github.com/cheezy/ADB
90
+ licenses: []
91
+ post_install_message:
92
+ rdoc_options: []
93
+ require_paths:
94
+ - lib
95
+ required_ruby_version: !ruby/object:Gem::Requirement
96
+ none: false
97
+ requirements:
98
+ - - ! '>='
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ segments:
102
+ - 0
103
+ hash: 1303897695555104367
104
+ required_rubygems_version: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ segments:
111
+ - 0
112
+ hash: 1303897695555104367
113
+ requirements: []
114
+ rubyforge_project:
115
+ rubygems_version: 1.8.24
116
+ signing_key:
117
+ specification_version: 3
118
+ summary: Simple wrapper over Android Debug Bridge command-line tool
119
+ test_files:
120
+ - features/ADB.feature
121
+ - features/step_definitions/adb_steps.rb
122
+ - features/support/ApiDemos.apk
123
+ - features/support/env.rb
124
+ - spec/lib/ADB_spec.rb
125
+ - spec/spec_helper.rb