class AppInfo::APK
Parse APK
file
Attributes
file[R]
Public Class Methods
new(file)
click to toggle source
# File lib/app_info/apk.rb, line 22 def initialize(file) @file = file end
Public Instance Methods
activities()
click to toggle source
# File lib/app_info/apk.rb, line 104 def activities components.select { |c| c.type == 'activity' } end
apk()
click to toggle source
# File lib/app_info/apk.rb, line 112 def apk @apk ||= ::Android::Apk.new(@file) end
certificates()
click to toggle source
# File lib/app_info/apk.rb, line 98 def certificates apk.certificates.each_with_object([]) do |(path, certificate), obj| obj << Certificate.new(path, certificate) end end
clear!()
click to toggle source
# File lib/app_info/apk.rb, line 132 def clear! return unless @contents FileUtils.rm_rf(@contents) @apk = nil @contents = nil @icons = nil @app_path = nil @info = nil end
contents()
click to toggle source
# File lib/app_info/apk.rb, line 144 def contents @contents ||= File.join(Dir.mktmpdir, "AppInfo-android-#{SecureRandom.hex}") end
device_type()
click to toggle source
# File lib/app_info/apk.rb, line 53 def device_type if wear? Device::WATCH elsif tv? Device::TV else Device::PHONE end end
icons()
click to toggle source
# File lib/app_info/apk.rb, line 116 def icons @icons ||= apk.icon.each_with_object([]) do |(path, data), obj| icon_name = File.basename(path) icon_path = File.join(contents, File.dirname(path)) icon_file = File.join(icon_path, icon_name) FileUtils.mkdir_p icon_path File.write(icon_file, data, encoding: Encoding::BINARY) obj << { name: icon_name, file: icon_file, dimensions: ImageSize.path(icon_file).size } end end
min_sdk_version()
click to toggle source
# File lib/app_info/apk.rb, line 76 def min_sdk_version manifest.min_sdk_ver end
Also aliased as: min_os_version
name()
click to toggle source
# File lib/app_info/apk.rb, line 49 def name manifest.label || resource.find('@string/app_name') end
os()
click to toggle source
# File lib/app_info/apk.rb, line 30 def os AppInfo::Platform::ANDROID end
Also aliased as: file_type
services()
click to toggle source
# File lib/app_info/apk.rb, line 108 def services components.select { |c| c.type == 'service' } end
signs()
click to toggle source
# File lib/app_info/apk.rb, line 92 def signs apk.signs.each_with_object([]) do |(path, sign), obj| obj << Sign.new(path, sign) end end
size(human_size: false)
click to toggle source
# File lib/app_info/apk.rb, line 26 def size(human_size: false) AppInfo::Util.file_size(@file, human_size) end
target_sdk_version()
click to toggle source
# File lib/app_info/apk.rb, line 81 def target_sdk_version manifest.doc .elements['/manifest/uses-sdk'] .attributes['targetSdkVersion'] .to_i end
tv?()
click to toggle source
# File lib/app_info/apk.rb, line 72 def tv? use_features.include?('android.software.leanback') end
use_features()
click to toggle source
# File lib/app_info/apk.rb, line 88 def use_features manifest_values('/manifest/uses-feature') end
version_code()
click to toggle source
# File lib/app_info/apk.rb, line 44 def version_code manifest.version_code.to_s end
Also aliased as: build_version
wear?()
click to toggle source
TODO: find a way to detect def tablet?
resource
end
# File lib/app_info/apk.rb, line 68 def wear? use_features.include?('android.hardware.type.watch') end
Private Instance Methods
manifest_values(path, key = 'name')
click to toggle source
# File lib/app_info/apk.rb, line 150 def manifest_values(path, key = 'name') values = [] manifest.doc.each_element(path) do |elem| values << elem.attributes[key] end values.uniq end