class Danger::DangerApkanalyzer

Run [apkanalyzer](developer.android.com/studio/command-line/apkanalyzer.html) and print file size, permissions and number of method references.

@example Set APK file path. Required

apkanalyzer.apk_file = "path_to/app.apk"

@example Print file size of APK file

apkanalyzer.file_size

@example Print permissions used by application

apkanalyzer.permissions

@example Print number of method references

apkanalyzer.method_references

@see STAR-ZERO/danger-apkanalyzer @tags android

Constants

DEFAULT_COMMAND

Attributes

apk_file[RW]

APK file path. Required. @return [String]

command_apkanalyzer[RW]

apkanalyzer command file path. Default to “apkanalyzer” @return [String]

Public Instance Methods

file_size() click to toggle source

Print file size of APK file. @return [String]

# File lib/apkanalyzer/plugin.rb, line 40
def file_size
  if apk_file.nil?
    fail("You must set apk file path to 'apkanalyzer.apk_file'")
  end

  cmd = command_apkanalyzer || DEFAULT_COMMAND

  o, e, s = Open3.capture3("#{cmd} -h apk file-size #{apk_file};")
  if s.success?
    message = "#### APK file size\n\n"
    message << "| size |\n"
    message << "| --- |\n"
    message << "| #{o.chomp} |\n"
    message << "\n"
    markdown(message)
  else
    fail(e)
  end
end
method_references() click to toggle source

Print number of method references. @return [String]

# File lib/apkanalyzer/plugin.rb, line 86
def method_references
  if apk_file.nil?
    fail("You must set apk file path to 'apkanalyzer.apk_file'")
  end

  cmd = command_apkanalyzer || DEFAULT_COMMAND
  o, e, s = Open3.capture3("#{cmd} -h dex references #{apk_file};")
  if s.success?
    message = "#### Number of method references\n\n"
    message << "| Dex file | count |\n"
    message << "| --- | --- |\n"
    o.each_line do |line|
      v = line.chomp.split(" ")
      message << "| #{v[0]} | #{v[1]} |\n"
    end
    message << "\n"
    markdown(message)
  else
    fail(e)
  end
end
permissions() click to toggle source

Print permissions used by application. @return [String]

# File lib/apkanalyzer/plugin.rb, line 62
def permissions
  if apk_file.nil?
    fail("You must set apk file path to 'apkanalyzer.apk_file'")
  end

  cmd = command_apkanalyzer || DEFAULT_COMMAND
  o, e, s = Open3.capture3("#{cmd} -h manifest permissions #{apk_file};")
  return if o.empty?
  if s.success?
    message = "#### Permissions\n\n"
    message << "| Permissions |\n"
    message << "| --- |\n"
    o.each_line do |line|
      message << "| #{line.chomp} |\n"
    end
    message << "\n"
    markdown(message)
  else
    fail(e)
  end
end