fastlane-plugin-bundletool 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9167816675321e0df8072fa9985ae92c7e6f15183448f4d58f92fbb70d6ed4f3
4
- data.tar.gz: 4bf2737f7fb716a5d33fbac639e114ef358369e0821f386ce20fa9e36caac608
3
+ metadata.gz: 3a70dacc9fddd22ecc8378ccf029d63cb715929d85acc275ed511f59f34dfdba
4
+ data.tar.gz: d53d8500c149e50ef2097b6fecdb6e5be43cd44119bcbda6afd76d0750dfc098
5
5
  SHA512:
6
- metadata.gz: d9c86e85b5e4b673fc3239bcb59c1dc5d6a33e160f761bebd4a6fb4496833adcbf6617ebad992e0538c5b8e000ee0989910f31959935ebbd73d93ef62944f6ed
7
- data.tar.gz: 618b0343feb2e6d652f2ba03ebcfc35e01d475756d5a8028161371cc7d7a27b4b1ff9773925e3eb13c985fce1f097bca4e93e12031c72f0c602455d27250e8e5
6
+ metadata.gz: 9637417a2e168768728267e7a3ff00f4855ce709579fe7be5f11dbd60ba93b2f7c43e2748ee7ec8bc845deb809b2b12047ad60f6234e209334036e19e1ab1262
7
+ data.tar.gz: 68836cc64d7016a88a0f106d5ce787d7fa9a59aab97cbc63d029626036696511ee6fc52faf2d11a693c92c5368c4185d90eb4731c333172bcdf1eabb466f3774
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # bundletool plugin
1
+ # Bundletool for Fastlane
2
2
 
