class Fastlane::Actions::AndroidEmulatorAction

Public Class Methods

authors() click to toggle source
# File lib/fastlane/plugin/android_emulator/actions/android_emulator_action.rb, line 121
def self.authors
  ["Michael Ruhl"]
end
available_options() click to toggle source
# File lib/fastlane/plugin/android_emulator/actions/android_emulator_action.rb, line 85
def self.available_options
  [
    FastlaneCore::ConfigItem.new(key: :sdk_dir,
                                 env_name: "ANDROID_SDK_DIR",
                                 description: "Path to the Android SDK DIR",
                                 default_value: ENV['ANDROID_HOME'] || ENV['ANDROID_SDK_ROOT'] || ENV['ANDROID_SDK'],
                                 optional: false,
                                 verify_block: proc do |value|
                                   UI.user_error!("No ANDROID_SDK_DIR given, pass using `sdk_dir: 'sdk_dir'`") unless value and !value.empty?
                                 end),
    FastlaneCore::ConfigItem.new(key: :package,
                                env_name: "AVD_PACKAGE",
                                description: "The selected system image of the emulator",
                                optional: false),
    FastlaneCore::ConfigItem.new(key: :name,
                                 env_name: "AVD_NAME",
                                 description: "Name of the AVD",
                                 default_value: "fastlane",
                                 optional: false),
    FastlaneCore::ConfigItem.new(key: :port,
                                 env_name: "AVD_PORT",
                                 description: "Port of the emulator",
                                 default_value: "5554",
                                 optional: false),
    FastlaneCore::ConfigItem.new(key: :location,
                                 env_name: "AVD_LOCATION",
                                 description: "Set location of the the emulator '<longitude> <latitude>'",
                                 optional: true),
    FastlaneCore::ConfigItem.new(key: :demo_mode,
                                 env_name: "AVD_DEMO_MODE",
                                 description: "Set the emulator in demo mode",
                                 is_string: false,
                                 default_value: true)
  ]
end
description() click to toggle source
# File lib/fastlane/plugin/android_emulator/actions/android_emulator_action.rb, line 66
def self.description
  "Creates and starts an Android Emulator (AVD)"
end
details() click to toggle source
# File lib/fastlane/plugin/android_emulator/actions/android_emulator_action.rb, line 70
def self.details
  "Great for Screengrab"
end
example_code() click to toggle source
# File lib/fastlane/plugin/android_emulator/actions/android_emulator_action.rb, line 74
def self.example_code
  [
    'android_emulator(
      location: "9.1808 48.7771",
      package: "system-images;android-24;google_apis;x86_64",
      demo_mode: true,
      sdk_dir: "PATH_TO_SDK"
    )'
  ]
end
is_supported?(platform) click to toggle source
# File lib/fastlane/plugin/android_emulator/actions/android_emulator_action.rb, line 125
def self.is_supported?(platform)
  platform == :android
end
run(params) click to toggle source
# File lib/fastlane/plugin/android_emulator/actions/android_emulator_action.rb, line 7
def self.run(params)
  sdk_dir = params[:sdk_dir]
  port = params[:port]
  adb = "#{sdk_dir}/platform-tools/adb"
  
  resolution_width  = params[:resolution_width] || 1080
  resolution_height = params[:resolution_height] || 1920


  UI.message("Stopping emulator")
  system("#{adb} emu kill > /dev/null 2>&1 &")
  sleep(2)

  UI.message("Creating new emulator")
  FastlaneCore::CommandExecutor.execute(
    command: "#{sdk_dir}/tools/bin/avdmanager create avd -n '#{params[:name]}' -f -k '#{params[:package]}' -d 'Nexus 5'",
    print_all: true,
    print_command: false
  )

  UI.message("Override configuration")
  open("#{Dir.home}/.android/avd/#{params[:name]}.avd/config.ini", 'a') { |f|
    f << "hw.gpu.mode=auto\n"
    f << "hw.gpu.enabled=yes\n"
    f << "hw.lcd.height=#{resolution_width}\n"
    f << "hw.lcd.width=#{resolution_height}\n"
    f << "skin.dynamic=yes\n"
    f << "skin.name=1080x1920\n"
  }

  # Verify HAXM installed on mac
  if FastlaneCore::Helper.mac?
    kextstat = Actions.sh("kextstat", log: false)

    UI.user_error! "Please install the HAXM-Extension" unless kextstat.include?("intel")
  end

  UI.message("Starting emulator")
  system("LC_NUMERIC=C; #{sdk_dir}/tools/emulator @#{params[:name]} -port #{port} > /dev/null 2>&1 &")
  sh("#{adb} -e wait-for-device")

  until Actions.sh("#{adb} -e shell getprop init.svc.bootanim", log: false).include? "stopped" do
    sleep(5)
  end

  if params[:location]
    UI.message("Set location")
    sh("LC_NUMERIC=C; #{adb} emu geo fix #{params[:location]}")
  end

  if params[:demo_mode]
    UI.message("Set in demo mode")
    sh("#{adb} -e shell settings put global sysui_demo_allowed 1")
    sh("#{adb} -e shell am broadcast -a com.android.systemui.demo -e command clock -e hhmm 0700")
  end

  ENV['SCREENGRAB_SPECIFIC_DEVICE'] = "emulator-#{port}"
end