android-adb 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1 @@
1
+ --protected
data/Gemfile CHANGED
@@ -1,9 +1,10 @@
1
1
  source "http://rubygems.org"
2
2
 
3
- gem "POpen4", "~> 0.1.4"
3
+ gem "Platform", ">= 0.4.0"
4
4
 
5
5
  group :development do
6
- gem "bundler", "~> 1.0"
6
+ gem "rake"
7
+ gem "bundler", "~> 1.0.0"
7
8
  gem "jeweler", "~> 1.5.2"
8
- gem "rcov", ">= 0"
9
+ gem "yard", ">= 0.6.8"
9
10
  end
@@ -1,24 +1,22 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- POpen4 (0.1.4)
5
- Platform (>= 0.4.0)
6
- open4
7
4
  Platform (0.4.0)
8
5
  git (1.2.5)
9
6
  jeweler (1.5.2)
10
7
  bundler (~> 1.0.0)
11
8
  git (>= 1.2.5)
12
9
  rake
13
- open4 (1.0.1)
14
10
  rake (0.8.7)
15
- rcov (0.9.9)
11
+ yard (0.6.8)
16
12
 
17
13
  PLATFORMS
18
14
  ruby
15
+ x86-mingw32
19
16
 
20
17
  DEPENDENCIES
21
- POpen4 (~> 0.1.4)
22
- bundler (~> 1.0)
18
+ Platform (>= 0.4.0)
19
+ bundler (~> 1.0.0)
23
20
  jeweler (~> 1.5.2)
24
- rcov
21
+ rake
22
+ yard (>= 0.6.8)
data/LICENSE CHANGED
@@ -1,202 +1,21 @@
1
+ Copyright (c) 2011 Nic Strong <nic.strong@gmail.com>
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1
21
 
