danger-apkstats 0.2.0 → 0.3.0

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
- SHA1:
3
- metadata.gz: 6aa65759eac00e6bdc2a9a745455a10d07a40c9e
4
- data.tar.gz: 49efc61524d8d75eeef95050977fb4d0e1a08ca7
2
+ SHA256:
3
+ metadata.gz: 206a4a16c43f2e18507ab485cce2947c1e932fbee471db57e4f43b20b9e4aa02
4
+ data.tar.gz: f38876905c1095c7da969bbb6d6e43ea5a09ab0cce2941544263137c2ffa3a1e
5
5
  SHA512:
6
- metadata.gz: 0cf8e9d23c34f2af359cb01c18b36ca2e556e613e6bc7757421b1fc19ff115be7f4055b54f73ffa68e84a95932af847d15bc720f2c83b237caee57085296cac1
7
- data.tar.gz: e1a15a138f9f446b4c8be024ae8bae0545f09fd7857ea7c01cbb90aa323368416dba9bdb9d758ce3d1869d1c1fa34b5f8d39482c586b225618d427be13589c0a
6
+ metadata.gz: a9490b757975f4ed708ce6e2df907cea5594cd1fdd8bd338cd6eff111f8d75148c41ad442c1756af7aca9f78992d908fb76905bbcd7cddb0fb3f4ea4e6ab4d04
7
+ data.tar.gz: 73c01476155e698d19655affd292bbdebfffad6e4615bb96257280a57deced379b7a4fedc3bcd43d049460a8d0f2da6925d9fae7e08c048e4fd0b7eb6e3fbbd8
@@ -0,0 +1,3 @@
1
+
2
+ d56f5187479451eabf01fb78af6dfcb131a6481e
3
+ 24333f8a63b6825ea9c5514f83c2829b004d1fee
@@ -0,0 +1,104 @@
1
+ version: 2.1
2
+
3
+ executors:
4
+ base:
5
+ docker:
6
+ - image: circleci/android:api-29
7
+ working_directory: ~/workspace
8
+ environment:
9
+ ANDROID_SDK_ROOT: /home/circleci/sdk
10
+ APKANALYZER_PATH: /home/circleci/sdk/cmdline-tools/tools/bin/apkanalyzer
11
+
12
+ ruby:
13
+ docker:
14
+ - image: circleci/ruby:2.7.1
15
+ working_directory: ~/workspace
16
+
17
+ commands:
18
+ install-android-sdk:
19
+ parameters:
20
+ zip-version:
21
+ type: string
22
+ description: the version of the zip archive
23
+ build-tools:
24
+ type: string
25
+ steps:
26
+ - restore_cache:
27
+ key: v1-android-sdk-{{ arch }}-<< parameters.zip-version >>-<< parameters.build-tools >>
28
+ - run: |
29
+ version="<< parameters.zip-version >>"
30
+ if [ "$(cat $ANDROID_SDK_ROOT/.sdk_tools_version || echo)" != "$version" ]; then
31
+ rm -fr $ANDROID_SDK_ROOT || :
32
+ mkdir -p $ANDROID_SDK_ROOT/licenses $ANDROID_SDK_ROOT/cmdline-tools
33
+ curl -o sdk-tools-linux.zip "https://dl.google.com/android/repository/commandlinetools-linux-${version}_latest.zip"
34
+ unzip "sdk-tools-linux.zip" -d $ANDROID_SDK_ROOT/cmdline-tools
35
+ echo "$version" > $ANDROID_SDK_ROOT/.sdk_tools_version
36
+ fi
37
+ mkdir -p $ANDROID_SDK_ROOT/licenses
38
+ cp .circleci/android-sdk-license $ANDROID_SDK_ROOT/licenses/
39
+ $ANDROID_SDK_ROOT/cmdline-tools/tools/bin/sdkmanager "build-tools;<< parameters.build-tools >>"
40
+ - save_cache:
41
+ key: v1-android-sdk-{{ arch }}-<< parameters.zip-version >>-<< parameters.build-tools >>
42
+ paths:
43
+ - ~/sdk
44
+ install-ruby:
45
+ parameters:
46
+ ruby-version:
47
+ type: string
48
+ steps:
49
+ - run: |
50
+ sudo apt-get update && \
51
+ cd /tmp && wget -O ruby-install-0.6.1.tar.gz https://github.com/postmodern/ruby-install/archive/v0.6.1.tar.gz && \
52
+ tar -xzvf ruby-install-0.6.1.tar.gz && \
53
+ cd ruby-install-0.6.1 && \
54
+ sudo make install && \
55
+ ruby-install --cleanup ruby << parameters.ruby-version >> && \
56
+ rm -r /tmp/ruby-install-* && \
57
+ sudo rm -rf /var/lib/apt/lists/*
58
+
59
+ echo "export PATH=${HOME}/.rubies/ruby-<< parameters.ruby-version >>/bin:\${PATH}" >> $BASH_ENV
60
+ - run: ruby --version
61
+ bundle-install:
62
+ steps:
63
+ - restore_cache:
64
+ key: v1-bundle-{{ arch }}-{{ checksum "./Gemfile.lock" }}
65
+ - run: gem install bundler -v 2.1.4
66
+ - run: bundle install --path=vendor/bundle
67
+ - save_cache:
68
+ key: v1-bundle-{{ arch }}-{{ checksum "./Gemfile.lock" }}
69
+ paths:
70
+ - vendor/bundle
71
+
72
+ jobs:
73
+ lint:
74
+ executor: ruby
75
+ steps:
76
+ - checkout
77
+ - bundle-install
78
+ - run: bundle exec rake rubocop
79
+
80
+ test:
81
+ parameters:
82
+ ruby_version:
83
+ type: string
84
+ description: 'Ruby version to be used'
85
+ executor: base
86
+
87
+ steps:
88
+ - checkout
89
+ - install-ruby:
90
+ ruby-version: << parameters.ruby_version >>
91
+ - install-android-sdk:
92
+ zip-version: "6514223"
93
+ build-tools: 29.0.2
94
+ - bundle-install
95
+ - run: bundle exec rake specs spec_docs
96
+
97
+ workflows:
98
+ materix_test:
99
+ jobs:
100
+ - lint
101
+ - test:
102
+ matrix:
103
+ parameters:
104
+ ruby_version: [2.5.8, 2.6.6, 2.7.1]
data/.gitignore CHANGED
@@ -4,3 +4,4 @@ pkg
4
4
  .yardoc
5
5
  **/vendor/bundle/