3
3
  [![fastlane Plugin Badge](https://rawcdn.githack.com/fastlane/fastlane/master/fastlane/assets/plugin-badge.svg)](https://rubygems.org/gems/fastlane-plugin-bundletool)
4
4
 
@@ -10,30 +10,44 @@ This project is a [_fastlane_](https://github.com/fastlane/fastlane) plugin. To
10
10
  fastlane add_plugin bundletool
11
11
  ```
12
12
 
13
- ## About bundletool
13
+ or in your Pluginfile under fastlane folder write the following line and run `bundle install`.
14
14
 
15
- Extracts a universal apk from an .aab file
15
+ ```
16
+ gem 'fastlane-plugin-bundletool', '1.0.1'
17
+ ```
16
18
 
17
- **Note to author:** Add a more detailed description about this plugin here. If your plugin contains multiple actions, make sure to mention them here.
19
+ ## About bundletool
18
20
 
19
- ## Example
21
+ **bundletool** is the underlying tool that Gradle, Android Studio, and Google Play use to build an Android App Bundle or convert an app bundle into the various APKs that are deployed to devices. bundletool is also available to you as a command line tool, so you can recreate, inspect, and verify Google Play’s server-side build of your app’s APKs.
20
22
 
21
- Check out the [example `Fastfile`](fastlane/Fastfile) to see how to use this plugin. Try it by cloning the repo, running `fastlane install_plugins` and `bundle exec fastlane test`.
23
+ https://developer.android.com/studio/command-line/bundletool
22
24
 
23
- **Note to author:** Please set up a sample project to make it easy for users to explore what your plugin does. Provide everything that is necessary to try out the plugin in this project (including a sample Xcode/Android project if necessary)
25
+ The motivation of this plugin is to extract an universal `.apk` file from an [.aab](https://fileinfo.com/extension/aab) file. Since we cannot distribute aab files, it's great that we can extract from the very same binary a file that we can distribute internally.
24
26
 
25
- ## Run tests for this plugin
27
+ ## Usage
26
28
 
27
- To run both the tests, and code style validation, run
29
+ In your Fastfile you need to use `bundletool` action. After you build the `.aab` file you can run the following code.
28
30
 
29
- ```
30
- rake
31
+ ```ruby
32
+ bundletool(
33
+ ks_path: keystore_path,
34
+ ks_password: keystore_password,
35
+ ks_key_alias: keystore_alias,
36
+ ks_key_alias_password: keystore_alias_password,
37
+ bundletool_version: '0.11.0',
38
+ aab_path: aab_path,
39
+ apk_output_path: apk_output_path,
40
+ verbose: true
41
+ )
31
42
  ```
32
43
 
33
- To automatically fix many of the styling issues, use
34
- ```
35
- rubocop -a
36
- ```
44
+ This will output the universal `.apk` in the output path you set.
45
+
46
+ ## Use case
47
+
48
+ Here you can find a post I did explaining why I have to create this action.
49
+
50
+ https://medium.com/@gonzalez.martin90/bundletool-with-fastlane-8f8862ab16e0
37
51
 
38
52
  ## Issues and Feedback
39
53
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'fastlane/action'
2
4
  require_relative '../helper/bundletool_helper'
3
5
 
@@ -10,7 +12,7 @@ module Fastlane
10
12
  @bundletool_temp_path = "#{@project_root}/bundletool_temp"
11
13
  @verbose = params[:verbose]
12
14
  keystore_info = {}
13
- unless (params[:ks_path].nil?)
15
+ unless params[:ks_path].nil?
14
16
  keystore_info[:keystore_path] = params[:ks_path]
15
17
  keystore_info[:keystore_password] = params[:ks_password]
16
18
  keystore_info[:alias] = params[:ks_key_alias]
@@ -19,45 +21,48 @@ module Fastlane
19
21
 
20
22
  bundletool_version = params[:bundletool_version]
21
23
  aab_path = params[:aab_path]
22
- output_path = params[:apk_output_path]
24
+ output_path = params[:apk_output_path] || '.'
25
+
26
+ return unless validate_aab!(aab_path)
27
+
28
+ return unless download_bundletool(bundletool_version)
23
29
 
24
- validate_aab!(aab_path)
25
- download_bundletool(bundletool_version)
26
30
  extract_universal_apk_from(aab_path, output_path, keystore_info)
27
31
  end
28
32
 
29
33
  def self.validate_aab!(aab_path)
30
34
  puts_message('Checking if .aab file exists...')
31
- puts_error!(".aab file at #{aab_path} does not exist") unless File.file?(aab_path)
35
+ unless File.file?(aab_path)
36
+ puts_error!(".aab file at #{aab_path} does not exist")
37
+ return false
38
+ end
32
39
  puts_success('Checking if .aab file exists')
33
40
  end
34
41
 
35
42
  def self.download_bundletool(version)
36
- begin
37
- puts_message("Downloading bundletool (#{version}) from https://github.com/google/bundletool/releases/download/#{version}/bundletool-all-#{version}.jar...")
38
- Dir.mkdir "#{@project_root}/bundletool_temp"
39
- open("https://github.com/google/bundletool/releases/download/#{version}/bundletool-all-#{version}.jar") do |bundletool|
40
- File.open("#{@bundletool_temp_path}/bundletool.jar", "wb") do |file|
41
- file.write(bundletool.read)
42
- end
43
+ puts_message("Downloading bundletool (#{version}) from https://github.com/google/bundletool/releases/download/#{version}/bundletool-all-#{version}.jar...")
44
+ Dir.mkdir "#{@project_root}/bundletool_temp"
45
+ Kernel.open("https://github.com/google/bundletool/releases/download/#{version}/bundletool-all-#{version}.jar") do |bundletool|
46
+ File.open("#{@bundletool_temp_path}/bundletool.jar", 'wb') do |file|
47
+ file.write(bundletool.read)
43
48
  end
44
- puts_success('Downloading bundletool')
45
- rescue StandardError => e
46
- puts_error!("Something went wrong when downloading bundletool version #{version}. \nError message\n #{e.message}")
47
49
  end
50
+ puts_success('Downloading bundletool')
51
+ rescue StandardError => e
52
+ clean_temp!
53
+ puts_error!("Something went wrong when downloading bundletool version #{version}. \nError message\n #{e.message}")
54
+ false
48
55
  end
49
56
 
50
57
  def self.extract_universal_apk_from(aab_path, apk_output_path, keystore_info)
51
- begin
52
- aab_absolute_path = Pathname.new(File.expand_path(aab_path)).to_s
53
- apk_output_absolute_path = Pathname.new(File.expand_path(apk_output_path)).to_s
54
- output_path = run_bundletool!(aab_absolute_path, keystore_info)
55
- prepare_apk!(output_path, apk_output_absolute_path)
56
- rescue StandardError => e
57
- puts_error!("Bundletool could not extract universal apk from aab at #{aab_absolute_path}. \nError message\n #{e.message}")
58
- ensure
59
- clean_temp!
60
- end
58
+ aab_absolute_path = Pathname.new(File.expand_path(aab_path)).to_s
59
+ apk_output_absolute_path = Pathname.new(File.expand_path(apk_output_path)).to_s
60
+ output_path = run_bundletool!(aab_absolute_path, keystore_info)
61
+ prepare_apk!(output_path, apk_output_absolute_path)
62
+ rescue StandardError => e
63
+ puts_error!("Bundletool could not extract universal apk from aab at #{aab_absolute_path}. \nError message\n #{e.message}")
64
+ ensure
65
+ clean_temp!
61
66
  end
62
67
 
63
68
  def self.run_bundletool!(aab_path, keystore_info)
@@ -65,18 +70,11 @@ module Fastlane
65
70
  output_path = "#{@bundletool_temp_path}/output.apks"
66
71
  keystore_params = ''
67
72
 
68
- unless (keystore_info.empty?)
69
- keystore_params = "--ks=#{keystore_info[:keystore_path]} \
70
- --ks-pass=pass:#{keystore_info[:keystore_password]} \
71
- --ks-key-alias=#{keystore_info[:alias]} \
72
- --key-pass=pass:#{keystore_info[:alias_password]}"
73
+ unless keystore_info.empty?
74
+ keystore_params = "--ks=\"#{keystore_info[:keystore_path]}\" --ks-pass=pass:#{keystore_info[:keystore_password]} --ks-key-alias=#{keystore_info[:alias]} --key-pass=pass:#{keystore_info[:alias_password]}"
73
75
  end
74
76
 
75
- cmd = "java -jar #{@bundletool_temp_path}/bundletool.jar build-apks \
76
- --bundle=#{aab_path} \
77
- --output=#{output_path} \
78
- --mode=universal \
79
- #{keystore_params}"
77
+ cmd = "java -jar #{@bundletool_temp_path}/bundletool.jar build-apks --bundle=\"#{aab_path}\" --output=\"#{output_path}\" --mode=universal #{keystore_params}"
80
78
 
81
79
  Open3.popen3(cmd) do |_, _, stderr, wait_thr|
82
80
  exit_status = wait_thr.value
@@ -88,15 +86,17 @@ module Fastlane
88
86
 
89
87
  def self.prepare_apk!(output_path, target_path)
90
88
  puts_message("Preparing apk to #{target_path}...")
91
- puts_important("Apk at path #{target_path} exists. Replacing it.") if File.file?(target_path)
89
+ if File.file?(target_path)
90
+ puts_important("Apk at path #{target_path} exists. Replacing it.")
91
+ end
92
92
  target_dir_name = File.dirname(target_path)
93
93
  unless Dir.exist?(target_dir_name)
94
94
  puts_important("Creating path #{target_dir_name} since does not exist")
95
95
  FileUtils.mkdir_p target_dir_name
96
96
  end
97
- cmd = "mv #{output_path} #{@bundletool_temp_path}/output.zip &&
98
- unzip #{@bundletool_temp_path}/output.zip -d #{@bundletool_temp_path} &&
99
- mv #{@bundletool_temp_path}/universal.apk #{target_path}"
97
+ cmd = "mv \"#{output_path}\" \"#{@bundletool_temp_path}/output.zip\" &&
98
+ unzip \"#{@bundletool_temp_path}/output.zip\" -d \"#{@bundletool_temp_path}\" &&
99
+ mv \"#{@bundletool_temp_path}/universal.apk\" \"#{target_path}\""
100
100
  Open3.popen3(cmd) do |_, _, stderr, wait_thr|
101
101
  exit_status = wait_thr.value
102
102
  raise stderr.read unless exit_status.success?
@@ -104,7 +104,7 @@ module Fastlane
104
104
  puts_success("Preparing apk to #{target_path}")
105
105
  end
106
106
 
107
- def self.clean_temp!()
107
+ def self.clean_temp!
108
108
  cmd = "rm -rf #{@project_root}/bundletool_temp"
109
109
  Open3.popen3(cmd) do |_, _, stderr, wait_thr|
110
110
  exit_status = wait_thr.value
@@ -117,14 +117,19 @@ module Fastlane
117
117
  end
118
118
 
119
119
  def self.puts_success(message)
120
- UI.success "#{message} #{Fastlane::Helper::Emojis.green_checkmark}" if @verbose
120
+ if @verbose
121
+ UI.success "#{message} #{Fastlane::Helper::Emojis.green_checkmark}"
122
+ end
121
123
  end
122
124
 
123
125
  def self.puts_important(message)
124
- UI.important "#{message} #{Fastlane::Helper::Emojis.warning}" if @verbose
126
+ if @verbose
127
+ UI.important "#{message} #{Fastlane::Helper::Emojis.warning}"
128
+ end
125
129
  end
126
130
 
127
131
  def self.puts_error!(message)
132
+ p message
128
133
  UI.user_error! message
129
134
  end
130
135
 
@@ -162,12 +167,8 @@ module Fastlane
162
167
  FastlaneCore::ConfigItem.new(key: :apk_output_path,
163
168
  description: 'Path where the apk file is going to be placed',
164
169
  is_string: true,
165
- optional: false,
166
- verify_block: proc do |value|
167
- unless value && !value.empty?
168
- UI.user_error!('You must set apk_output_path.')
169
- end
170
- end),
170
+ optional: true,
171
+ default_value: '.'),
171
172
  FastlaneCore::ConfigItem.new(key: :verbose,
172
173
  description: 'Show every messages of the action',
173
174
  is_string: false,
@@ -181,20 +182,20 @@ module Fastlane
181
182
  def self.print_params(options)
182
183
  table_title = "Params for bundletool #{Fastlane::Bundletool::VERSION}"
183
184
  FastlaneCore::PrintTable.print_values(config: options,
184
- mask_keys: [:ks_password, :ks_key_alias_password],
185
+ mask_keys: %i[ks_password ks_key_alias_password],
185
186
  title: table_title)
186
187
  end
187
188
 
188
189
  def self.description
189
- "Extracts an universal apk from an .aab file"
190
+ 'Extracts an universal apk from an .aab file'
190
191
  end
191
192
 
192
193
  def self.authors
193
- ["Martin Gonzalez"]
194
+ ['Martin Gonzalez']
194
195
  end
195
196
 
196
197
  def self.details
197
- "Using the google oficial bundletool to extract an universal apk from .aab file to distribute it"
198
+ 'Using the google oficial bundletool to extract an universal apk from .aab file to distribute it'
198
199
  end
199
200
 
200
201
  def self.is_supported?(platform)
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
2
  module Bundletool
3
- VERSION = "1.0.1"
3
+ VERSION = "1.0.2"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane-plugin-bundletool
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Gonzalez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-02-21 00:00:00.000000000 Z
11
+ date: 2020-05-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pry