From 39a0c8849d0f864b832c2ab31e6d4a80b3fdafc2 Mon Sep 17 00:00:00 2001 From: Kyrylo Mikos Date: Sun, 18 Mar 2018 17:50:47 +0200 Subject: [PATCH] Check and install missing system images packages before creating emulators. --- .../actions/automated_test_emulator_run_action.rb | 12 ++++++++++-- .../factory/adb_controller_factory.rb | 7 +++++++ .../factory/avd_controller_factory.rb | 8 +++++++- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/lib/fastlane/plugin/automated_test_emulator_run/actions/automated_test_emulator_run_action.rb b/lib/fastlane/plugin/automated_test_emulator_run/actions/automated_test_emulator_run_action.rb index b85307e..7bebfd9 100644 --- a/lib/fastlane/plugin/automated_test_emulator_run/actions/automated_test_emulator_run_action.rb +++ b/lib/fastlane/plugin/automated_test_emulator_run/actions/automated_test_emulator_run_action.rb @@ -46,8 +46,16 @@ def self.run(params) UI.message("Configuring environment in order to launch emulators: ".yellow) UI.message("Getting avaliable AVDs".yellow) devices = Action.sh(adb_controller.command_get_avds) - - for i in 0...avd_schemes.length + packages = Action.sh(adb_controller.command_get_installed_packages) + + for i in 0...avd_schemes.length + unless packages.match(avd_schemes[i].create_avd_package + "\\s*|").nil? + UI.message(["Missing package ", avd_schemes[i].create_avd_package, " installing..."].join("").yellow) + Action.sh(avd_controllers[i].command_install_package) + else + UI.message(["Package ", avd_schemes[i].create_avd_package, " already installed"].join("").yellow) + end + unless devices.match(avd_schemes[i].avd_name).nil? UI.message(["AVD with name '", avd_schemes[i].avd_name, "' currently exists."].join("").yellow) if params[:AVD_recreate_new] diff --git a/lib/fastlane/plugin/automated_test_emulator_run/factory/adb_controller_factory.rb b/lib/fastlane/plugin/automated_test_emulator_run/factory/adb_controller_factory.rb index 4271093..c540dd5 100644 --- a/lib/fastlane/plugin/automated_test_emulator_run/factory/adb_controller_factory.rb +++ b/lib/fastlane/plugin/automated_test_emulator_run/factory/adb_controller_factory.rb @@ -7,6 +7,7 @@ class ADB_Controller :command_get_devices, :command_wait_for_device, :command_get_avds, + :command_get_installed_packages, :adb_path end @@ -18,6 +19,7 @@ def self.get_adb_controller(params) # Get paths path_sdk = "#{params[:SDK_path]}" path_avdmanager_binary = path_sdk + "/tools/bin/avdmanager" + path_sdkmanager_binary = path_sdk + "/tools/bin/sdkmanager" path_adb = path_sdk + "/platform-tools/adb" # ADB shell command parts @@ -54,6 +56,11 @@ def self.get_adb_controller(params) adb_controller.command_get_avds = [ path_avdmanager_binary, sh_list_avd_adb].join(" ").chomp + + adb_controller.command_get_installed_packages = [ + path_sdkmanager_binary, + "--list" + ].join(" ") return adb_controller end diff --git a/lib/fastlane/plugin/automated_test_emulator_run/factory/avd_controller_factory.rb b/lib/fastlane/plugin/automated_test_emulator_run/factory/avd_controller_factory.rb index a540c3d..61e604b 100644 --- a/lib/fastlane/plugin/automated_test_emulator_run/factory/avd_controller_factory.rb +++ b/lib/fastlane/plugin/automated_test_emulator_run/factory/avd_controller_factory.rb @@ -4,7 +4,7 @@ module Fastlane module Factory class AVD_Controller - attr_accessor :command_create_avd, :command_start_avd, :command_delete_avd, :command_apply_config_avd, :command_get_property, :command_kill_device, + attr_accessor :command_install_package, :command_create_avd, :command_start_avd, :command_delete_avd, :command_apply_config_avd, :command_get_property, :command_kill_device, :output_file def self.create_output_file(params) @@ -20,6 +20,7 @@ def self.get_avd_controller(params, avd_scheme) # Get paths path_sdk = "#{params[:SDK_path]}" path_avdmanager_binary = path_sdk + "/tools/bin/avdmanager" + path_sdkmanager_binary = path_sdk + "/tools/bin/sdkmanager" path_adb = path_sdk + "/platform-tools/adb" path_avd = "#{params[:AVD_path]}" @@ -122,6 +123,11 @@ def self.get_avd_controller(params, avd_scheme) sh_kill_device, "&>/dev/null"].join(" ") + avd_controller.command_install_package = [ + path_sdkmanager_binary, + "\"" + avd_scheme.create_avd_package + "\"" + ].join(" ") + return avd_controller end end