app-info 1.0.5 → 1.1.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
2
  SHA256:
3
- metadata.gz: 2bf264f18dbf80e47d3715f43f01ceaf6ec2e062fe01af5e53f4d5f52187b62a
4
- data.tar.gz: 1ff376b2a1c33f48da9457315808b8989171f0ce1c0506960b20094b553941b3
3
+ metadata.gz: 348142dbbeecec1ec30e820e2ec8c37a5d9be66ebc5926e5d733614c3a810147
4
+ data.tar.gz: a0d411d78587fc3a83d83d1b077d0c4662742eb5dee1860a95d32b7296cb560a
5
5
  SHA512:
6
- metadata.gz: e0eeda4ee3ba27271b0b31b1a7aba97ed18170a9aa4727d1fa0858caaedcd26851443f859d29e36f9e766fc3d49fb3489352796158a1bb110b8598c7787e075c
7
- data.tar.gz: 80bec4b6eab70c8584b7965cfc60b0494557941810db0f8383823f08d42ab17c583a87e916b3e6aff6bd54db427e4c4b19b3cf1d29d20e3de8d6feaab52f308a
6
+ metadata.gz: acf5cee8ba9187a39709a8dd0c7bab31f501d04265b563a2b419b28a1e4352509fb290127ad37eb368eca741c309067fef6ba80b4a6152991bdf30f3425cd669
7
+ data.tar.gz: f911bc65aa41ebc8b4dadf2f3d765a81b1205207fb770b68ba931a28d858f0e77cd5808ff9c6faaf09c986d00b52b463b70fd470d3876ae4aa5d318191feacc3
data/Gemfile CHANGED
@@ -1,5 +1,5 @@
1
1
  source 'https://rubygems.org'
2
- # source 'https://gems.ruby-china.org'
2
+ # source 'https://gems.ruby-china.com'
3
3
 
4
4
  # Specify your gem's dependencies in app-info.gemspec
5
5
  gemspec
data/README.md CHANGED
@@ -51,6 +51,14 @@ Teardown suport iPhone/iPad/Universal.
51
51
  ```ruby
52
52
  ipa = AppInfo.parse('iphone.ipa')
53
53
 
54
+ # get app file size
55
+ ipa.size
56
+ # => 3093823
57
+
58
+ # get app file size in human reable.
59
+ ipa.size(true)
60
+ # => 29 MB
61
+
54
62
  # get app release version
55
63
  ipa.release_version
56
64
  # => 1.0
@@ -109,12 +117,20 @@ profile.devices
109
117
  ```ruby
110
118
  apk = AppInfo.parse('android.apk')
111
119
 
120
+ # get app file size
121
+ ipa.size
122
+ # => 3093823
123
+
124
+ # get app file size in human reable.
125
+ ipa.size(true)
126
+ # => 29 MB
127
+
112
128
  # get app release version
113
129
  apk.release_version
114
130
  # => 1.0
115
131
 
116
132
  # get app package name
117
- apk.package_namebundle_id
133
+ apk.bundle_id
118
134
  # => com.icyleaf.AppInfoDemo
119
135
 
120
136
  # get app icons
@@ -125,6 +141,26 @@ apk.icons
125
141
  apk.min_sdk_version
126
142
  # => 13
127
143
 
144
+ # get use_permissions list
145
+ apk.use_permissions
146
+ # => [...]
147
+
148
+ # get activitiy list
149
+ apk.activities
150
+ # => [...]
151
+
152
+ # get service list
153
+ apk.services
154
+ # => [...]
155
+
156
+ # get certificate list
157
+ apk.certificates
158
+ # => [...]
159
+
160
+ # get sign list
161
+ apk.signs
162
+ # => [...]
163
+
128
164
  # detect app type (It's difficult to detect phone or tablet)
129
165
  ipa.tv?
130
166
  ipa.wear?
data/Rakefile CHANGED
@@ -1,5 +1,5 @@
1
- #$LOAD_PATH.unshift File.expand_path('lib', __FILE__)
2
- #require 'app_info'
1
+ $LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
2
+ require 'app_info'
3
3
  require 'bundler/gem_tasks'
4
4
  require 'rspec/core/rake_task'
5
5
 
data/app_info.gemspec CHANGED
@@ -22,7 +22,7 @@ Gem::Specification.new do |spec|
22
22
  spec.add_dependency 'ruby_android', '~> 0.7.7'
23
23
  spec.add_dependency 'image_size', '~> 1.5.0'
24
24
 
25
- spec.add_development_dependency 'bundler', '~> 1.12'
26
- spec.add_development_dependency 'rake', '~> 10.0'
25
+ spec.add_development_dependency 'bundler', '>= 1.12'
26
+ spec.add_development_dependency 'rake', '>= 10.0'
27
27
  spec.add_development_dependency 'rspec', '~> 3.0'
28
28
  end
@@ -14,5 +14,27 @@ module AppInfo
14
14
  def self.mac?
15
15
  RbConfig::CONFIG['host_os'] =~ /darwin/ ? true : false
16
16
  end
17
+
18
+ module Util
19
+ FILE_SIZE_UNITS = %w[B KB MB GB TB].freeze
20
+
21
+ def self.file_size(file, humanable)
22
+ file_size = File.size(file)
23
+ humanable ? size_to_humanable(file_size) : file_size
24
+ end
25
+
26
+ def self.size_to_humanable(number)
27
+ if number.to_i < 1024
28
+ exponent = 0
29
+ else
30
+ max_exp = FILE_SIZE_UNITS.size - 1
31
+ exponent = (Math.log(number) / Math.log(1024)).to_i
32
+ exponent = max_exp if exponent > max_exp
33
+ number = format('%.2f', (number / (1024**exponent.to_f)))
34
+ end
35
+
36
+ "#{number} #{FILE_SIZE_UNITS[exponent]}"
37
+ end
38
+ end
17
39
  end
