app-info 1.0.5 → 1.1.0

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: 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