class Danger::DangerAndroidPermissionsChecker

Check permissions between current permissions and APK generated on CI service. If changed, show permissions which added or deleted.

@example Running Android permissions checker with its basic configuration

android_permissions_checker.check(
  apk: '/path/to/generated_apk_by_CI',
  permission_list_file: /path/to/permissions.txt
)

@example Running Android permissions checker with specific report method

android_permissions_checker.report_method = 'fail'
android_permissions_checker.check(
  apk: '/path/to/generated_apk_by_CI',
  permission_list_file: /path/to/permissions.txt
)

@see mataku/danger-android_permissions_checker @tags android, permissions, apk

Constants

REPORT_METHODS

Attributes

report_method[RW]

Optional Set report method

@return [String, Symbol] error by default

Public Instance Methods

check(apk: nil, permission_list_file: nil) click to toggle source

Calls permissions check. @return [void]

# File lib/android_permissions_checker/plugin.rb, line 34
def check(apk: nil, permission_list_file: nil)
  if apk.nil? || !File.exist?(apk)
    raise "Can't find apk: #{apk}"
  end

  if permission_list_file.nil? || !File.exist?(permission_list_file)
    raise "Can't find permission list file: #{permission_list_file}\n"
  end

  unless system 'which aapt > /dev/null 2>&1'
    raise "Can't find required command: aapt. Set PATH to Android Build-tools."
  end

  @report_method = (report_method || :warn).to_sym
  unless REPORT_METHODS.include?(report_method)
    raise "Unknown report method: #{report_method}"
  end

  generated_permissions = `aapt d permissions #{apk}`.split("\n")
  current_permissions = File.open(permission_list_file).readlines.map(&:chomp)

  deleted = current_permissions - generated_permissions
  added = generated_permissions - current_permissions
  message = ""

  if deleted.length > 0
    message += "### Deleted permissions\n"
    deleted.each do |v|
      message += "- #{v}\n"
    end
    message += "\n"
  end

  if added.length > 0
    message += "### Added Permissions\n"

    added.each do |v|
      message += "- #{v}\n"
    end
  end

  unless message.empty?
    markdown(message)
    send(report_method, "APK permissions changed, see below. Should update `#{permission_list_file}` if it is intended change.")
  end
end