18
40
  end
@@ -22,6 +22,10 @@ module AppInfo
22
22
  @apk = ::Android::Apk.new(file)
23
23
  end
24
24
 
25
+ def size(humanable = false)
26
+ AppInfo::Parser::Util.file_size(@file, humanable)
27
+ end
28
+
25
29
  def os
26
30
  Parser::Platform::ANDROID
27
31
  end
@@ -58,11 +62,11 @@ module AppInfo
58
62
  # end
59
63
 
60
64
  def wear?
61
- uses_features.include?('android.hardware.type.watch')
65
+ use_features.include?('android.hardware.type.watch')
62
66
  end
63
67
 
64
68
  def tv?
65
- uses_features.include?('android.software.leanback')
69
+ use_features.include?('android.software.leanback')
66
70
  end
67
71
 
68
72
  def min_sdk_version
@@ -73,12 +77,36 @@ module AppInfo
73
77
  manifest.doc.elements['/manifest/uses-sdk'].attributes['targetSdkVersion'].to_i
74
78
  end
75
79
 
76
- def uses_features
77
- uses_features = []
78
- manifest.doc.each_element('/manifest/uses-feature') do |elem|
79
- uses_features << elem.attributes['name']
80
+ def use_permissions
81
+ manifest.use_permissions
82
+ end
83
+
84
+ def use_features
85
+ manifest_values('/manifest/uses-feature')
86
+ end
87
+
88
+ def signs
89
+ @apk.signs.each_with_object([]) do |(path, sign), obj|
90
+ obj << Sign.new(path, sign)
80
91
  end
81
- uses_features.uniq
92
+ end
93
+
94
+ def certificates
95
+ @apk.certificates.each_with_object([]) do |(path, certificate), obj|
96
+ obj << Certificate.new(path, certificate)
97
+ end
98
+ end
99
+
100
+ def activities
101
+ components.select {|c| c.type == 'activity' }
102
+ end
103
+
104
+ def services
105
+ components.select {|c| c.type == 'service' }
106
+ end
107
+
108
+ def components
109
+ manifest.components
82
110
  end
83
111
 
84
112
  def manifest
@@ -89,6 +117,10 @@ module AppInfo
89
117
  @apk.resource
90
118
  end
91
119
 
120
+ def dex
121
+ @apk.dex
122
+ end
123
+
92
124
  def icons
93
125
  unless @icons
94
126
  tmp_path = File.join(Dir.mktmpdir, "AppInfo-android-#{SecureRandom.hex}")
@@ -116,6 +148,32 @@ module AppInfo
116
148
  alias identifier bundle_id
117
149
  alias package_name bundle_id
118
150
  alias device_type os
151
+
152
+ private
153
+
154
+ def manifest_values(path, key = 'name')
155
+ values = []
156
+ manifest.doc.each_element(path) do |elem|
157
+ values << elem.attributes[key]
158
+ end
159
+ values.uniq
160
+ end
161
+
162
+ class Certificate
163
+ attr_reader :path, :certificate
164
+ def initialize(path, certificate)
165
+ @path = path
166
+ @certificate = certificate
167
+ end
168
+ end # /Certificate
169
+
170
+ class Sign
171
+ attr_reader :path, :sign
172
+ def initialize(path, sign)
173
+ @path = path
174
+ @sign = sign
175
+ end
176
+ end # /Certificate
119
177
  end # /APK
120
178
  end # /Parser
121
179
  end # /AppInfo
@@ -24,6 +24,10 @@ module AppInfo
24
24
  @app_path = app_path
25
25
  end
26
26
 
27
+ def size(humanable = false)
28
+ AppInfo::Parser::Util.file_size(@file, humanable)
29
+ end
30
+
27
31
  def os
28
32
  Parser::Platform::IOS
29
33
  end
@@ -1,3 +1,3 @@
1
1
  module AppInfo
2
- VERSION = '1.0.5'.freeze
2
+ VERSION = '1.1.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: app-info
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.5
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - icyleaf
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-30 00:00:00.000000000 Z
11
+ date: 2019-06-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: CFPropertyList
@@ -76,28 +76,28 @@ dependencies:
76
76
  name: bundler
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
- - - "~>"
79
+ - - ">="
80
80
  - !ruby/object:Gem::Version
81
81
  version: '1.12'
82
82
  type: :development
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
- - - "~>"
86
+ - - ">="
87
87
  - !ruby/object:Gem::Version
88
88
  version: '1.12'
89
89
  - !ruby/object:Gem::Dependency
90
90
  name: rake
91
91
  requirement: !ruby/object:Gem::Requirement
92
92
  requirements:
93
- - - "~>"
93
+ - - ">="
94
94
  - !ruby/object:Gem::Version
95
95
  version: '10.0'
96
96
  type: :development
97
97
  prerelease: false
98
98
  version_requirements: !ruby/object:Gem::Requirement
99
99
  requirements:
100
- - - "~>"
100
+ - - ">="
101
101
  - !ruby/object:Gem::Version
102
102
  version: '10.0'
103
103
  - !ruby/object:Gem::Dependency