2
- Apache License
3
- Version 2.0, January 2004
4
- http://www.apache.org/licenses/
5
-
6
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7
-
8
- 1. Definitions.
9
-
10
- "License" shall mean the terms and conditions for use, reproduction,
11
- and distribution as defined by Sections 1 through 9 of this document.
12
-
13
- "Licensor" shall mean the copyright owner or entity authorized by
14
- the copyright owner that is granting the License.
15
-
16
- "Legal Entity" shall mean the union of the acting entity and all
17
- other entities that control, are controlled by, or are under common
18
- control with that entity. For the purposes of this definition,
19
- "control" means (i) the power, direct or indirect, to cause the
20
- direction or management of such entity, whether by contract or
21
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
22
- outstanding shares, or (iii) beneficial ownership of such entity.
23
-
24
- "You" (or "Your") shall mean an individual or Legal Entity
25
- exercising permissions granted by this License.
26
-
27
- "Source" form shall mean the preferred form for making modifications,
28
- including but not limited to software source code, documentation
29
- source, and configuration files.
30
-
31
- "Object" form shall mean any form resulting from mechanical
32
- transformation or translation of a Source form, including but
33
- not limited to compiled object code, generated documentation,
34
- and conversions to other media types.
35
-
36
- "Work" shall mean the work of authorship, whether in Source or
37
- Object form, made available under the License, as indicated by a
38
- copyright notice that is included in or attached to the work
39
- (an example is provided in the Appendix below).
40
-
41
- "Derivative Works" shall mean any work, whether in Source or Object
42
- form, that is based on (or derived from) the Work and for which the
43
- editorial revisions, annotations, elaborations, or other modifications
44
- represent, as a whole, an original work of authorship. For the purposes
45
- of this License, Derivative Works shall not include works that remain
46
- separable from, or merely link (or bind by name) to the interfaces of,
47
- the Work and Derivative Works thereof.
48
-
49
- "Contribution" shall mean any work of authorship, including
50
- the original version of the Work and any modifications or additions
51
- to that Work or Derivative Works thereof, that is intentionally
52
- submitted to Licensor for inclusion in the Work by the copyright owner
53
- or by an individual or Legal Entity authorized to submit on behalf of
54
- the copyright owner. For the purposes of this definition, "submitted"
55
- means any form of electronic, verbal, or written communication sent
56
- to the Licensor or its representatives, including but not limited to
57
- communication on electronic mailing lists, source code control systems,
58
- and issue tracking systems that are managed by, or on behalf of, the
59
- Licensor for the purpose of discussing and improving the Work, but
60
- excluding communication that is conspicuously marked or otherwise
61
- designated in writing by the copyright owner as "Not a Contribution."
62
-
63
- "Contributor" shall mean Licensor and any individual or Legal Entity
64
- on behalf of whom a Contribution has been received by Licensor and
65
- subsequently incorporated within the Work.
66
-
67
- 2. Grant of Copyright License. Subject to the terms and conditions of
68
- this License, each Contributor hereby grants to You a perpetual,
69
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
70
- copyright license to reproduce, prepare Derivative Works of,
71
- publicly display, publicly perform, sublicense, and distribute the
72
- Work and such Derivative Works in Source or Object form.
73
-
74
- 3. Grant of Patent License. Subject to the terms and conditions of
75
- this License, each Contributor hereby grants to You a perpetual,
76
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
77
- (except as stated in this section) patent license to make, have made,
78
- use, offer to sell, sell, import, and otherwise transfer the Work,
79
- where such license applies only to those patent claims licensable
80
- by such Contributor that are necessarily infringed by their
81
- Contribution(s) alone or by combination of their Contribution(s)
82
- with the Work to which such Contribution(s) was submitted. If You
83
- institute patent litigation against any entity (including a
84
- cross-claim or counterclaim in a lawsuit) alleging that the Work
85
- or a Contribution incorporated within the Work constitutes direct
86
- or contributory patent infringement, then any patent licenses
87
- granted to You under this License for that Work shall terminate
88
- as of the date such litigation is filed.
89
-
90
- 4. Redistribution. You may reproduce and distribute copies of the
91
- Work or Derivative Works thereof in any medium, with or without
92
- modifications, and in Source or Object form, provided that You
93
- meet the following conditions:
94
-
95
- (a) You must give any other recipients of the Work or
96
- Derivative Works a copy of this License; and
97
-
98
- (b) You must cause any modified files to carry prominent notices
99
- stating that You changed the files; and
100
-
101
- (c) You must retain, in the Source form of any Derivative Works
102
- that You distribute, all copyright, patent, trademark, and
103
- attribution notices from the Source form of the Work,
104
- excluding those notices that do not pertain to any part of
105
- the Derivative Works; and
106
-
107
- (d) If the Work includes a "NOTICE" text file as part of its
108
- distribution, then any Derivative Works that You distribute must
109
- include a readable copy of the attribution notices contained
110
- within such NOTICE file, excluding those notices that do not
111
- pertain to any part of the Derivative Works, in at least one
112
- of the following places: within a NOTICE text file distributed
113
- as part of the Derivative Works; within the Source form or
114
- documentation, if provided along with the Derivative Works; or,
115
- within a display generated by the Derivative Works, if and
116
- wherever such third-party notices normally appear. The contents
117
- of the NOTICE file are for informational purposes only and
118
- do not modify the License. You may add Your own attribution
119
- notices within Derivative Works that You distribute, alongside
120
- or as an addendum to the NOTICE text from the Work, provided
121
- that such additional attribution notices cannot be construed
122
- as modifying the License.
123
-
124
- You may add Your own copyright statement to Your modifications and
125
- may provide additional or different license terms and conditions
126
- for use, reproduction, or distribution of Your modifications, or
127
- for any such Derivative Works as a whole, provided Your use,
128
- reproduction, and distribution of the Work otherwise complies with
129
- the conditions stated in this License.
130
-
131
- 5. Submission of Contributions. Unless You explicitly state otherwise,
132
- any Contribution intentionally submitted for inclusion in the Work
133
- by You to the Licensor shall be under the terms and conditions of
134
- this License, without any additional terms or conditions.
135
- Notwithstanding the above, nothing herein shall supersede or modify
136
- the terms of any separate license agreement you may have executed
137
- with Licensor regarding such Contributions.
138
-
139
- 6. Trademarks. This License does not grant permission to use the trade
140
- names, trademarks, service marks, or product names of the Licensor,
141
- except as required for reasonable and customary use in describing the
142
- origin of the Work and reproducing the content of the NOTICE file.
143
-
144
- 7. Disclaimer of Warranty. Unless required by applicable law or
145
- agreed to in writing, Licensor provides the Work (and each
146
- Contributor provides its Contributions) on an "AS IS" BASIS,
147
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
148
- implied, including, without limitation, any warranties or conditions
149
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
150
- PARTICULAR PURPOSE. You are solely responsible for determining the
151
- appropriateness of using or redistributing the Work and assume any
152
- risks associated with Your exercise of permissions under this License.
153
-
154
- 8. Limitation of Liability. In no event and under no legal theory,
155
- whether in tort (including negligence), contract, or otherwise,
156
- unless required by applicable law (such as deliberate and grossly
157
- negligent acts) or agreed to in writing, shall any Contributor be
158
- liable to You for damages, including any direct, indirect, special,
159
- incidental, or consequential damages of any character arising as a
160
- result of this License or out of the use or inability to use the
161
- Work (including but not limited to damages for loss of goodwill,
162
- work stoppage, computer failure or malfunction, or any and all
163
- other commercial damages or losses), even if such Contributor
164
- has been advised of the possibility of such damages.
165
-
166
- 9. Accepting Warranty or Additional Liability. While redistributing
167
- the Work or Derivative Works thereof, You may choose to offer,
168
- and charge a fee for, acceptance of support, warranty, indemnity,
169
- or other liability obligations and/or rights consistent with this
170
- License. However, in accepting such obligations, You may act only
171
- on Your own behalf and on Your sole responsibility, not on behalf
172
- of any other Contributor, and only if You agree to indemnify,
173
- defend, and hold each Contributor harmless for any liability
174
- incurred by, or claims asserted against, such Contributor by reason
175
- of your accepting any such warranty or additional liability.
176
-
177
- END OF TERMS AND CONDITIONS
178
-
179
- APPENDIX: How to apply the Apache License to your work.
180
-
181
- To apply the Apache License to your work, attach the following
182
- boilerplate notice, with the fields enclosed by brackets "[]"
183
- replaced with your own identifying information. (Don't include
184
- the brackets!) The text should be enclosed in the appropriate
185
- comment syntax for the file format. We also recommend that a
186
- file or class name and description of purpose be included on the
187
- same "printed page" as the copyright notice for easier
188
- identification within third-party archives.
189
-
190
- Copyright 2011 Nic Strong (nic.strong@gmail.com)
191
-
192
- Licensed under the Apache License, Version 2.0 (the "License");
193
- you may not use this file except in compliance with the License.
194
- You may obtain a copy of the License at
195
-
196
- http://www.apache.org/licenses/LICENSE-2.0
197
-
198
- Unless required by applicable law or agreed to in writing, software
199
- distributed under the License is distributed on an "AS IS" BASIS,
200
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
201
- See the License for the specific language governing permissions and
202
- limitations under the License.
data/README.md CHANGED
@@ -1,22 +1,12 @@
1
- Android ADB
2
- ===========
3
-
4
- A ruby gem to bind to the various adb commands (Requires the Android SDK to be installed and tools directory to be in the path).
5
-
6
- ### Installation from GitHub sources
7
-
8
- git clone git://github.com/nicstrong/android-adb.git
9
- cd android-adb
10
- bundle install
11
- rake install
12
-
13
- ### Running on Ruby 1.9 under Win32
14
-
15
- The POpen4 gem uses win32/open3 on then win32 platform. This gem does not work with Ruby 1.9.
16
-
17
- To work around this use matschaffer port from github. To install:
18
-
19
- git clone git://github.com/matschaffer/win32-open3-19.git
20
- cd win32-open3-19
21
- gem build win32-open3-19.gemspec
22
- gem intall win32-open3-19-0.0.1.gem
1
+ Android ADB
2
+ ===========
3
+
4
+ A ruby gem to bind to the various adb commands (Requires the Android SDK to be installed and tools directory to be in the path).
5
+
6
+ ### Installation from GitHub sources
7
+
8
+ git clone git://github.com/nicstrong/android-adb.git
9
+ cd android-adb
10
+ bundle install
11
+ rake install
12
+
data/Rakefile CHANGED
@@ -33,21 +33,18 @@ Rake::TestTask.new(:test) do |test|
33
33
  test.verbose = true
