android_apk 0.7.0 → 0.8.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 +7 -0
- data/Gemfile +2 -2
- data/Gemfile.lock +59 -21
- data/README.md +5 -1
- data/VERSION +1 -1
- data/android_apk.gemspec +33 -28
- data/circle.yml +4 -0
- data/lib/android_apk.rb +51 -12
- data/spec/android_apk_spec.rb +42 -4
- data/spec/mock/dsa.apk +0 -0
- data/spec/mock/sample with space.apk +0 -0
- data/spec/mock/vector-icon.apk +0 -0
- metadata +27 -38
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: c34a0896e31f26b93dea4960c846da52fb17baa5
|
|
4
|
+
data.tar.gz: b4f17a56d8a4148d307027a2d94364f49d4207e7
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 72126a5303ca2c12c0d526039fe4c3786261adaa533b038d912bd557d0dddf4ef7c582e8734dce3d11506b576ca2544a57c328597dda30ffb6258d2bbaeee050
|
|
7
|
+
data.tar.gz: 644427c81abf36372542bf1d6c5bd5aa536d23ff42d9f26e151b88e365bfd59642a4969f2de0e03effffeab4519194299255e5b658294bf7d42c817b61660f6c
|
data/Gemfile
CHANGED
|
@@ -6,9 +6,9 @@ source "http://rubygems.org"
|
|
|
6
6
|
# Add dependencies to develop your gem here.
|
|
7
7
|
# Include everything needed to run rake, tests, features, etc.
|
|
8
8
|
group :development do
|
|
9
|
-
gem "rspec", "~> 2.
|
|
9
|
+
gem "rspec", "~> 3.2.0"
|
|
10
10
|
gem "rdoc", "~> 3.12"
|
|
11
|
-
gem "bundler", "~> 1.
|
|
11
|
+
gem "bundler", "~> 1.11.2"
|
|
12
12
|
gem "jeweler", "~> 1.8.4"
|
|
13
13
|
gem "simplecov"
|
|
14
14
|
end
|
data/Gemfile.lock
CHANGED
|
@@ -1,37 +1,75 @@
|
|
|
1
1
|
GEM
|
|
2
2
|
remote: http://rubygems.org/
|
|
3
3
|
specs:
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
addressable (2.4.0)
|
|
5
|
+
builder (3.2.2)
|
|
6
|
+
diff-lcs (1.2.5)
|
|
7
|
+
docile (1.1.5)
|
|
8
|
+
faraday (0.8.11)
|
|
9
|
+
multipart-post (~> 1.2.0)
|
|
10
|
+
git (1.3.0)
|
|
11
|
+
github_api (0.10.1)
|
|
12
|
+
addressable
|
|
13
|
+
faraday (~> 0.8.1)
|
|
14
|
+
hashie (>= 1.2)
|
|
15
|
+
multi_json (~> 1.4)
|
|
16
|
+
nokogiri (~> 1.5.2)
|
|
17
|
+
oauth2
|
|
18
|
+
hashie (3.4.3)
|
|
19
|
+
highline (1.7.8)
|
|
20
|
+
jeweler (1.8.8)
|
|
21
|
+
builder
|
|
7
22
|
bundler (~> 1.0)
|
|
8
23
|
git (>= 1.2.5)
|
|
24
|
+
github_api (= 0.10.1)
|
|
25
|
+
highline (>= 1.6.15)
|
|
26
|
+
nokogiri (= 1.5.10)
|
|
9
27
|
rake
|
|
10
28
|
rdoc
|
|
11
|
-
json (1.
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
29
|
+
json (1.8.3)
|
|
30
|
+
jwt (1.5.1)
|
|
31
|
+
multi_json (1.11.2)
|
|
32
|
+
multi_xml (0.5.5)
|
|
33
|
+
multipart-post (1.2.0)
|
|
34
|
+
nokogiri (1.5.10)
|
|
35
|
+
oauth2 (1.1.0)
|
|
36
|
+
faraday (>= 0.8, < 0.10)
|
|
37
|
+
jwt (~> 1.0, < 1.5.2)
|
|
38
|
+
multi_json (~> 1.3)
|
|
39
|
+
multi_xml (~> 0.5)
|
|
40
|
+
rack (>= 1.2, < 3)
|
|
41
|
+
rack (1.6.4)
|
|
42
|
+
rake (10.5.0)
|
|
43
|
+
rdoc (3.12.2)
|
|
15
44
|
json (~> 1.4)
|
|
16
|
-
rspec (2.
|
|
17
|
-
rspec-core (~> 2.
|
|
18
|
-
rspec-expectations (~> 2.
|
|
19
|
-
rspec-mocks (~> 2.
|
|
20
|
-
rspec-core (2.
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
45
|
+
rspec (3.2.0)
|
|
46
|
+
rspec-core (~> 3.2.0)
|
|
47
|
+
rspec-expectations (~> 3.2.0)
|
|
48
|
+
rspec-mocks (~> 3.2.0)
|
|
49
|
+
rspec-core (3.2.3)
|
|
50
|
+
rspec-support (~> 3.2.0)
|
|
51
|
+
rspec-expectations (3.2.1)
|
|
52
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
53
|
+
rspec-support (~> 3.2.0)
|
|
54
|
+
rspec-mocks (3.2.1)
|
|
55
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
56
|
+
rspec-support (~> 3.2.0)
|
|
57
|
+
rspec-support (3.2.2)
|
|
58
|
+
simplecov (0.11.2)
|
|
59
|
+
docile (~> 1.1.0)
|
|
60
|
+
json (~> 1.8)
|
|
61
|
+
simplecov-html (~> 0.10.0)
|
|
62
|
+
simplecov-html (0.10.0)
|
|
28
63
|
|
|
29
64
|
PLATFORMS
|
|
30
65
|
ruby
|
|
31
66
|
|
|
32
67
|
DEPENDENCIES
|
|
33
|
-
bundler (~> 1.
|
|
68
|
+
bundler (~> 1.11.2)
|
|
34
69
|
jeweler (~> 1.8.4)
|
|
35
70
|
rdoc (~> 3.12)
|
|
36
|
-
rspec (~> 2.
|
|
71
|
+
rspec (~> 3.2.0)
|
|
37
72
|
simplecov
|
|
73
|
+
|
|
74
|
+
BUNDLED WITH
|
|
75
|
+
1.11.2
|
data/README.md
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
#Android APK
|
|
2
|
+
|
|
3
|
+
[](https://circleci.com/gh/kyoro/android_apk)
|
|
4
|
+
|
|
2
5
|
This gem library is Android application package file (.apk) analyzer.
|
|
3
6
|
you can read any information of android apk files.
|
|
4
7
|
|
|
5
8
|
## Attention
|
|
9
|
+
|
|
6
10
|
You must set path to 'AndroidSDK/platform-tools'.
|
|
7
11
|
And you must can execute 'aapt' command.
|
|
8
12
|
|
|
@@ -19,7 +23,7 @@ apk.label #Application Name
|
|
|
19
23
|
apk.package_name #Package Name
|
|
20
24
|
apk.icon #Included Icon file in apk file
|
|
21
25
|
apk.version_code #Version Code
|
|
22
|
-
apk.version_name
|
|
26
|
+
apk.version_name #Version Name
|
|
23
27
|
```
|
|
24
28
|
|
|
25
29
|
## License
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.8.0
|
data/android_apk.gemspec
CHANGED
|
@@ -2,16 +2,18 @@
|
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
|
5
|
+
# stub: android_apk 0.8.0 ruby lib
|
|
5
6
|
|
|
6
7
|
Gem::Specification.new do |s|
|
|
7
|
-
s.name = "android_apk"
|
|
8
|
-
s.version = "0.
|
|
8
|
+
s.name = "android_apk".freeze
|
|
9
|
+
s.version = "0.8.0"
|
|
9
10
|
|
|
10
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
11
|
-
s.
|
|
12
|
-
s.
|
|
13
|
-
s.
|
|
14
|
-
s.
|
|
11
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
|
12
|
+
s.require_paths = ["lib".freeze]
|
|
13
|
+
s.authors = ["Kyosuke INOUE".freeze]
|
|
14
|
+
s.date = "2016-03-01"
|
|
15
|
+
s.description = "This library can analyze Android APK application package. You can get any information of android apk file.".freeze
|
|
16
|
+
s.email = "kyoro@hakamastyle.net".freeze
|
|
15
17
|
s.extra_rdoc_files = [
|
|
16
18
|
"LICENSE.txt",
|
|
17
19
|
"README.md"
|
|
@@ -26,42 +28,45 @@ Gem::Specification.new do |s|
|
|
|
26
28
|
"Rakefile",
|
|
27
29
|
"VERSION",
|
|
28
30
|
"android_apk.gemspec",
|
|
31
|
+
"circle.yml",
|
|
29
32
|
"lib/android_apk.rb",
|
|
30
33
|
"spec/android_apk_spec.rb",
|
|
31
34
|
"spec/mock/BarcodeScanner4.2.apk",
|
|
32
35
|
"spec/mock/UECExpress.apk",
|
|
36
|
+
"spec/mock/dsa.apk",
|
|
33
37
|
"spec/mock/dummy.apk",
|
|
38
|
+
"spec/mock/sample with space.apk",
|
|
34
39
|
"spec/mock/sample.apk",
|
|
40
|
+
"spec/mock/vector-icon.apk",
|
|
35
41
|
"spec/spec_helper.rb"
|
|
36
42
|
]
|
|
37
|
-
s.homepage = "http://github.com/kyoro/android_apk"
|
|
38
|
-
s.licenses = ["MIT"]
|
|
39
|
-
s.
|
|
40
|
-
s.
|
|
41
|
-
s.summary = "Android APK file analyzer"
|
|
43
|
+
s.homepage = "http://github.com/kyoro/android_apk".freeze
|
|
44
|
+
s.licenses = ["MIT".freeze]
|
|
45
|
+
s.rubygems_version = "2.6.1".freeze
|
|
46
|
+
s.summary = "Android APK file analyzer".freeze
|
|
42
47
|
|
|
43
48
|
if s.respond_to? :specification_version then
|
|
44
|
-
s.specification_version =
|
|
49
|
+
s.specification_version = 4
|
|
45
50
|
|
|
46
51
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
|
47
|
-
s.add_development_dependency(%q<rspec
|
|
48
|
-
s.add_development_dependency(%q<rdoc
|
|
49
|
-
s.add_development_dependency(%q<bundler
|
|
50
|
-
s.add_development_dependency(%q<jeweler
|
|
51
|
-
s.add_development_dependency(%q<simplecov
|
|
52
|
+
s.add_development_dependency(%q<rspec>.freeze, ["~> 3.2.0"])
|
|
53
|
+
s.add_development_dependency(%q<rdoc>.freeze, ["~> 3.12"])
|
|
54
|
+
s.add_development_dependency(%q<bundler>.freeze, ["~> 1.11.2"])
|
|
55
|
+
s.add_development_dependency(%q<jeweler>.freeze, ["~> 1.8.4"])
|
|
56
|
+
s.add_development_dependency(%q<simplecov>.freeze, [">= 0"])
|
|
52
57
|
else
|
|
53
|
-
s.add_dependency(%q<rspec
|
|
54
|
-
s.add_dependency(%q<rdoc
|
|
55
|
-
s.add_dependency(%q<bundler
|
|
56
|
-
s.add_dependency(%q<jeweler
|
|
57
|
-
s.add_dependency(%q<simplecov
|
|
58
|
+
s.add_dependency(%q<rspec>.freeze, ["~> 3.2.0"])
|
|
59
|
+
s.add_dependency(%q<rdoc>.freeze, ["~> 3.12"])
|
|
60
|
+
s.add_dependency(%q<bundler>.freeze, ["~> 1.11.2"])
|
|
61
|
+
s.add_dependency(%q<jeweler>.freeze, ["~> 1.8.4"])
|
|
62
|
+
s.add_dependency(%q<simplecov>.freeze, [">= 0"])
|
|
58
63
|
end
|
|
59
64
|
else
|
|
60
|
-
s.add_dependency(%q<rspec
|
|
61
|
-
s.add_dependency(%q<rdoc
|
|
62
|
-
s.add_dependency(%q<bundler
|
|
63
|
-
s.add_dependency(%q<jeweler
|
|
64
|
-
s.add_dependency(%q<simplecov
|
|
65
|
+
s.add_dependency(%q<rspec>.freeze, ["~> 3.2.0"])
|
|
66
|
+
s.add_dependency(%q<rdoc>.freeze, ["~> 3.12"])
|
|
67
|
+
s.add_dependency(%q<bundler>.freeze, ["~> 1.11.2"])
|
|
68
|
+
s.add_dependency(%q<jeweler>.freeze, ["~> 1.8.4"])
|
|
69
|
+
s.add_dependency(%q<simplecov>.freeze, [">= 0"])
|
|
65
70
|
end
|
|
66
71
|
end
|
|
67
72
|
|
data/circle.yml
ADDED
data/lib/android_apk.rb
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
require
|
|
2
|
-
require
|
|
1
|
+
require 'tmpdir'
|
|
2
|
+
require 'shellwords'
|
|
3
|
+
require 'open3'
|
|
4
|
+
|
|
3
5
|
class AndroidApk
|
|
4
6
|
attr_accessor :results,:label,:labels,:icon,:icons,:package_name,:version_code,:version_name,:sdk_version,:target_sdk_version,:filepath
|
|
5
7
|
def self.analyze(filepath)
|
|
6
8
|
return nil unless File.exist?(filepath)
|
|
7
9
|
apk = AndroidApk.new
|
|
8
|
-
command = "aapt dump badging
|
|
10
|
+
command = "aapt dump badging #{filepath.shellescape} 2>&1"
|
|
9
11
|
results = `#{command}`
|
|
10
12
|
if $?.exitstatus != 0 or results.index("ERROR: dump failed")
|
|
11
13
|
return nil
|
|
@@ -15,8 +17,8 @@ class AndroidApk
|
|
|
15
17
|
vars = _parse_aapt(results)
|
|
16
18
|
|
|
17
19
|
# application info
|
|
18
|
-
apk.label
|
|
19
|
-
|
|
20
|
+
apk.label = vars['application-label']
|
|
21
|
+
apk.icon = vars['application']['icon']
|
|
20
22
|
|
|
21
23
|
# package
|
|
22
24
|
apk.package_name, apk.version_code, apk.version_name =
|
|
@@ -37,11 +39,17 @@ class AndroidApk
|
|
|
37
39
|
return apk
|
|
38
40
|
end
|
|
39
41
|
|
|
40
|
-
def icon_file(dpi = nil)
|
|
42
|
+
def icon_file(dpi = nil, want_png = false)
|
|
41
43
|
icon = dpi ? self.icons[dpi.to_i] : self.icon
|
|
42
44
|
return nil if icon.empty?
|
|
45
|
+
|
|
46
|
+
if want_png && icon.end_with?('.xml')
|
|
47
|
+
dpis = dpi_str(dpi)
|
|
48
|
+
icon.gsub! %r{res/drawable-anydpi-v21/([^/]+)\.xml}, "res/drawable-#{dpis}-v4/\\1.png"
|
|
49
|
+
end
|
|
50
|
+
|
|
43
51
|
Dir.mktmpdir do |dir|
|
|
44
|
-
command =
|
|
52
|
+
command = "unzip #{self.filepath.shellescape} #{icon.shellescape} -d #{dir.shellescape} 2>&1"
|
|
45
53
|
results = `#{command}`
|
|
46
54
|
path = dir + "/" + icon
|
|
47
55
|
return nil unless File.exist?(path)
|
|
@@ -49,15 +57,40 @@ class AndroidApk
|
|
|
49
57
|
end
|
|
50
58
|
end
|
|
51
59
|
|
|
60
|
+
def dpi_str(dpi)
|
|
61
|
+
case dpi.to_i
|
|
62
|
+
when 120
|
|
63
|
+
'ldpi'
|
|
64
|
+
when 160
|
|
65
|
+
'mdpi'
|
|
66
|
+
when 240
|
|
67
|
+
'hdpi'
|
|
68
|
+
when 320
|
|
69
|
+
'xhdpi'
|
|
70
|
+
when 480
|
|
71
|
+
'xxhdpi'
|
|
72
|
+
when 640
|
|
73
|
+
'xxxhdpi'
|
|
74
|
+
else
|
|
75
|
+
'xxxhdpi'
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
52
79
|
def signature
|
|
53
|
-
command =
|
|
54
|
-
|
|
55
|
-
return
|
|
56
|
-
val =
|
|
80
|
+
command = "unzip -p #{self.filepath.shellescape} META-INF/*.RSA META-INF/*.DSA | keytool -printcert | grep SHA1:"
|
|
81
|
+
output, _, status = Open3.capture3(command)
|
|
82
|
+
return if status != 0 || output.nil? || !output.index('SHA1:')
|
|
83
|
+
val = output.scan(/(?:[0-9A-Z]{2}:?){20}/)
|
|
57
84
|
return nil if val.nil? || val.length != 1
|
|
58
85
|
return val[0].gsub(/:/, "").downcase
|
|
59
86
|
end
|
|
60
87
|
|
|
88
|
+
# workaround for https://code.google.com/p/android/issues/detail?id=160847
|
|
89
|
+
def self._parse_values_workaround(str)
|
|
90
|
+
return nil if str.nil?
|
|
91
|
+
str.scan(/^'(.+)'$/).map{|v| v[0].gsub(/\\'/, "'")}
|
|
92
|
+
end
|
|
93
|
+
|
|
61
94
|
def self._parse_values(str)
|
|
62
95
|
return nil if str.nil?
|
|
63
96
|
if str.index("='")
|
|
@@ -74,7 +107,13 @@ class AndroidApk
|
|
|
74
107
|
def self._parse_line(line)
|
|
75
108
|
return nil if line.nil?
|
|
76
109
|
info = line.split(":", 2)
|
|
77
|
-
|
|
110
|
+
values =
|
|
111
|
+
if info[0].start_with?('application-label')
|
|
112
|
+
_parse_values_workaround info[1]
|
|
113
|
+
else
|
|
114
|
+
_parse_values info[1]
|
|
115
|
+
end
|
|
116
|
+
return info[0], values
|
|
78
117
|
end
|
|
79
118
|
|
|
80
119
|
def self._parse_aapt(results)
|
data/spec/android_apk_spec.rb
CHANGED
|
@@ -6,14 +6,20 @@ describe "AndroidApk" do
|
|
|
6
6
|
apk = nil
|
|
7
7
|
apk2 = nil
|
|
8
8
|
icon_not_set_apk = nil
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
|
|
10
|
+
mockdir = File.join(File.dirname(__FILE__), 'mock')
|
|
11
|
+
sample_file_path = File.join(mockdir, 'sample.apk')
|
|
12
|
+
sample2_file_path = File.join(mockdir, 'BarcodeScanner4.2.apk')
|
|
13
|
+
sample_space_file_path = File.join(mockdir, 'sample with space.apk')
|
|
14
|
+
icon_not_set_file_path = File.join(mockdir, 'UECExpress.apk')
|
|
15
|
+
dummy_file_path = File.join(mockdir, 'dummy.apk')
|
|
16
|
+
dsa_file_path = File.join(mockdir, 'dsa.apk')
|
|
17
|
+
vector_file_path = File.join(mockdir, 'vector-icon.apk')
|
|
13
18
|
|
|
14
19
|
it "Sample apk file exist" do
|
|
15
20
|
File.exist?(sample_file_path).should == true
|
|
16
21
|
File.exist?(sample2_file_path).should == true
|
|
22
|
+
File.exist?(sample_space_file_path).should == true
|
|
17
23
|
end
|
|
18
24
|
|
|
19
25
|
it "Library can not read apk file" do
|
|
@@ -86,4 +92,36 @@ describe "AndroidApk" do
|
|
|
86
92
|
icon_not_set_apk.icon_file.should == nil
|
|
87
93
|
end
|
|
88
94
|
|
|
95
|
+
context "with space character filename" do
|
|
96
|
+
subject { AndroidApk.analyze(sample_space_file_path) }
|
|
97
|
+
it 'returns analyzed data' do
|
|
98
|
+
is_expected.not_to be_nil
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
context "with DSA signing" do
|
|
103
|
+
subject { AndroidApk.analyze(dsa_file_path) }
|
|
104
|
+
it 'returns analyzed data' do
|
|
105
|
+
is_expected.not_to be_nil
|
|
106
|
+
end
|
|
107
|
+
it 'can extract signature' do
|
|
108
|
+
expect(subject.signature).to eq('2d8068f79a5840cbce499b51821aaa6c775ff3ff')
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
context "with vector icon" do
|
|
113
|
+
subject { AndroidApk.analyze(vector_file_path) }
|
|
114
|
+
it 'can be analyzed' do
|
|
115
|
+
is_expected.not_to be_nil
|
|
116
|
+
end
|
|
117
|
+
it 'has xml icon' do
|
|
118
|
+
expect(subject.icon_file).not_to be_nil
|
|
119
|
+
end
|
|
120
|
+
it 'can return png icon' do
|
|
121
|
+
expect(subject.icon_file(nil, true)).not_to be_nil
|
|
122
|
+
end
|
|
123
|
+
it 'can return png icon by specific dpi' do
|
|
124
|
+
expect(subject.icon_file(240, true)).not_to be_nil
|
|
125
|
+
end
|
|
126
|
+
end
|
|
89
127
|
end
|
data/spec/mock/dsa.apk
ADDED
|
Binary file
|
|
Binary file
|
|
Binary file
|
metadata
CHANGED
|
@@ -1,94 +1,83 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: android_apk
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
5
|
-
prerelease:
|
|
4
|
+
version: 0.8.0
|
|
6
5
|
platform: ruby
|
|
7
6
|
authors:
|
|
8
7
|
- Kyosuke INOUE
|
|
9
8
|
autorequire:
|
|
10
9
|
bindir: bin
|
|
11
10
|
cert_chain: []
|
|
12
|
-
date:
|
|
11
|
+
date: 2016-03-01 00:00:00.000000000 Z
|
|
13
12
|
dependencies:
|
|
14
13
|
- !ruby/object:Gem::Dependency
|
|
15
14
|
name: rspec
|
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
|
17
|
-
none: false
|
|
18
16
|
requirements:
|
|
19
|
-
- - ~>
|
|
17
|
+
- - "~>"
|
|
20
18
|
- !ruby/object:Gem::Version
|
|
21
|
-
version: 2.
|
|
19
|
+
version: 3.2.0
|
|
22
20
|
type: :development
|
|
23
21
|
prerelease: false
|
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
-
none: false
|
|
26
23
|
requirements:
|
|
27
|
-
- - ~>
|
|
24
|
+
- - "~>"
|
|
28
25
|
- !ruby/object:Gem::Version
|
|
29
|
-
version: 2.
|
|
26
|
+
version: 3.2.0
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
|
31
28
|
name: rdoc
|
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
|
33
|
-
none: false
|
|
34
30
|
requirements:
|
|
35
|
-
- - ~>
|
|
31
|
+
- - "~>"
|
|
36
32
|
- !ruby/object:Gem::Version
|
|
37
33
|
version: '3.12'
|
|
38
34
|
type: :development
|
|
39
35
|
prerelease: false
|
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
41
|
-
none: false
|
|
42
37
|
requirements:
|
|
43
|
-
- - ~>
|
|
38
|
+
- - "~>"
|
|
44
39
|
- !ruby/object:Gem::Version
|
|
45
40
|
version: '3.12'
|
|
46
41
|
- !ruby/object:Gem::Dependency
|
|
47
42
|
name: bundler
|
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
|
49
|
-
none: false
|
|
50
44
|
requirements:
|
|
51
|
-
- - ~>
|
|
45
|
+
- - "~>"
|
|
52
46
|
- !ruby/object:Gem::Version
|
|
53
|
-
version: 1.
|
|
47
|
+
version: 1.11.2
|
|
54
48
|
type: :development
|
|
55
49
|
prerelease: false
|
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
57
|
-
none: false
|
|
58
51
|
requirements:
|
|
59
|
-
- - ~>
|
|
52
|
+
- - "~>"
|
|
60
53
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: 1.
|
|
54
|
+
version: 1.11.2
|
|
62
55
|
- !ruby/object:Gem::Dependency
|
|
63
56
|
name: jeweler
|
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
|
65
|
-
none: false
|
|
66
58
|
requirements:
|
|
67
|
-
- - ~>
|
|
59
|
+
- - "~>"
|
|
68
60
|
- !ruby/object:Gem::Version
|
|
69
61
|
version: 1.8.4
|
|
70
62
|
type: :development
|
|
71
63
|
prerelease: false
|
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
73
|
-
none: false
|
|
74
65
|
requirements:
|
|
75
|
-
- - ~>
|
|
66
|
+
- - "~>"
|
|
76
67
|
- !ruby/object:Gem::Version
|
|
77
68
|
version: 1.8.4
|
|
78
69
|
- !ruby/object:Gem::Dependency
|
|
79
70
|
name: simplecov
|
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
|
81
|
-
none: false
|
|
82
72
|
requirements:
|
|
83
|
-
- -
|
|
73
|
+
- - ">="
|
|
84
74
|
- !ruby/object:Gem::Version
|
|
85
75
|
version: '0'
|
|
86
76
|
type: :development
|
|
87
77
|
prerelease: false
|
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
89
|
-
none: false
|
|
90
79
|
requirements:
|
|
91
|
-
- -
|
|
80
|
+
- - ">="
|
|
92
81
|
- !ruby/object:Gem::Version
|
|
93
82
|
version: '0'
|
|
94
83
|
description: This library can analyze Android APK application package. You can get
|
|
@@ -100,8 +89,8 @@ extra_rdoc_files:
|
|
|
100
89
|
- LICENSE.txt
|
|
101
90
|
- README.md
|
|
102
91
|
files:
|
|
103
|
-
- .document
|
|
104
|
-
- .rspec
|
|
92
|
+
- ".document"
|
|
93
|
+
- ".rspec"
|
|
105
94
|
- Gemfile
|
|
106
95
|
- Gemfile.lock
|
|
107
96
|
- LICENSE.txt
|
|
@@ -109,39 +98,39 @@ files:
|
|
|
109
98
|
- Rakefile
|
|
110
99
|
- VERSION
|
|
111
100
|
- android_apk.gemspec
|
|
101
|
+
- circle.yml
|
|
112
102
|
- lib/android_apk.rb
|
|
113
103
|
- spec/android_apk_spec.rb
|
|
114
104
|
- spec/mock/BarcodeScanner4.2.apk
|
|
115
105
|
- spec/mock/UECExpress.apk
|
|
106
|
+
- spec/mock/dsa.apk
|
|
116
107
|
- spec/mock/dummy.apk
|
|
108
|
+
- spec/mock/sample with space.apk
|
|
117
109
|
- spec/mock/sample.apk
|
|
110
|
+
- spec/mock/vector-icon.apk
|
|
118
111
|
- spec/spec_helper.rb
|
|
119
112
|
homepage: http://github.com/kyoro/android_apk
|
|
120
113
|
licenses:
|
|
121
114
|
- MIT
|
|
115
|
+
metadata: {}
|
|
122
116
|
post_install_message:
|
|
123
117
|
rdoc_options: []
|
|
124
118
|
require_paths:
|
|
125
119
|
- lib
|
|
126
120
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
127
|
-
none: false
|
|
128
121
|
requirements:
|
|
129
|
-
- -
|
|
122
|
+
- - ">="
|
|
130
123
|
- !ruby/object:Gem::Version
|
|
131
124
|
version: '0'
|
|
132
|
-
segments:
|
|
133
|
-
- 0
|
|
134
|
-
hash: -1128838376041237717
|
|
135
125
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
136
|
-
none: false
|
|
137
126
|
requirements:
|
|
138
|
-
- -
|
|
127
|
+
- - ">="
|
|
139
128
|
- !ruby/object:Gem::Version
|
|
140
129
|
version: '0'
|
|
141
130
|
requirements: []
|
|
142
131
|
rubyforge_project:
|
|
143
|
-
rubygems_version:
|
|
132
|
+
rubygems_version: 2.6.1
|
|
144
133
|
signing_key:
|
|
145
|
-
specification_version:
|
|
134
|
+
specification_version: 4
|
|
146
135
|
summary: Android APK file analyzer
|
|
147
136
|
test_files: []
|