Sha256: 7d92820aa967476f6decdb342e5b7cc7c8c7c47f22a5919015df7e419edeb3ef
Contents?: true
Size: 1.73 KB
Versions: 3
Compression:
Stored size: 1.73 KB
Contents
# frozen_string_literal: true require 'nokogiri' require 'yaml' require 'headdesk/apk/class' require 'headdesk/apk/resources' require 'headdesk/check' require 'headdesk/report' module Headdesk # # Representation of an APK file unpacked by apktool # # :reek:TooManyInstanceVariables class Apk attr_reader :yaml, :sdk_info, :android_manifest, :resources # :reek:TooManyStatements def initialize(path) @path = path android_manifest_xml = File.join(@path, 'AndroidManifest.xml').freeze apktool_yml = File.join(@path, 'apktool.yml').freeze unless File.exist?(android_manifest_xml) && File.exist?(apktool_yml) throw CliError.new('Path did not contain AndroidManifest.xml and/or apktool.yml') end @yaml = YAML.load_file(apktool_yml) @sdk_info = @yaml['sdkInfo'] @resources = Resources.new(@path) @android_manifest = File.open(android_manifest_xml) do |file| Nokogiri::XML(file) end end def analyze report = Headdesk::APKReport.new(self) Headdesk::Check.for_apk.each do |check_type| check = check_type.new(self) report << check.process end # TODO: Associated domains report end def target_sdk_version sdk_info['targetSdkVersion'].to_i end def min_sdk_version sdk_info['minSdkVersion'].to_i end def targets_sdk(gt_eq) target_sdk_version >= gt_eq end def min_sdk(gt_eq) min_sdk_version >= gt_eq end def class?(decl) find_class(decl) != false end def find_class(decl) file_name = File.join(@path, 'smali', "#{Class.path_for(decl)}.smali") return nil unless File.exist? file_name Class.new(file_name) end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
headdesk-0.8.0 | lib/headdesk/apk.rb |
headdesk-0.7.0 | lib/headdesk/apk.rb |
headdesk-0.6.0 | lib/headdesk/apk.rb |