6
6
  *.gem
7
+ .bundle/
@@ -7,7 +7,7 @@ AllCops:
7
7
  - 'vendor/**/*'
8
8
  - 'spec/fixtures/**/*'
9
9
  - 'tmp/**/*'
10
- TargetRubyVersion: 2.3.7
10
+ TargetRubyVersion: 2.7.1
11
11
 
12
12
  Metrics/ModuleLength:
13
13
  Exclude:
@@ -22,20 +22,16 @@ Style/StringLiterals:
22
22
  Style/ClassCheck:
23
23
  EnforcedStyle: kind_of?
24
24
 
25
- # It's better to be more explicit about the type
26
- Style/BracesAroundHashParameters:
27
- Enabled: false
28
-
29
25
  # specs sometimes have useless assignments, which is fine
30
26
  Lint/UselessAssignment:
31
27
  Exclude:
32
28
  - '**/spec/**/*'
33
29
 
34
30
  # We could potentially enable the 2 below:
35
- Layout/IndentHash:
31
+ Layout/FirstHashElementIndentation:
36
32
  Enabled: false
37
33
 
38
- Layout/AlignHash:
34
+ Layout/HashAlignment:
39
35
  Enabled: false
40
36
 
41
37
  # HoundCI doesn't like this rule
@@ -85,7 +81,7 @@ Metrics/CyclomaticComplexity:
85
81
  Max: 17
86
82
 
87
83
  # Configuration parameters: AllowURI, URISchemes.
88
- Metrics/LineLength:
84
+ Layout/LineLength:
89
85
  Max: 370
90
86
 
91
87
  # Configuration parameters: CountKeywordArgs.
@@ -136,16 +132,16 @@ Metrics/BlockLength:
136
132
  Style/MixinGrouping:
137
133
  Enabled: false
138
134
 
139
- Style/FileName:
135
+ Naming/FileName:
140
136
  Enabled: false
141
137
 
142
- Layout/IndentHeredoc:
138
+ Layout/HeredocIndentation:
143
139
  Enabled: false
144
140
 
145
141
  Style/SpecialGlobalVars:
146
142
  Enabled: false
147
143
 
148
- PercentLiteralDelimiters:
144
+ Department/PercentLiteralDelimiters:
149
145
  PreferredDelimiters:
150
146
  "%": ()
151
147
  "%i": ()
@@ -167,4 +163,43 @@ Style/TrailingCommaInArrayLiteral:
167
163
  Enabled: false
168
164
 
169
165
  Style/TrailingCommaInHashLiteral:
