screengrab 0.3.2 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +4 -2
- data/bin/screengrab +2 -61
- data/lib/screengrab/commands_generator.rb +62 -0
- data/lib/screengrab/runner.rb +34 -19
- data/version.properties +2 -2
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 743b0f8af7f0ec6de3aa80d03aa61847db7c8bfb
|
4
|
+
data.tar.gz: 7b7959a8b42f88eca5b1dc2885d78d59f5e95946
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 24dfcd3e54c91a52a1acf5bf863e1117300128e149ce1999855d504fb20c39226a5e89a31725c6692742b6ba9dfe21ca0ada6004ade40ceae628efefbc178a93
|
7
|
+
data.tar.gz: 7e98d055a361f43556567b0d4979ef0aab7eceff03d423a174c07bcb00fe85470a8c0acc0b37b915257fe69e379c7f65b3b3c44768fecc2436588fef658c35f2
|
data/README.md
CHANGED
@@ -35,6 +35,8 @@ screengrab
|
|
35
35
|
|
36
36
|
###### Automated localized screenshots of your Android app on every device
|
37
37
|
|
38
|
+
`screengrab` generates localized screenshots of your Android app for different device types and languages for Google Play and can be uploaded using ([`supply`](https://github.com/fastlane/fastlane/tree/master/supply).
|
39
|
+
|
38
40
|
<img src="assets/running-screengrab.gif" width="640">
|
39
41
|
|
40
42
|
### Why should I automate this process?
|
@@ -53,7 +55,7 @@ sudo gem install screengrab
|
|
53
55
|
|
54
56
|
##### Gradle dependency
|
55
57
|
```java
|
56
|
-
androidTestCompile 'tools.fastlane:screengrab:0.3.
|
58
|
+
androidTestCompile 'tools.fastlane:screengrab:0.3.2'
|
57
59
|
```
|
58
60
|
|
59
61
|
##### Configuring your Manifest Permissions
|
@@ -152,7 +154,7 @@ If you're having trouble getting your device unlocked and the screen activated t
|
|
152
154
|
|
153
155
|
## [`fastlane`](https://fastlane.tools) Toolchain
|
154
156
|
|
155
|
-
- [`fastlane`](https://fastlane.tools):
|
157
|
+
- [`fastlane`](https://fastlane.tools): The easiest way to automate building and releasing your iOS and Android apps
|
156
158
|
- [`supply`](https://github.com/fastlane/fastlane/tree/master/supply): Upload screenshots, metadata and your app to the Play Store
|
157
159
|
|
158
160
|
You can find all the tools on [fastlane.tools](https://fastlane.tools).
|
data/bin/screengrab
CHANGED
@@ -1,65 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
3
2
|
$:.push File.expand_path("../../lib", __FILE__)
|
4
3
|
|
5
4
|
require 'screengrab'
|
6
|
-
require '
|
7
|
-
|
8
|
-
HighLine.track_eof = false
|
9
|
-
|
10
|
-
class ScreengrabApplication
|
11
|
-
include Commander::Methods
|
12
|
-
|
13
|
-
def run
|
14
|
-
program :version, Screengrab::VERSION
|
15
|
-
program :description, 'CLI for \'screengrab\' - Automate taking localized screenshots of your Android app on emulators or real devices'
|
16
|
-
program :help, 'Authors', 'Andrea Falcone <afalcone@twitter.com>, Michael Furtak <mfurtak@twitter.com>'
|
17
|
-
program :help, 'Website', 'https://fastlane.tools'
|
18
|
-
program :help, 'GitHub', 'https://github.com/fastlane/screengrab'
|
19
|
-
program :help_formatter, :compact
|
20
|
-
|
21
|
-
global_option('--verbose', 'Shows a more verbose output') { $verbose = true }
|
22
|
-
|
23
|
-
always_trace!
|
24
|
-
|
25
|
-
FastlaneCore::CommanderGenerator.new.generate(Screengrab::Options.available_options)
|
26
|
-
|
27
|
-
command :run do |c|
|
28
|
-
c.syntax = 'screengrab'
|
29
|
-
c.description = 'Take new screenshots based on the screengrabfile.'
|
30
|
-
|
31
|
-
c.action do |args, options|
|
32
|
-
o = options.__hash__.dup
|
33
|
-
o.delete(:verbose)
|
34
|
-
Screengrab.config = FastlaneCore::Configuration.create(Screengrab::Options.available_options, o)
|
35
|
-
Screengrab.android_environment = Screengrab::AndroidEnvironment.new(Screengrab.config[:android_home],
|
36
|
-
Screengrab.config[:build_tools_version])
|
37
|
-
|
38
|
-
Screengrab::DependencyChecker.check(Screengrab.android_environment)
|
39
|
-
Screengrab::Runner.new.run
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
command :init do |c|
|
44
|
-
c.syntax = 'screengrab init'
|
45
|
-
c.description = "Creates a new Screengrabfile in the current directory"
|
46
|
-
|
47
|
-
c.action do |args, options|
|
48
|
-
require 'screengrab/setup'
|
49
|
-
path = (Screengrab::Helper.fastlane_enabled? ? './fastlane' : '.')
|
50
|
-
Screengrab::Setup.create(path)
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
default_command :run
|
55
|
-
|
56
|
-
run!
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
begin
|
61
|
-
FastlaneCore::UpdateChecker.start_looking_for_update('screengrab')
|
62
|
-
ScreengrabApplication.new.run
|
63
|
-
ensure
|
64
|
-
FastlaneCore::UpdateChecker.show_update_status('screengrab', Screengrab::VERSION)
|
65
|
-
end
|
5
|
+
require 'screengrab/commands_generator'
|
6
|
+
Screengrab::CommandsGenerator.start
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'commander'
|
2
|
+
|
3
|
+
HighLine.track_eof = false
|
4
|
+
|
5
|
+
module Screengrab
|
6
|
+
class CommandsGenerator
|
7
|
+
include Commander::Methods
|
8
|
+
|
9
|
+
def self.start
|
10
|
+
FastlaneCore::UpdateChecker.start_looking_for_update('screengrab')
|
11
|
+
self.new.run
|
12
|
+
ensure
|
13
|
+
FastlaneCore::UpdateChecker.show_update_status('screengrab', Screengrab::VERSION)
|
14
|
+
end
|
15
|
+
|
16
|
+
def run
|
17
|
+
program :version, Screengrab::VERSION
|
18
|
+
program :description, 'CLI for \'screengrab\' - Automate taking localized screenshots of your Android app on emulators or real devices'
|
19
|
+
program :help, 'Authors', 'Andrea Falcone <afalcone@twitter.com>, Michael Furtak <mfurtak@twitter.com>'
|
20
|
+
program :help, 'Website', 'https://fastlane.tools'
|
21
|
+
program :help, 'GitHub', 'https://github.com/fastlane/screengrab'
|
22
|
+
program :help_formatter, :compact
|
23
|
+
|
24
|
+
global_option('--verbose', 'Shows a more verbose output') { $verbose = true }
|
25
|
+
|
26
|
+
always_trace!
|
27
|
+
|
28
|
+
FastlaneCore::CommanderGenerator.new.generate(Screengrab::Options.available_options)
|
29
|
+
|
30
|
+
command :run do |c|
|
31
|
+
c.syntax = 'screengrab'
|
32
|
+
c.description = 'Take new screenshots based on the screengrabfile.'
|
33
|
+
|
34
|
+
c.action do |args, options|
|
35
|
+
o = options.__hash__.dup
|
36
|
+
o.delete(:verbose)
|
37
|
+
Screengrab.config = FastlaneCore::Configuration.create(Screengrab::Options.available_options, o)
|
38
|
+
Screengrab.android_environment = Screengrab::AndroidEnvironment.new(Screengrab.config[:android_home],
|
39
|
+
Screengrab.config[:build_tools_version])
|
40
|
+
|
41
|
+
Screengrab::DependencyChecker.check(Screengrab.android_environment)
|
42
|
+
Screengrab::Runner.new.run
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
command :init do |c|
|
47
|
+
c.syntax = 'screengrab init'
|
48
|
+
c.description = "Creates a new Screengrabfile in the current directory"
|
49
|
+
|
50
|
+
c.action do |args, options|
|
51
|
+
require 'screengrab/setup'
|
52
|
+
path = (Screengrab::Helper.fastlane_enabled? ? './fastlane' : '.')
|
53
|
+
Screengrab::Setup.create(path)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
default_command :run
|
58
|
+
|
59
|
+
run!
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
data/lib/screengrab/runner.rb
CHANGED
@@ -230,20 +230,24 @@ module Screengrab
|
|
230
230
|
|
231
231
|
UI.verbose("Starting screenshot count is: #{starting_screenshot_count}")
|
232
232
|
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
233
|
+
# Make a temp directory into which to pull the screenshots before they are moved to their final location.
|
234
|
+
# This makes directory cleanup easier, as the temp directory will be removed when the block completes.
|
235
|
+
Dir.mktmpdir do |tempdir|
|
236
|
+
device_screenshots_paths.each do |device_path|
|
237
|
+
if_device_path_exists(device_serial, device_path) do |path|
|
238
|
+
@executor.execute(command: "adb -s #{device_serial} pull #{path} #{tempdir}",
|
239
|
+
print_all: false,
|
240
|
+
print_command: true)
|
241
|
+
end
|
238
242
|
end
|
239
|
-
end
|
240
243
|
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
244
|
+
# The SDK can't 100% determine what kind of device it is running on relative to the categories that
|
245
|
+
# supply and Google Play care about (phone, 7" tablet, TV, etc.).
|
246
|
+
#
|
247
|
+
# Therefore, we'll move the pulled screenshots from their genericly named folder to one named by the
|
248
|
+
# user provided device_type option value to match the directory structure that supply expects
|
249
|
+
move_pulled_screenshots(tempdir, device_type_dir_name)
|
250
|
+
end
|
247
251
|
|
248
252
|
ending_screenshot_count = screenshot_file_names_in(@config[:output_directory], device_type_dir_name).length
|
249
253
|
|
@@ -259,23 +263,34 @@ module Screengrab
|
|
259
263
|
ending_screenshot_count - starting_screenshot_count
|
260
264
|
end
|
261
265
|
|
262
|
-
def move_pulled_screenshots(device_type_dir_name)
|
266
|
+
def move_pulled_screenshots(pull_dir, device_type_dir_name)
|
263
267
|
# Glob pattern that finds the pulled screenshots directory for each locale
|
264
|
-
#
|
265
|
-
|
268
|
+
# Possible matches:
|
269
|
+
# [pull_dir]/en-US/images/screenshots
|
270
|
+
# [pull_dir]/screengrab/en-US/images/screenshots
|
271
|
+
screenshots_dir_pattern = File.join(pull_dir, '**', "screenshots")
|
266
272
|
|
267
273
|
Dir.glob(screenshots_dir_pattern, File::FNM_CASEFOLD).each do |screenshots_dir|
|
268
274
|
src_screenshots = Dir.glob(File.join(screenshots_dir, '*.png'), File::FNM_CASEFOLD)
|
269
275
|
|
270
|
-
#
|
271
|
-
# the
|
276
|
+
# The :output_directory is the final location for the screenshots, so we begin by replacing
|
277
|
+
# the temp directory portion of the path, with the output directory
|
278
|
+
dest_dir = screenshots_dir.gsub(pull_dir, @config[:output_directory])
|
279
|
+
|
280
|
+
# Different versions of adb are inconsistent about whether they will pull down the containing
|
281
|
+
# directory for the screenshots, so we'll try to remove that path from the directory name when
|
282
|
+
# creating the destination path.
|
283
|
+
# See: https://github.com/fastlane/fastlane/pull/4915#issuecomment-236368649
|
284
|
+
dest_dir = dest_dir.gsub('screengrab/', '')
|
285
|
+
|
286
|
+
# We then replace the last segment of the screenshots directory path with the device_type
|
287
|
+
# specific name, as expected by supply
|
272
288
|
#
|
273
289
|
# (Moved to: fastlane/metadata/android/en-US/images/phoneScreenshots)
|
274
|
-
dest_dir = File.join(File.dirname(
|
290
|
+
dest_dir = File.join(File.dirname(dest_dir), device_type_dir_name)
|
275
291
|
|
276
292
|
FileUtils.mkdir_p(dest_dir)
|
277
293
|
FileUtils.cp_r(src_screenshots, dest_dir)
|
278
|
-
FileUtils.rm_r(screenshots_dir)
|
279
294
|
UI.success "Screenshots copied to #{dest_dir}"
|
280
295
|
end
|
281
296
|
end
|
data/version.properties
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
major=0
|
2
|
-
minor=
|
3
|
-
patch=
|
2
|
+
minor=4
|
3
|
+
patch=0
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: screengrab
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrea Falcone
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-
|
12
|
+
date: 2016-08-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: fastlane_core
|
@@ -199,6 +199,7 @@ files:
|
|
199
199
|
- lib/assets/ScreengrabfileTemplate
|
200
200
|
- lib/screengrab.rb
|
201
201
|
- lib/screengrab/android_environment.rb
|
202
|
+
- lib/screengrab/commands_generator.rb
|
202
203
|
- lib/screengrab/dependency_checker.rb
|
203
204
|
- lib/screengrab/detect_values.rb
|
204
205
|
- lib/screengrab/options.rb
|