class Dryrun::AndroidProject

Public Class Methods

new(path, custom_app_path, custom_module, flavour, device) click to toggle source
# File lib/dryrun/android_project.rb, line 11
def initialize(path, custom_app_path, custom_module, flavour, device)
  @custom_app_path = custom_app_path
  @custom_module = custom_module
  @base_path = @custom_app_path ? File.join(path, @custom_app_path) : path
  @flavour = flavour
  @device = device
  @gradle_file_extension = gradle_file_extension
  @settings_gradle_path = settings_gradle_file
  @main_gradle_file = main_gradle_file

  check_custom_app_path

  @modules = find_modules
end

Public Instance Methods

check_custom_app_path() click to toggle source
# File lib/dryrun/android_project.rb, line 34
def check_custom_app_path
  return unless @custom_app_path

  full_custom_path = @base_path
  settings_path = settings_gradle_file(full_custom_path)
  main_gradle_path = main_gradle_file(full_custom_path)
  return unless valid?(main_gradle_path)

  @settings_gradle_path = settings_path
  @main_gradle_file = main_gradle_file

  @base_path = full_custom_path
end
create_builder() click to toggle source
# File lib/dryrun/android_project.rb, line 170
def create_builder
  builder = 'gradle'

  if File.exist?('gradlew')
    if !Gem.win_platform?
      DryrunUtils.execute('chmod +x gradlew')
    else
      DryrunUtils.execute('icacls gradlew /T')
    end
    builder = './gradlew'
  end

  # Generate the gradle/ folder
  DryrunUtils.execute('gradle wrap') if File.exist?('gradlew') && !gradle_wrapped?
  GradleAdapter.new(builder)
end
execute_command(command) click to toggle source
# File lib/dryrun/android_project.rb, line 99
def execute_command(command)
  Dir.chdir @base_path

  path = sample_project
  if path == false or !@launcher_activity
    puts "Couldn't open or there isnt any sample project, sorry!".red
    exit 1
  end

  builder = create_builder

  remove_application_id
  remove_local_properties

  command.run(builder, @package, @launcher_activity, @custom_module, @flavour, @device)
end
find_modules() click to toggle source
# File lib/dryrun/android_project.rb, line 88
def find_modules
  return [] unless valid?

  content = File.open(@settings_gradle_path, 'rb').read
  
  content = content.split(/\n/).delete_if { |x| !x.start_with?("include")}.join("\n")
  modules = content.scan(/'([^']*)'/) + content.scan(/\"([^"]*)\"/)
  
  modules.each {|replacement| replacement.first.tr!(':', '')}
end
get_manifest(path_to_sample) click to toggle source
# File lib/dryrun/android_project.rb, line 157
def get_manifest(path_to_sample)
  default_path = File.join(path_to_sample, 'src/main/AndroidManifest.xml')

  if File.exist?(default_path)
    File.open(default_path)
  else
    puts path_to_sample
    Find.find(path_to_sample) do |path|
      return File.open(path) if path =~ /.*AndroidManifest.xml$/
    end
  end
end
gradle_file_extension() click to toggle source
# File lib/dryrun/android_project.rb, line 26
def gradle_file_extension
  gradle_file = File.join(@base_path, 'settings.gradle.kts')
  if (File.exist?(gradle_file))
    return ".gradle.kts"
  end
  ".gradle"
end
gradle_wrapped?() click to toggle source
# File lib/dryrun/android_project.rb, line 116
def gradle_wrapped?
  return false unless File.directory?('gradle/')

  File.exist?('gradle/wrapper/gradle-wrapper.properties') &&
      File.exist?('gradle/wrapper/gradle-wrapper.jar')
end
main_gradle_file(path = @base_path) click to toggle source
# File lib/dryrun/android_project.rb, line 79
def main_gradle_file(path = @base_path)
  File.join(path, "build#{@gradle_file_extension}")
end
parse_manifest(path_to_sample) click to toggle source
# File lib/dryrun/android_project.rb, line 145
def parse_manifest(path_to_sample)
  manifest_file = get_manifest(path_to_sample)

  return false if manifest_file.nil?

  manifest_parser = ManifestParser.new(manifest_file)
  @package = manifest_parser.package
  @launcher_activity = manifest_parser.launcher_activity
  manifest_file.close
  @launcher_activity && @package
end
remove_application_id() click to toggle source
# File lib/dryrun/android_project.rb, line 57
def remove_application_id
  # Open temporary file
  tmp = Tempfile.new('extract')

  file = "#{@path_to_sample}/build#{@gradle_file_extension}"

  # Write good lines to temporary file
  File.open(file, 'r') do |f|
    f.each do |l|
      tmp << l unless l.include? 'applicationId'
    end
  end
  tmp.close

  # Move temp file to origin
  FileUtils.mv(tmp.path, file)
end
remove_local_properties() click to toggle source
# File lib/dryrun/android_project.rb, line 48
def remove_local_properties
  Dir.chdir @base_path
  file_name = 'local.properties'

  File.delete(file_name) if File.exist?(file_name)

  DryrunUtils.execute("touch #{file_name}") unless Gem.win_platform?
end
sample_project() click to toggle source
# File lib/dryrun/android_project.rb, line 123
def sample_project
  if @custom_module && @modules.any? {|m| m.first == "#{@custom_module}"}
    @path_to_sample = File.join(@base_path, "#{@custom_module}")
    return @path_to_sample if parse_manifest(@path_to_sample)
  else
    @modules.each do |child|
      full_path = File.join(@base_path, child.first)
      @path_to_sample = full_path
      return full_path if parse_manifest(full_path)
    end
  end
  false
end
settings_gradle_file(path = @base_path) click to toggle source
# File lib/dryrun/android_project.rb, line 75
def settings_gradle_file(path = @base_path)
  File.join(path, "settings#{@gradle_file_extension}")
end
uninstall_application() click to toggle source
# File lib/dryrun/android_project.rb, line 141
def uninstall_application
  DryrunUtils.run_adb("shell pm uninstall #{@package}")
end
uninstall_command() click to toggle source
# File lib/dryrun/android_project.rb, line 137
def uninstall_command
  "adb uninstall \"#{@package}\""
end
valid?(main_gradle_file = @main_gradle_file) click to toggle source
# File lib/dryrun/android_project.rb, line 83
def valid?(main_gradle_file = @main_gradle_file)
  File.exist?(main_gradle_file) &&
      File.exist?(@settings_gradle_path)
end