170
- Enabled: false
166
+ Enabled: false
167
+
168
+ Layout/EmptyLinesAroundAttributeAccessor:
169
+ Enabled: true
170
+
171
+ Layout/SpaceAroundMethodCallOperator:
172
+ Enabled: false
173
+
174
+ Lint/DeprecatedOpenSSLConstant:
175
+ Enabled: false
176
+
177
+ Lint/MixedRegexpCaptureTypes:
178
+ Enabled: false
179
+
180
+ Lint/RaiseException:
181
+ Enabled: true
182
+
183
+ Lint/StructNewOverride:
184
+ Enabled: true
185
+
186
+ Style/ExponentialNotation:
187
+ Enabled: false
188
+
189
+ Style/HashEachMethods:
190
+ Enabled: true
191
+
192
+ Style/HashTransformKeys:
193
+ Enabled: true
194
+
195
+ Style/HashTransformValues:
196
+ Enabled: true
197
+
198
+ Style/RedundantRegexpCharacterClass:
199
+ Enabled: true
200
+
201
+ Style/RedundantRegexpEscape:
202
+ Enabled: true
203
+
204
+ Style/SlicingWithRange:
205
+ Enabled: true
@@ -1,47 +1,49 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- danger-apkstats (0.2.0)
4
+ danger-apkstats (0.3.0)
5
5
  danger-plugin-api (~> 1.0)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- addressable (2.5.2)
11
- public_suffix (>= 2.0.2, < 4.0)
12
- ast (2.4.0)
13
- claide (1.0.2)
10
+ addressable (2.7.0)
11
+ public_suffix (>= 2.0.2, < 5.0)
12
+ ast (2.4.1)
13
+ claide (1.0.3)
14
14
  claide-plugins (0.9.2)
15
15
  cork
16
16
  nap
17
17
  open4 (~> 1.3)
18
- coderay (1.1.2)
18
+ coderay (1.1.3)
19
19
  colored2 (3.1.2)
20
20
  cork (0.3.0)
21
21
  colored2 (~> 3.1)
22
- danger (5.6.4)
22
+ danger (8.0.1)
23
23
  claide (~> 1.0)
24
24
  claide-plugins (>= 0.9.2)
25
25
  colored2 (~> 3.1)
26
26
  cork (~> 0.1)
27
- faraday (~> 0.9)
28
- faraday-http-cache (~> 1.0)
29
- git (~> 1)
30
- kramdown (~> 1.5)
27
+ faraday (>= 0.9.0, < 2.0)
28
+ faraday-http-cache (~> 2.0)
29
+ git (~> 1.7)
30
+ kramdown (~> 2.0)
31
+ kramdown-parser-gfm (~> 1.0)
31
32
  no_proxy_fix
32
33
  octokit (~> 4.7)
33
34
  terminal-table (~> 1)
34
35
  danger-plugin-api (1.0.0)
35
36
  danger (> 2.0)
36
37
  diff-lcs (1.3)
37
- faraday (0.15.2)
38
+ faraday (1.0.1)
38
39
  multipart-post (>= 1.2, < 3)
39
- faraday-http-cache (1.3.1)
40
- faraday (~> 0.8)
41
- ffi (1.9.25)
40
+ faraday-http-cache (2.2.0)
41
+ faraday (>= 0.8)
42
+ ffi (1.13.1)
42
43
  formatador (0.2.5)
43
- git (1.5.0)
44
- guard (2.14.2)
44
+ git (1.7.0)
45
+ rchardet (~> 1.8)
46
+ guard (2.16.2)
45
47
  formatador (>= 0.2.4)
46
48
  listen (>= 2.7, < 4.0)
47
49
  lumberjack (>= 1.0.12, < 2.0)
@@ -55,82 +57,89 @@ GEM
55
57
  guard (~> 2.1)
56
58
  guard-compat (~> 1.1)
57
59
  rspec (>= 2.99.0, < 4.0)
58
- jaro_winkler (1.5.1)
59
- kramdown (1.17.0)
60
+ kramdown (2.2.1)
61
+ rexml
62
+ kramdown-parser-gfm (1.1.0)
63
+ kramdown (~> 2.0)
60
64
  listen (3.0.7)
61
65
  rb-fsevent (>= 0.9.3)
62
66
  rb-inotify (>= 0.9.7)
63
- lumberjack (1.0.13)
64
- method_source (0.9.0)
65
- multipart-post (2.0.0)
67
+ lumberjack (1.2.5)
68
+ method_source (1.0.0)
69
+ multipart-post (2.1.1)
66
70
  nap (1.1.0)
67
71
  nenv (0.3.0)
68
72
  no_proxy_fix (0.1.2)
69
- notiffany (0.1.1)
73
+ notiffany (0.1.3)
70
74
  nenv (~> 0.1)
71
75
  shellany (~> 0.0)
72
- octokit (4.10.0)
76
+ octokit (4.18.0)
77
+ faraday (>= 0.9)
73
78
  sawyer (~> 0.8.0, >= 0.5.3)
74
79
  open4 (1.3.4)