34
34
  end
35
35
 
36
- require 'rcov/rcovtask'
37
- Rcov::RcovTask.new do |test|
38
- test.libs << 'test'
39
- test.pattern = 'test/**/test_*.rb'
40
- test.verbose = true
36
+ #require 'rcov/rcovtask'
37
+ #Rcov::RcovTask.new do |test|
38
+ # test.libs << 'test'
39
+ # test.pattern = 'test/**/test_*.rb'
40
+ # test.verbose = true
41
+ #end
42
+
43
+ require 'yard'
44
+ YARD::Rake::YardocTask.new do |t|
45
+ t.files = ['lib/**/*.rb']
41
46
  end
42
47
 
43
48
  task :default => :test
44
49
 
45
- require 'rake/rdoctask'
46
- Rake::RDocTask.new do |rdoc|
47
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
48
50
 
49
- rdoc.rdoc_dir = 'rdoc'
50
- rdoc.title = "android-adb #{version}"
51
- rdoc.rdoc_files.include('README*')
52
- rdoc.rdoc_files.include('lib/**/*.rb')
53
- end
@@ -1,61 +1,70 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
- # -*- encoding: utf-8 -*-
5
-
6
- Gem::Specification.new do |s|
7
- s.name = %q{android-adb}
8
- s.version = "0.0.5"
9
-
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Nic Strong"]
12
- s.date = %q{2011-04-28}
13
- s.email = %q{nic.strong@gmail.com}
14
- s.extra_rdoc_files = [
15
- "LICENSE",
16
- "README.md"
17
- ]
18
- s.files = [
19
- "Gemfile",
20
- "Gemfile.lock",
21
- "LICENSE",
22
- "README.md",
23
- "Rakefile",
24
- "android-adb.gemspec",
25
- "examples/listpackages.rb",
26
- "examples/showcmds.rb",
27
- "lib/android-adb.rb",
28
- "lib/android-adb/version.rb"
29
- ]
30
- s.homepage = %q{http://github.com/nicstrong/android-adb}
31
- s.licenses = ["Apache 2.0"]
32
- s.require_paths = ["lib"]
33
- s.rubygems_version = %q{1.7.2}
34
- s.summary = %q{Ruby bindings for the Android SDK adb command.}
35
- s.test_files = [
36
- "examples/listpackages.rb",
37
- "examples/showcmds.rb"
38
- ]
39
-
40
- if s.respond_to? :specification_version then
41
- s.specification_version = 3
42
-
43
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
44
- s.add_runtime_dependency(%q<POpen4>, ["~> 0.1.4"])
45
- s.add_development_dependency(%q<bundler>, ["~> 1.0"])
46
- s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
47
- s.add_development_dependency(%q<rcov>, [">= 0"])
48
- else
49
- s.add_dependency(%q<POpen4>, ["~> 0.1.4"])
50
- s.add_dependency(%q<bundler>, ["~> 1.0"])
51
- s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
52
- s.add_dependency(%q<rcov>, [">= 0"])
53
- end
54
- else
55
- s.add_dependency(%q<POpen4>, ["~> 0.1.4"])
56
- s.add_dependency(%q<bundler>, ["~> 1.0"])
57
- s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
58
- s.add_dependency(%q<rcov>, [">= 0"])
59
- end
60
- end
61
-
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{android-adb}
8
+ s.version = "0.0.6"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Nic Strong"]
12
+ s.date = %q{2011-05-03}
13
+ s.email = %q{nic.strong@gmail.com}
14
+ s.extra_rdoc_files = [
15
+ "LICENSE",
16
+ "README.md"
17
+ ]
18
+ s.files = [
19
+ ".yardopts",
20
+ "Gemfile",
21
+ "Gemfile.lock",
22
+ "LICENSE",
23
+ "README.md",
24
+ "Rakefile",
25
+ "android-adb.gemspec",
26
+ "examples/listdevices.rb",
27
+ "examples/listpackages.rb",
28
+ "examples/showcmds.rb",
29
+ "lib/android-adb.rb",
30
+ "lib/android-adb/Adb.rb",
31
+ "lib/android-adb/Device.rb",
32
+ "lib/android-adb/Package.rb",
33
+ "lib/android-adb/version.rb"
34
+ ]
35
+ s.homepage = %q{http://github.com/nicstrong/android-adb}
36
+ s.licenses = ["Apache 2.0"]
37
+ s.require_paths = ["lib"]
38
+ s.rubygems_version = %q{1.5.2}
39
+ s.summary = %q{Ruby bindings for the Android SDK adb command.}
40
+ s.test_files = [
41
+ "examples/listdevices.rb",
42
+ "examples/listpackages.rb",
43
+ "examples/showcmds.rb"
44
+ ]
45
+
46
+ if s.respond_to? :specification_version then
47
+ s.specification_version = 3
48
+
49
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
50
+ s.add_runtime_dependency(%q<Platform>, [">= 0.4.0"])
51
+ s.add_development_dependency(%q<rake>, [">= 0"])
52
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
53
+ s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
54
+ s.add_development_dependency(%q<yard>, [">= 0.6.8"])
55
+ else
56
+ s.add_dependency(%q<Platform>, [">= 0.4.0"])
57
+ s.add_dependency(%q<rake>, [">= 0"])
58
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
59
+ s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
60
+ s.add_dependency(%q<yard>, [">= 0.6.8"])
61
+ end
62
+ else
63
+ s.add_dependency(%q<Platform>, [">= 0.4.0"])
64
+ s.add_dependency(%q<rake>, [">= 0"])
65
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
66
+ s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
67
+ s.add_dependency(%q<yard>, [">= 0.6.8"])
68
+ end
69
+ end
70
+
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env ruby -wKU
2
+
3
+ require 'rubygems'
4
+ require "pp"
5
+
6
+ require File.expand_path('../lib/android-adb/Adb', File.dirname(__FILE__))
7
+ require File.expand_path('../lib/android-adb/Device', File.dirname(__FILE__))
8
+
9
+ adb = AndroidAdb::Adb.new()
10
+ puts "Devices:"
11
+ pp adb.get_devices
@@ -3,8 +3,9 @@
3
3
  require 'rubygems'
4
4
  require "pp"
5
5
 
6
- require File.expand_path('../lib/android-adb', File.dirname(__FILE__))
6
+ require File.expand_path('../lib/android-adb/Adb', File.dirname(__FILE__))
7
+ require File.expand_path('../lib/android-adb/Package', File.dirname(__FILE__))
7
8
 
8
- adb = AndroidAdb::Adb.new()
9
+ adb = AndroidAdb::Adb.new({:show_stderr => true})
9
10
  puts "Packages:"
10
11
  pp adb.get_packages
@@ -1,17 +1,18 @@
1
1
  #!/usr/bin/env ruby -wKU
2
2
 
3
- require File.expand_path('../lib/android-adb', File.dirname(__FILE__))
3
+ require File.expand_path('../lib/android-adb/Adb', File.dirname(__FILE__))
4
4
 
5
5
  adb = AndroidAdb::Adb.new({:dry_run => true})
6
6
  puts "Packages:"
7
7
  adb.get_packages
8
+ adb.get_packages({:serial => "1234"})
8
9
 
9
10
  puts "Devices:"
10
11
  adb.get_devices
11
12
 
12
13
  puts "Uninstall:"
13
- adb.uninstall("com.example.package")
14
- adb.uninstall("com.example.package", {:forwardlock => true})
15
- adb.uninstall("com.example.package", {:reinstall => true})
16
- adb.uninstall("com.example.package", {:sdcard => true})
17
- adb.uninstall("com.example.package", {:forwardlock => true, :reinstall => true, :sdcard => true})
14
+ adb.install("com.example.package")
15
+ adb.install("com.example.package", {:forwardlock => true}, {:serial => "abcd"})
16
+ adb.install("com.example.package", {:reinstall => true})
17
+ adb.install("com.example.package", {:sdcard => true})
18
+ adb.install("com.example.package", {:forwardlock => true, :reinstall => true, :sdcard => true})
@@ -1,91 +1,13 @@
1
- require 'rubygems'
2
- require 'POpen4'
1
+ # Author:: Nic Strong (mailto:nic.strong@gmail.com)
2
+ # Copyright:: Copyright (c) 2011 Nic Strong
3
+ # License:: MIT (See LICENSE)
3
4
 
4
- module AndroidAdb
5
-
6
- class Adb
7
- attr_accessor :adb_path, :show_stderr, :dry_run
8
-
9
- def initialize(opts = {})
10
- @show_stderr = opts[:show_stderr] || false
11
- @dry_run = opts[:dry_run] || false
12
- @adb_path = opts[:adb_path] || Adb.find_adb
13
- end # def
14
-
15
- def get_devices
16
- devices = []
17
- run_adb("devices") do |pout|
18
- pout.each do |line|
19
- line = line.strip
20
- if (!line.empty? && line !~ /^List of devices/)
21
- parts = line.split
22
- devices << {:name => parts[0],
23
- :serial => parts[1]}
24
- end
25
- end
26
- end
27
- return devices
28
- end
29
-
30
- def get_packages
31
- packages = []
32
- run_adb_shell("pm list packages -f") do |pout|
33
- pout.each do |line|
34
- parts = line.split(":")
35
- if (parts.length > 1)
36
- info = parts[1].strip.split("=")
37
- packages << {:apk => info[0], :name => info[1]}
38
- end
39
- end
40
- end
41
- return packages
42
- end # def
5
+ require 'android-adb/Device'
6
+ require 'android-adb/Package'
7
+ require 'android-adb/Adb'
43
8
 
44
- def uninstall(package, opts = {})
45
- opt_arg = ""
46
- opt_arg += " -l" if opts[:forwardlock]
47
- opt_arg += " -r" if opts[:reinstall]
48
- opt_arg += " -s" if opts[:sdcard]
49
- run_adb("uninstall#{opt_arg} #{package}")
50
- end
51
-
52
- def run_adb(args, &block)
53
- path = "#{@adb_path} #{args}"
54
- run(path, &block)
55
- end # def
56
-
57
- def run_adb_shell(args, &block)
58
- path = "#{@adb_path} shell #{args}"
59
- run(path, &block)
60
- end
61
-
62
- private
63
- def run(path, &block)
64
- if @dry_run
65
- puts "[#{path}]"
66
- return
67
- end
68
- POpen4::popen4(path) do |pout, perr, pin|
69
- if (@show_stderr)
70
- perr.each do |line|
71
- puts "{e}" + line
72
- end
73
- end
74
- yield pout
75
- end
76
- end # def
77
-
78
- def self.find_adb
79
- begin
80
- which_adb = `which adb`.strip
81
- return which_adb if !which_adb.nil? && !which_adb.empty?
82
- rescue
83
- end
84
- android_home = ENV['ANDROID_HOME']
85
- return File.join(android_homes, "platform-tool/adb") if !android_home.nil? && !android_home.empty
86
- return "adb"
87
- end
88
- end # class
9
+ module AndroidAdb
10
+ LIBRARY_PATH = File.join(File.dirname(__FILE__), 'android-adb')
89
11
  end # module
90
12
 
91
13
 
@@ -0,0 +1,142 @@
1
+ # Author:: Nic Strong (mailto:nic.strong@gmail.com)
2
+ # Copyright:: Copyright (c) 2011 Nic Strong
3
+ # License:: MIT (See LICENSE)
4
+
5
+ require 'Open3'
6
+ require 'Platform'
7
+
8
+ module AndroidAdb
9
+
10
+ class Adb
11
+ attr_accessor :adb_path, :show_stderr, :dry_run, :last_command
12
+
13
+ # Contructs an Adb object for issuing commands to the connected device or emulator.
14
+ #
15
+ # If the adb path is not specified in the +opts+ hash it is determined in the following order:
16
+ # 1. Try and use the unix which command to locate the adb binary.
17
+ # 2. Use the ANDROID_HOME environment variable.
18
+ # 3. Default to adb (no path specified).
19
+ #
20
+ # @param [Hash] opts The options to create the Adb object with.
21
+ # @option opts [Boolean] :show_stderr Used for diagnosing issues, it will dump the stderr of the *adb* command being processed.
22
+ # @option opts [Boolean] :dry_run Does not execute the *adb* command but will output the command that would be run.
23
+ # @option opts [Boolean] :adb_path Manually set the path to the adb binary.
24
+ def initialize(opts = {})
25
+ @show_stderr = opts[:show_stderr] || false
26
+ @dry_run = opts[:dry_run] || false
27
+ @adb_path = opts[:adb_path] || Adb.find_adb
28
+ end
29
+
30
+ # Returns a list of all connected devices. The collection is returned as a hash
31
+ # containing the device name <tt>:name</tt> and the serial <tt>:serial</tt>.
32
+ # @return [Array<Device>] THe list of connected devices/emulators.
33
+ def get_devices
34
+ devices = []
35
+ run_adb("devices") do |pout|
36
+ pout.each do |line|
37
+ line = line.strip
38
+ if (!line.empty? && line !~ /^List of devices/)
39
+ parts = line.split
40
+ device = AndroidAdb::Device.new(parts[0], parts[1])
41
+ devices << device
42
+ end
43
+ end
44
+ end
45
+ return devices
46
+ end
47
+
48
+ # Returns a list of all installed packages on the device.
49
+ # @param [Hash] adb_opts Options for the adb command (@see #run_adb)
50
+ # @return [Hash] THe list of installed packages. The hash returned contains the apk file name <tt>:apk</tt> and the name of the package <tt>:name</tt>.
51
+ def get_packages(adb_opts = {})
52
+ packages = []
53
+ run_adb_shell("pm list packages -f", adb_opts) do |pout|
54
+ pout.each do |line|
55
+ parts = line.split(":")
56
+ if (parts.length > 1)
57
+ info = parts[1].strip.split("=")
58
+ package = AndroidAdb::Package.new(info[1], info[0]);
59
+ packages << package;
60
+ end
61
+ end
62
+ end
63
+ return packages
64
+ end
65
+
66
+ # Installs a package from the APK file <tt>package</tt> onto the device/emulator.
67
+ # @param [String] package The APK package file
68
+ # @param [Hash] opts The options used to install the package.
69
+ # @option opts [Boolean] :forwardlock Forward lock the package being installed.
70
+ # @option opts [Boolean] :reinstall Reinstall the package, keeping existing data.
71
+ # @option opts [Boolean] :sdcard Install the package to the SD card instead of internal storage.
72
+ # @param [Hash] adb_opts Options for the adb command (@see #run_adb)
73
+ def install(package, opts = {}, adb_opts = {})
74
+ opt_arg = ""
75
+ opt_arg += " -l" if opts[:forwardlock]
76
+ opt_arg += " -r" if opts[:reinstall]
77
+ opt_arg += " -s" if opts[:sdcard]
78
+ run_adb("install#{opt_arg} #{package}", adb_opts)
79
+ end
80
+
81
+ # Run the adb command with the give <tt>args</tt>.
82
+ # @param [String] args Arguments to the adb command.
83
+ # @param [Hash] adb_opts Options for the adb command.
84
+ # @option adb_opts [String] :serial directs command to the USB device or emulator with the given serial number.
85
+ # @option adb_opts [Boolean] :emulator Directs command to the only running emulator. Returns an error if more than one emulator is running.
86
+ # @option adb_opts [Boolean] :device Directs command to the only connected USB device. Returns an error if more than one USB device connected.
87
+ # @yield [stdout] The standard output of the adb command.
88
+ def run_adb(args, adb_opts = {}, &block) # :yields: stdout
89
+ adb_arg = ""
90
+ adb_arg += " -s #{adb_opts[:serial]}" if !adb_opts[:serial].nil? && !adb_opts[:serial].empty?
91
+ adb_arg += " -e #{adb_opts[:emulator]}" if adb_opts[:emulator]
92
+ adb_arg += " -d #{adb_opts[:device]}" if adb_opts[:emulator]
93
+ path = "#{@adb_path}#{adb_arg} #{args}"
94
+ last_command = path
95
+ run(path, &block)
96
+ end
97
+
98
+ # Run the device shell command given by <tt>args</tt>.
99
+ # @param [String] args Arguments to the adb shell command.
100
+ # @param [Hash] adb_opts Options for the adb command (@see run_adb).
101
+ # @yield [stdout] The standard output of the adb command.
102
+ def run_adb_shell(args, adb_args = {}, &block) # :yields: stdout
103
+ args = "shell #{args}"
104
+ run_adb(args, adb_args, &block)
105
+ end
106
+
107
+ private
108
+ def run(path, &block)
109
+ if @dry_run
110
+ puts "[#{path}]"
111
+ return
112
+ end
113
+ Open3::popen3(path) do |pin, pout, perr|
114
+ if (@show_stderr)
115
+ perr.each do |line|
116
+ puts "{e}" + line
117
+ end
118
+ end
119
+ yield pout
120
+ end
121
+ end
122
+
123
+ def self.find_adb
124
+ begin
125
+ which_adb = `which adb`.strip
126
+ return which_adb if !which_adb.nil? && !which_adb.empty?
127
+ rescue
128
+ end
129
+ android_home = ENV['ANDROID_HOME']
130
+ if !android_home.nil? && !android_home.empty?
131
+ adb_cmd = File.join(android_home, "platform-tools", "adb")
132
+ if (Platform::OS == :win32)
133
+ adb_cmd += ".exe"
134
+ end
135
+ return adb_cmd
136
+ end
137
+ return "adb"
138
+ end
139
+ end # class
140
+ end # module
141
+
142
+
@@ -0,0 +1,20 @@
1
+ # Author:: Nic Strong (mailto:nic.strong@gmail.com)
2
+ # Copyright:: Copyright (c) 2011 Nic Strong
3
+ # License:: MIT (See LICENSE)
4
+
5
+ module AndroidAdb
6
+ class Device
7
+ attr_accessor :name, :serial
8
+
9
+ # Contructs an Device object.
10
+ #
11
+ # @param [String] name The name of the device/emulator.
12
+ # @param [String] serial The serial number of the device/emulator.
13
+ def initialize(name, serial)
14
+ @name = name
15
+ @serial = serial
16
+ end
17
+ end # class
18
+ end # module
19
+
20
+
@@ -0,0 +1,20 @@
1
+ # Author:: Nic Strong (mailto:nic.strong@gmail.com)
2
+ # Copyright:: Copyright (c) 2011 Nic Strong
3
+ # License:: MIT (See LICENSE)
4
+
5
+ module AndroidAdb
6
+ class Package
7
+ attr_accessor :name, :apk
8
+
9
+ # Contructs an Package object.
10
+ #
11
+ # @param [String] name The name of the package.
12
+ # @param [String] apk The path of the installed apk file.
13
+ def initialize(name, apk)
14
+ @name = name
15
+ @apk = apk
16
+ end
17
+ end # class
18
+ end # module
19
+
20
+
@@ -2,7 +2,7 @@ module AndroidAdb
2
2
  module Version
3
3
  MAJOR = 0
4
4
  MINOR = 0
5
- PATCH = 5
5
+ PATCH = 6
6
6
  BUILD = nil
7
7
 
8
8
  STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.')
metadata CHANGED
@@ -1,136 +1,125 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: android-adb
3
- version: !ruby/object:Gem::Version
4
- hash: 21
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.6
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 0
9
- - 5
10
- version: 0.0.5
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Nic Strong
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-04-28 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
21
- version_requirements: &id001 !ruby/object:Gem::Requirement
12
+ date: 2011-05-03 00:00:00.000000000 +12:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: Platform
17
+ requirement: &22603896 !ruby/object:Gem::Requirement
22
18
  none: false
23
- requirements:
24
- - - ~>
25
- - !ruby/object:Gem::Version
26
- hash: 19
27
- segments:
28
- - 0
29
- - 1
30
- - 4
31
- version: 0.1.4
32
- name: POpen4
33
- prerelease: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: 0.4.0
34
23
  type: :runtime
35
- requirement: *id001
36
- - !ruby/object:Gem::Dependency
37
- version_requirements: &id002 !ruby/object:Gem::Requirement
24
+ prerelease: false
25
+ version_requirements: *22603896
26
+ - !ruby/object:Gem::Dependency
27
+ name: rake
28
+ requirement: &22603020 !ruby/object:Gem::Requirement
38
29
  none: false
39
- requirements:
40
- - - ~>
41
- - !ruby/object:Gem::Version
42
- hash: 15
43
- segments:
44
- - 1
45
- - 0
46
- version: "1.0"
47
- name: bundler
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
48
35
  prerelease: false
36
+ version_requirements: *22603020
37
+ - !ruby/object:Gem::Dependency
38
+ name: bundler
39
+ requirement: &22602468 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ~>
43
+ - !ruby/object:Gem::Version
44
+ version: 1.0.0
49
45
  type: :development
50
- requirement: *id002
51
- - !ruby/object:Gem::Dependency
52
- version_requirements: &id003 !ruby/object:Gem::Requirement
46
+ prerelease: false
47
+ version_requirements: *22602468
48
+ - !ruby/object:Gem::Dependency
49
+ name: jeweler
50
+ requirement: &22601544 !ruby/object:Gem::Requirement
53
51
  none: false
54
- requirements:
52
+ requirements:
55
53
  - - ~>
56
- - !ruby/object:Gem::Version
57
- hash: 7
58
- segments:
59
- - 1
60
- - 5
61
- - 2
54
+ - !ruby/object:Gem::Version
62
55
  version: 1.5.2
63
- name: jeweler
64
- prerelease: false
65
56
  type: :development
66
- requirement: *id003
67
- - !ruby/object:Gem::Dependency
68
- version_requirements: &id004 !ruby/object:Gem::Requirement
69
- none: false
70
- requirements:
71
- - - ">="
72
- - !ruby/object:Gem::Version
73
- hash: 3
74
- segments:
75
- - 0
76
- version: "0"
77
- name: rcov
78
57
  prerelease: false
58
+ version_requirements: *22601544
59
+ - !ruby/object:Gem::Dependency
60
+ name: yard
61
+ requirement: &22600884 !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ! '>='
65
+ - !ruby/object:Gem::Version
66
+ version: 0.6.8
79
67
  type: :development
80
- requirement: *id004
68
+ prerelease: false
69
+ version_requirements: *22600884
81
70
  description:
82
71
  email: nic.strong@gmail.com
83
72
  executables: []
84
-
85
73
  extensions: []
86
-
87
- extra_rdoc_files:
74
+ extra_rdoc_files:
88
75
  - LICENSE
89
76
  - README.md
90
- files:
77
+ files:
78
+ - .yardopts
91
79
  - Gemfile
92
80
  - Gemfile.lock
93
81
  - LICENSE
94
82
  - README.md
95
83
  - Rakefile
96
84
  - android-adb.gemspec
85
+ - examples/listdevices.rb
97
86
  - examples/listpackages.rb
98
87
  - examples/showcmds.rb
99
88
  - lib/android-adb.rb
89
+ - lib/android-adb/Adb.rb
90
+ - lib/android-adb/Device.rb
91
+ - lib/android-adb/Package.rb
100
92
  - lib/android-adb/version.rb
93
+ has_rdoc: true
101
94
  homepage: http://github.com/nicstrong/android-adb
102
- licenses:
95
+ licenses:
103
96
  - Apache 2.0
104
97
  post_install_message:
105
98
  rdoc_options: []
106
-
107
- require_paths:
99
+ require_paths:
108
100
  - lib
109
- required_ruby_version: !ruby/object:Gem::Requirement
101
+ required_ruby_version: !ruby/object:Gem::Requirement
110
102
  none: false
111
- requirements:
112
- - - ">="
113
- - !ruby/object:Gem::Version
114
- hash: 3
115
- segments:
103
+ requirements:
104
+ - - ! '>='
105
+ - !ruby/object:Gem::Version
106
+ version: '0'
107
+ segments:
116
108
  - 0
117
- version: "0"
118
- required_rubygems_version: !ruby/object:Gem::Requirement
109
+ hash: 15408915
110
+ required_rubygems_version: !ruby/object:Gem::Requirement
119
111
  none: false
120
- requirements:
121
- - - ">="
122
- - !ruby/object:Gem::Version
123
- hash: 3
124
- segments:
125
- - 0
126
- version: "0"
112
+ requirements:
113
+ - - ! '>='
114
+ - !ruby/object:Gem::Version
115
+ version: '0'
127
116
  requirements: []
128
-
129
117
  rubyforge_project:
130
- rubygems_version: 1.7.2
118
+ rubygems_version: 1.5.2
131
119
  signing_key:
132
120
  specification_version: 3
133
121
  summary: Ruby bindings for the Android SDK adb command.
134
- test_files:
122
+ test_files:
123
+ - examples/listdevices.rb
135
124
  - examples/listpackages.rb
136
125
  - examples/showcmds.rb