75
- parallel (1.12.1)
76
- parser (2.5.1.2)
80
+ parallel (1.19.1)
81
+ parser (2.7.1.3)
77
82
  ast (~> 2.4.0)
78
- powerpack (0.1.2)
79
- pry (0.11.3)
80
- coderay (~> 1.1.0)
81
- method_source (~> 0.9.0)
82
- public_suffix (3.0.3)
83
+ pry (0.13.1)
84
+ coderay (~> 1.1)
85
+ method_source (~> 1.0)
86
+ public_suffix (4.0.5)
83
87
  rainbow (3.0.0)
84
- rake (10.5.0)
85
- rb-fsevent (0.10.3)
86
- rb-inotify (0.9.10)
87
- ffi (>= 0.5.0, < 2)
88
- rspec (3.7.0)
89
- rspec-core (~> 3.7.0)
90
- rspec-expectations (~> 3.7.0)
91
- rspec-mocks (~> 3.7.0)
92
- rspec-core (3.7.1)
93
- rspec-support (~> 3.7.0)
94
- rspec-expectations (3.7.0)
88
+ rake (13.0.1)
89
+ rb-fsevent (0.10.4)
90
+ rb-inotify (0.10.1)
91
+ ffi (~> 1.0)
92
+ rchardet (1.8.0)
93
+ regexp_parser (1.7.1)
94
+ rexml (3.2.4)
95
+ rspec (3.9.0)
96
+ rspec-core (~> 3.9.0)
97
+ rspec-expectations (~> 3.9.0)
98
+ rspec-mocks (~> 3.9.0)
99
+ rspec-core (3.9.2)
100
+ rspec-support (~> 3.9.3)
101
+ rspec-expectations (3.9.2)
95
102
  diff-lcs (>= 1.2.0, < 2.0)
96
- rspec-support (~> 3.7.0)
97
- rspec-mocks (3.7.0)
103
+ rspec-support (~> 3.9.0)
104
+ rspec-mocks (3.9.1)
98
105
  diff-lcs (>= 1.2.0, < 2.0)
99
- rspec-support (~> 3.7.0)
100
- rspec-support (3.7.1)
101
- rubocop (0.58.2)
102
- jaro_winkler (~> 1.5.1)
106
+ rspec-support (~> 3.9.0)
107
+ rspec-support (3.9.3)
108
+ rubocop (0.85.1)
103
109
  parallel (~> 1.10)
104
- parser (>= 2.5, != 2.5.1.1)
105
- powerpack (~> 0.1)
110
+ parser (>= 2.7.0.1)
106
111
  rainbow (>= 2.2.2, < 4.0)
112
+ regexp_parser (>= 1.7)
113
+ rexml
114
+ rubocop-ast (>= 0.0.3)
107
115
  ruby-progressbar (~> 1.7)
108
- unicode-display_width (~> 1.0, >= 1.0.1)
109
- ruby-progressbar (1.9.0)
110
- sawyer (0.8.1)
111
- addressable (>= 2.3.5, < 2.6)
112
- faraday (~> 0.8, < 1.0)
116
+ unicode-display_width (>= 1.4.0, < 2.0)
117
+ rubocop-ast (0.0.3)
118
+ parser (>= 2.7.0.1)
119
+ ruby-progressbar (1.10.1)
120
+ sawyer (0.8.2)
121
+ addressable (>= 2.3.5)
122
+ faraday (> 0.8, < 2.0)
113
123
  shellany (0.0.1)
114
124
  terminal-table (1.8.0)
115
125
  unicode-display_width (~> 1.1, >= 1.1.1)
116
- thor (0.20.0)
117
- unicode-display_width (1.4.0)
118
- yard (0.9.15)
126
+ thor (1.0.1)
127
+ unicode-display_width (1.7.0)
128
+ yard (0.9.25)
119
129
 
120
130
  PLATFORMS
121
131
  ruby
122
132
 
123
133
  DEPENDENCIES
124
- bundler (~> 1.3)
125
134
  danger-apkstats!
126
135
  guard (~> 2.14)
127
136
  guard-rspec (~> 4.7)
128
137
  listen (= 3.0.7)
129
138
  pry
130
- rake (~> 10.0)
139
+ rake (~> 13.0)
131
140
  rspec (~> 3.4)
132
141
  rubocop
133
142
  yard
134
143
 
135
144
  BUNDLED WITH
136
- 1.16.1
145
+ 2.1.4
@@ -1,4 +1,4 @@
1
- Copyright (c) 2018 Jumpei Matsuda <jmatsu.drm@gmail.com>
1
+ Copyright (c) 2018-2020 Jumpei Matsuda <jmatsu.drm@gmail.com>
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- [![Build Status](https://travis-ci.com/jmatsu/danger-apkstats.svg?branch=master)](https://travis-ci.com/jmatsu/danger-apkstats) [![Gem Version](https://badge.fury.io/rb/danger-apkstats.svg)](https://badge.fury.io/rb/danger-apkstats)
1
+ [![jmatsu](https://circleci.com/gh/jmatsu/danger-apkstats.svg?style=shield)](https://circleci.com/gh/jmatsu/danger-apkstats) [![Gem Version](https://badge.fury.io/rb/danger-apkstats.svg)](https://badge.fury.io/rb/danger-apkstats)
2
2
 
3
3
  # danger-apkstats
4
4
 
@@ -7,9 +7,15 @@ This allows you to get attributes of your application file (apk) and report a su
7
7
 
8
8
  ## Installation
9
9
 
10
- `gem install danger-apkstats`
10
+ `gem install danger-apkstats` or add `danger-apkstats` to your Gemfile.
11
11
 
12
- Also, you need to have ANDROID_HOME which indicates sdk location in your environment variables.
12
+ Please specify the path of apkanalyzer in your Dangerfile.
13
+
14
+ ```ruby
15
+ apkstats.apkanalyzer_path='/path/to/apkanalyzer'
16
+ ```
17
+
18
+ `ANDROID_HOME` has been officially deprecated. `ANDROID_SDK_ROOT` is similar to `ANDROID_HOME` but differs actually. And also, the change indicated the possibility of further deprecations and/or breaking changes in the Android SDK structure.
13
19
 
14
20
  ## Usage
15
21
 
@@ -61,3 +67,9 @@ Number of dex file(s) Change | 1
61
67
  3. Run `bundle exec rake spec` to run the tests.
62
68
  4. Use `bundle exec guard` to automatically have tests run as you make changes.
63
69
  5. Make your changes.
70
+
71
+ ### Supported ruby versions
72
+
73
+ Support only versions which are in normal and/or security maintenance.
74
+
75
+ ref: https://www.ruby-lang.org/en/downloads/branches/
@@ -9,7 +9,7 @@ Gem::Specification.new do |spec|
9
9
  spec.version = Apkstats::VERSION
10
10
  spec.authors = ["Jumpei Matsuda"]
11
11
  spec.email = ["jmatsu.drm@gmail.com"]
12
- spec.description = "To inpsect android application file with danger."
12
+ spec.description = "To inspect android application file with danger."
13
13
  spec.summary = "This is a danger plugin to inspect android application file."
14
14
  spec.homepage = "https://github.com/jmatsu/danger-apkstats"
15
15
  spec.license = "MIT"
@@ -22,8 +22,7 @@ Gem::Specification.new do |spec|
22
22
  spec.add_runtime_dependency "danger-plugin-api", "~> 1.0"
23
23
 
24
24
  # General ruby development
25
- spec.add_development_dependency "bundler", "~> 1.3"
26
- spec.add_development_dependency "rake", "~> 10.0"
25
+ spec.add_development_dependency "rake", "~> 13.0"
27
26
 
28
27
  # Testing support
29
28
  spec.add_development_dependency "rspec", "~> 3.4"
@@ -5,7 +5,7 @@ module Apkstats::Command
5
5
  include Apkstats::Command::Executable
6
6
 
7
7
  def initialize(opts)
8
- @command_path = opts[:command_path] || "#{ENV.fetch('ANDROID_HOME')}/tools/bin/apkanalyzer"
8
+ @command_path = opts.fetch(:command_path)
9
9
  end
10
10
 
11
11
  def file_size(apk_filepath)
@@ -80,8 +80,9 @@ module Apkstats::Command
80
80
  private
81
81
 
82
82
  def run_command(*args)
83
- out, err, status = Open3.capture3("#{command_path} #{args.join(' ')}")
83
+ out, err, status = Open3.capture3(command_path, *args)
84
84
  raise err unless status.success?
85
+
85
86
  out.rstrip
86
87
  end
87
88
  end
@@ -84,6 +84,7 @@ module Apkstats::Entity
84
84
 
85
85
  def eql?(other)
86
86
  return if !other || other.class == Features
87
+
87
88
  other.values == values
88
89
  end
89
90
 
@@ -70,6 +70,7 @@ module Apkstats::Entity
70
70
 
71
71
  def eql?(other)
72
72
  return if !other || other.class == Permissions
73
+
73
74
  other.values == values
74
75
  end
75
76
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Apkstats
4
- VERSION = "0.2.0"
4
+ VERSION = "0.3.0"
5
5
  end
@@ -64,24 +64,34 @@ module Danger
64
64
  # @tags android, apk_stats
65
65
  #
66
66
  class DangerApkstats < Plugin
67
+ class Error < StandardError; end
68
+
69
+ # @deprecated this field have no effect
67
70
  COMMAND_TYPE_MAP = {
68
71
  apk_analyzer: Apkstats::Command::ApkAnalyzer,
69
72
  }.freeze
70
73
 
71
74
  private_constant(:COMMAND_TYPE_MAP)
72
75
 
73
- # *Optional*
74
- # A command type to be run.
75
- # One of keys of COMMAND_TYPE_MAP
76
+ # @deprecated this field have no effect
77
+ # This will be removed in further versions
76
78
  #
77
- # @return [Symbol, Nil] _
79
+ # @return [String] _
78
80
  attr_accessor :command_type
79
81
 
80
- # *Optional*
81
- # A custom command path
82
+ # *Required*
83
+ # A path of apkanalyzer command
82
84
  #
83
- # @return [Symbol, Nil] _
84
- attr_accessor :command_path
85
+ # @return [String] _
86
+ attr_accessor :apkanalyzer_path
87
+
88
+ # @deprecated Use apkanalyzer_path instead
89
+ # @return [String] _
90
+ alias command_path apkanalyzer_path
91
+
92
+ # @deprecated Use apkanalyzer_path= instead
93
+ # @return [String] _
94
+ alias command_path= apkanalyzer_path=
85
95
 
86
96
  # *Required*
87
97
  # Your target apk filepath.
@@ -111,7 +121,7 @@ module Danger
111
121
 
112
122
  diff = result[:diff]
113
123
 
114
- md = +"### Apk comparision results" << "\n\n"
124
+ md = +"### Apk comparison results" << "\n\n"
115
125
  md << "Property | Summary" << "\n"
116
126
  md << ":--- | :---" << "\n"
117
127
 
@@ -183,7 +193,7 @@ module Danger
183
193
  rescue StandardError => e
184
194
  warn("apkstats failed to execute the command due to #{e.message}")
185
195
 
186
- e.backtrace&.each { |line| STDOUT.puts line }
196
+ on_error(e)
187
197
  end
188
198
 
189
199
  # rubocop:enable Metrics/AbcSize, Metrics/MethodLength
@@ -192,7 +202,7 @@ module Danger
192
202
  #
193
203
  # @return [Fixnum] return positive value if exists, otherwise -1.
194
204
  def file_size(_opts = {})
195
- result = run_command(__method__)
205
+ result = run_command(apkanalyzer_command, __method__)
196
206
  result ? result.to_i : -1
197
207
  end
198
208
 
@@ -200,7 +210,7 @@ module Danger
200
210
  #
201
211
  # @return [Fixnum] return positive value if exists, otherwise -1.
202
212
  def download_size(_opts = {})
203
- result = run_command(__method__)
213
+ result = run_command(apkanalyzer_command, __method__)
204
214
  result ? result.to_i : -1
205
215
  end
206
216
 
@@ -209,7 +219,7 @@ module Danger
209
219
  #
210
220
  # @return [Array<String>, Nil] return nil unless retrieved.
211
221
  def required_features(_opts = {})
212
- result = run_command(__method__)
222
+ result = run_command(apkanalyzer_command, __method__)
213
223
  result ? result.to_a : nil
214
224
  end
215
225
 
@@ -218,7 +228,7 @@ module Danger
218
228
  #
219
229
  # @return [Array<String>, Nil] return nil unless retrieved.
220
230
  def non_required_features(_opts = {})
221
- result = run_command(__method__)
231
+ result = run_command(apkanalyzer_command, __method__)
222
232
  result ? result.to_a : nil
223
233
  end
224
234
 
@@ -226,7 +236,7 @@ module Danger
226
236
  #
227
237
  # @return [Array<String>, Nil] return nil unless retrieved.
228
238
  def permissions(_opts = {})
229
- result = run_command(__method__)
239
+ result = run_command(apkanalyzer_command, __method__)
230
240
  result ? result.to_a : nil
231
241
  end
232
242
 
@@ -234,21 +244,21 @@ module Danger
234
244
  #
235
245
  # @return [String, Nil] return nil unless retrieved.
236
246
  def min_sdk(_opts = {})
237
- run_command(__method__)
247
+ run_command(apkanalyzer_command, __method__)
238
248
  end
239
249
 
240
250
  # Show the target sdk version of your apk file.
241
251
  #
242
252
  # @return [String, Nil] return nil unless retrieved.
243
253
  def target_sdk(_opts = {})
244
- run_command(__method__)
254
+ run_command(apkanalyzer_command, __method__)
245
255
  end
246
256
 
247
257
  # Show the methods reference count of your apk file.
248
258
  #
249
259
  # @return [Fixnum] return positive value if exists, otherwise -1.
250
260
  def method_reference_count(_opts = {})
251
- result = run_command(__method__)
261
+ result = run_command(apkanalyzer_command, __method__)
252
262
  result || -1
253
263
  end
254
264
 
@@ -256,27 +266,48 @@ module Danger
256
266
  #
257
267
  # @return [Fixnum] return positive value if exists, otherwise -1.
258
268
  def dex_count(_opts = {})
259
- result = run_command(__method__)
269
+ result = run_command(apkanalyzer_command, __method__)
260
270
  result || -1
261
271
  end
262
272
 
263
273
  private
264
274
 
265
- def run_command(name)
275
+ # @param [Apkstats::Command::Executable] command a wrapper class of a command
276
+ # @param [String] name an attribute name
277
+ def run_command(command, name)
266
278
  raise "#{command.command_path} is not found or is not executable" unless command.executable?
267
279
 
268
280
  return command.send(name, apk_filepath)
269
281
  rescue StandardError => e
270
282
  warn("apkstats failed to execute the command #{name} due to #{e.message}")
271
283
 
272
- e.backtrace&.each { |line| puts line }
284
+ on_error(e)
285
+ end
273
286
 
274
- nil
287
+ def apkanalyzer_command
288
+ return @apkanalyzer_command if defined?(@apkanalyzer_command)
289
+
290
+ command_path = apkanalyzer_path || begin
291
+ android_home = ENV["ANDROID_HOME"]
292
+
293
+ if android_home
294
+ warn("apkstats will not use ANDROID_HOME in further versions because ANDROID_HOME has been officially deprecated.")
295
+ else
296
+ raise Error, "Please specify apkanalyzer_path to execute apkstats"
297
+ end
298
+
299
+ "#{android_home}/tools/bin/apkanalyzer"
300
+ end
301
+
302
+ @apkanalyzer_command = Apkstats::Command::ApkAnalyzer.new(command_path: command_path)
275
303
  end
276
304
 
277
- def command
278
- command_type ||= :apk_analyzer
279
- @command ||= COMMAND_TYPE_MAP[command_type.to_sym].new(command_path: command_path)
305
+ # @param [StandardError] err a happened error
306
+ # @return [NilClass]
307
+ def on_error(err)
308
+ warn err.message
309
+ err.backtrace&.each { |line| warn line }
310
+ nil
280
311
  end
281
312
  end
282
313
  end
@@ -4,22 +4,67 @@ require File.expand_path("spec_helper", __dir__)
4
4
 
5
5
  module Danger
6
6
  describe Danger::DangerApkstats do
7
+ before do
8
+ ENV.delete("ANDROID_HOME")
9
+ ENV.delete("ANDROID_SDK_ROOT")
10
+ end
11
+
7
12
  it "should be a plugin" do
8
13
  expect(Danger::DangerApkstats.new(nil)).to be_a Danger::Plugin
9
14
  end
10
15
 
11
- #
12
- # You should test your custom attributes and methods here
13
- #
14
16
  describe "with Dangerfile" do
15
- before do
16
- @dangerfile = testing_dangerfile
17
- @my_plugin = @dangerfile.apkstats
17
+ let(:dangerfile) { testing_dangerfile }
18
+ let(:apkstats) { dangerfile.apkstats }
18
19
 
19
- # mock the PR data
20
- # you can then use this, eg. github.pr_author, later in the spec
20
+ before do
21
21
  json = File.read(fixture_path + "github_pr.json")
22
- allow(@my_plugin.github).to receive(:pr_json).and_return(json)
22
+ allow(apkstats.github).to receive(:pr_json).and_return(json)
23
+ end
24
+
25
+ # compatibility
26
+ describe "#command_path=" do
27
+ context "unless command_path is given" do
28
+ it { expect { apkstats.send(:apkanalyzer_command) }.to raise_error(Danger::DangerApkstats::Error) }
29
+
30
+ context "with ANDROID_HOME" do
31
+ before do
32
+ ENV["ANDROID_HOME"] = "dummy"
33
+ end
34
+
35
+ it { expect(apkstats.send(:apkanalyzer_command)).to be_kind_of(Apkstats::Command::ApkAnalyzer) }
36
+ end
37
+ end
38
+
39
+ context "if command_path is given" do
40
+ before do
41
+ apkstats.command_path = "dummy"
42
+ end
43
+
44
+ it { expect(apkstats.send(:apkanalyzer_command)).to be_kind_of(Apkstats::Command::ApkAnalyzer) }
45
+ end
46
+ end
47
+
48
+ describe "#apkanalyzer_path=" do
49
+ context "unless analyzer_path is given" do
50
+ it { expect { apkstats.send(:apkanalyzer_command) }.to raise_error(Danger::DangerApkstats::Error) }
51
+
52
+ context "with ANDROID_HOME" do
53
+ before do
54
+ ENV["ANDROID_HOME"] = "dummy"
55
+ end
56
+
57
+ it { expect(apkstats.send(:apkanalyzer_command)).to be_kind_of(Apkstats::Command::ApkAnalyzer) }
58
+ end
59
+ end
60
+
61
+ context "if analyzer_path is given" do
62
+ before do
63
+ apkstats.apkanalyzer_path = "dummy"
64
+ end
65
+
66
+ it { expect(apkstats.send(:apkanalyzer_command)).to be_kind_of(Apkstats::Command::ApkAnalyzer) }
67
+ end
23
68
  end
24
69
  end
25
70
  end
@@ -12,13 +12,12 @@ module Apkstats::Command
12
12
  let(:apk_other5) { fixture_path + "app-other5.apk" }
13
13
  let(:apk_method64k) { fixture_path + "app-method64k.apk" }
14
14
 
15
- it "should use custom path if set" do
16
- expect(ApkAnalyzer.new({}).command_path).to eq("#{ENV.fetch('ANDROID_HOME')}/tools/bin/apkanalyzer")
15
+ it "should use command_path" do
17
16
  expect(ApkAnalyzer.new(command_path: "/y/z").command_path).to eq("/y/z")
18
17
  end
19
18
 
20
19
  context "command" do
21
- let(:command) { ApkAnalyzer.new({}) }
20
+ let(:command) { ApkAnalyzer.new(command_path: ENV.fetch("APKANALYZER_PATH")) }
22
21
 
23
22
  it "file_size should return apk size" do
24
23
  expect(command.file_size(apk_base)).to eq(1_621_248.to_s)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: danger-apkstats
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jumpei Matsuda
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-08-16 00:00:00.000000000 Z
11
+ date: 2020-06-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: danger-plugin-api
@@ -24,34 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.0'
27
- - !ruby/object:Gem::Dependency
28
- name: bundler
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '1.3'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '1.3'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: rake
43
29
  requirement: !ruby/object:Gem::Requirement
44
30
  requirements:
45
31
  - - "~>"
46
32
  - !ruby/object:Gem::Version
47
- version: '10.0'
33
+ version: '13.0'
48
34
  type: :development
49
35
  prerelease: false
50
36
  version_requirements: !ruby/object:Gem::Requirement
51
37
  requirements:
52
38
  - - "~>"
53
39
  - !ruby/object:Gem::Version
54
- version: '10.0'
40
+ version: '13.0'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: rspec
57
43
  requirement: !ruby/object:Gem::Requirement
@@ -150,17 +136,17 @@ dependencies:
150
136
  - - ">="
151
137
  - !ruby/object:Gem::Version
152
138
  version: '0'
153
- description: To inpsect android application file with danger.
139
+ description: To inspect android application file with danger.
154
140
  email:
155
141
  - jmatsu.drm@gmail.com
156
142
  executables: []
157
143
  extensions: []
158
144
  extra_rdoc_files: []
159
145
  files:
160
- - ".bundle/config"
146
+ - ".circleci/android-sdk-license"
147
+ - ".circleci/config.yml"
161
148
  - ".gitignore"
162
149
  - ".rubocop.yml"
163
- - ".travis.yml"
164
150
  - Dangerfile.sample
165
151
  - Gemfile
166
152
  - Gemfile.lock
@@ -208,8 +194,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
208
194
  - !ruby/object:Gem::Version
209
195
  version: '0'
210
196
  requirements: []
211
- rubyforge_project:
212
- rubygems_version: 2.4.5
197
+ rubygems_version: 3.1.2
213
198
  signing_key:
214
199
  specification_version: 4
215
200
  summary: This is a danger plugin to inspect android application file.
@@ -1,3 +0,0 @@
1
- ---
2
- BUNDLE_PATH: "vendor/bundle"
3
- BUNDLE_CLEAN: "true"
@@ -1,25 +0,0 @@
1
- language: ruby
2
- cache:
3
- directories:
4
- - vendor/bundle
5
- - sdk
6
-
7
- rvm:
8
- - 2.3.7
9
- - 2.4.4
10
- - 2.5.1
11
-
12
- script:
13
- - |
14
- version='4333796'
15
-
16
- if [ "$(cat sdk/.sdk_tools_version || echo)" != "$version" ]; then
17
- rm -fr sdk || :
18
- mkdir -p sdk/licenses
19
- curl -o sdk-tools-linux.zip "https://dl.google.com/android/repository/sdk-tools-linux-$version.zip"
20
- unzip "sdk-tools-linux.zip" -d sdk
21
- fi
22
-
23
- echo "d56f5187479451eabf01fb78af6dfcb131a6481e" > sdk/licenses/android-sdk-license
24
- sdk/tools/bin/sdkmanager "build-tools;27.0.3"
25
- - ANDROID_HOME="$PWD/sdk" bundle exec rake spec