From 36ce9c9996e94eff532980262c1e426f69f7828e Mon Sep 17 00:00:00 2001 From: Parthipan Ramesh Date: Fri, 10 Aug 2018 11:25:39 +0200 Subject: [PATCH] Migrate to `sdkmanager` and support latest SDK - Migrate to `sdkmanager` command to install/update components - Updated initial Android SDK download to version 26.1.1 - Support for Android SDK 28 - Use new emulator (added to $PATH) --- community-cookbooks/android-sdk/CHANGELOG.md | 8 +++ .../android-sdk/attributes/default.rb | 23 +++--- .../files/default/android-accept-licenses | 18 ----- community-cookbooks/android-sdk/metadata.json | 2 +- .../android-sdk/recipes/default.rb | 72 +++++++------------ .../templates/default/android-sdk.sh.erb | 2 +- .../templates/default/android-update-sdk.erb | 28 -------- 7 files changed, 51 insertions(+), 102 deletions(-) delete mode 100644 community-cookbooks/android-sdk/files/default/android-accept-licenses delete mode 100644 community-cookbooks/android-sdk/templates/default/android-update-sdk.erb diff --git a/community-cookbooks/android-sdk/CHANGELOG.md b/community-cookbooks/android-sdk/CHANGELOG.md index 115a68838..37da47b08 100644 --- a/community-cookbooks/android-sdk/CHANGELOG.md +++ b/community-cookbooks/android-sdk/CHANGELOG.md @@ -1,6 +1,14 @@ CHANGELOG for Android-SDK cookbook ================================== +v0.2.3 (2018-08-10) +------------------- + +- Migrate to `sdkmanager` command to install/update components +- Updated initial Android SDK download to version 26.1.1 +- Support for Android SDK 28 +- Use new emulator (added to $PATH) + v0.2.2 (2017-05-28) ------------------- diff --git a/community-cookbooks/android-sdk/attributes/default.rb b/community-cookbooks/android-sdk/attributes/default.rb index 073861137..3eaf52442 100644 --- a/community-cookbooks/android-sdk/attributes/default.rb +++ b/community-cookbooks/android-sdk/attributes/default.rb @@ -5,9 +5,12 @@ default['android-sdk']['with_symlink'] = true # use ark's :install action when true; use ark's :put action when false default['android-sdk']['set_environment_variables'] = true -default['android-sdk']['version'] = '25.2.3' -default['android-sdk']['checksum'] = '1b35bcb94e9a686dff6460c8bca903aa0281c6696001067f34ec00093145b560' -default['android-sdk']['download_url'] = "https://dl.google.com/android/repository/tools_r#{node['android-sdk']['version']}-linux.zip" +default['android-sdk']['version'] = '26.1.1' +default['android-sdk']['checksum'] = '92ffee5a1d98d856634e8b71132e8a95d96c83a63fde1099be3d86df3106def9' +default['android-sdk']['download_url'] = "https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip" + +# Use JDK 8 +default['java']['jdk_version'] = '8' # # List of Android SDK components to preinstall: @@ -21,12 +24,14 @@ # Note that it will require (waste) some extra download effort. # default['android-sdk']['components'] = %w( platform-tools - build-tools-25.0.2 - android-25 - extra-android-support - extra-google-google_play_services - extra-google-m2repository - extra-android-m2repository ) + emulator + build-tools;25.0.3 + build-tools;28.0.1 + platforms;android-28 + platforms;android-25 + extras;google;google_play_services + extras;google;m2repository + extras;android;m2repository ) default['android-sdk']['license']['white_list'] = %w(.+) default['android-sdk']['license']['black_list'] = [] # e.g. ['intel-.+', 'mips-.+', 'android-wear-sdk-license-.+'] diff --git a/community-cookbooks/android-sdk/files/default/android-accept-licenses b/community-cookbooks/android-sdk/files/default/android-accept-licenses deleted file mode 100644 index 67e279586..000000000 --- a/community-cookbooks/android-sdk/files/default/android-accept-licenses +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/expect -f - -set timeout 1800 -set cmd [lindex $argv 0] -set licenses [lindex $argv 1] - -spawn {*}$cmd -expect { - -regexp "Do you accept the license '($licenses)'.*" { - exp_send "y\r" - exp_continue - } - "Do you accept the license '*'*" { - exp_send "n\r" - exp_continue - } - eof -} diff --git a/community-cookbooks/android-sdk/metadata.json b/community-cookbooks/android-sdk/metadata.json index 3fe4a88e0..e987b9b0d 100644 --- a/community-cookbooks/android-sdk/metadata.json +++ b/community-cookbooks/android-sdk/metadata.json @@ -1 +1 @@ -{"name":"android-sdk","version":"0.2.2","description":"Installs Google Android SDK","long_description":"","maintainer":"Gilles Cornu","maintainer_email":"foss@gilles.cornu.name","license":"Apache 2.0","platforms":{"ubuntu":">= 12.04","centos":">= 6.6"},"dependencies":{"java":">= 0.0.0","ark":">= 0.0.0"},"recommendations":{"maven":">= 0.0.0"},"suggestions":{},"conflicting":{},"providing":{},"replacing":{},"attributes":{},"groupings":{},"recipes":{"android-sdk::default":"Install and update Google Android SDK","android-sdk::maven_rescue":"Install missing dependencies with Maven Android SDK Deployer"},"source_url":"https://github.com/gildegoma/chef-android-sdk","issues_url":"https://github.com/gildegoma/chef-android-sdk/issues","chef_version":{},"ohai_version":{}} \ No newline at end of file +{"name":"android-sdk","version":"0.2.3","description":"Installs Google Android SDK","long_description":"","maintainer":"Gilles Cornu","maintainer_email":"foss@gilles.cornu.name","license":"Apache 2.0","platforms":{"ubuntu":">= 12.04","centos":">= 6.6"},"dependencies":{"java":">= 0.0.0","ark":">= 0.0.0"},"recommendations":{"maven":">= 0.0.0"},"suggestions":{},"conflicting":{},"providing":{},"replacing":{},"attributes":{},"groupings":{},"recipes":{"android-sdk::default":"Install and update Google Android SDK","android-sdk::maven_rescue":"Install missing dependencies with Maven Android SDK Deployer"},"source_url":"https://github.com/gildegoma/chef-android-sdk","issues_url":"https://github.com/gildegoma/chef-android-sdk/issues","chef_version":{},"ohai_version":{}} diff --git a/community-cookbooks/android-sdk/recipes/default.rb b/community-cookbooks/android-sdk/recipes/default.rb index 024222db1..c3acc0a51 100644 --- a/community-cookbooks/android-sdk/recipes/default.rb +++ b/community-cookbooks/android-sdk/recipes/default.rb @@ -27,7 +27,7 @@ setup_root = node['android-sdk']['setup_root'].to_s.empty? ? node['ark']['prefix_home'] : node['android-sdk']['setup_root'] android_home = File.join(setup_root, node['android-sdk']['name']) -android_bin = File.join(android_home, 'tools', 'android') +sdkmanager_bin = File.join(android_home, 'tools', 'bin', 'sdkmanager') # # Install required libraries @@ -69,7 +69,7 @@ # # Fix non-friendly 0750 permissions in order to make android-sdk available to all system users # -directory File.join(android_home, 'tools') do +directory File.join(android_home, 'tools/bin') do mode 0755 user node['android-sdk']['owner'] group node['android-sdk']['group'] @@ -103,43 +103,33 @@ package 'expect' # -# Install, Update (a.k.a. re-install) Android components +# Install & Update SDK components # - -# KISS: use a basic idempotent guard, waiting for https://github.com/gildegoma/chef-android-sdk/issues/12 -unless File.exist?("#{setup_root}/#{node['android-sdk']['name']}/temp") - - # With "--filter node['android-sdk']['components'].join(,)" pattern, - # some system-images were not installed as expected. - # The easiest way I could find to fix this problem consists - # in executing a dedicated 'android sdk update' command for each component to be installed. - node['android-sdk']['components'].each do |sdk_component| +node['android-sdk']['components'].each do |sdk_component| script "Install Android SDK component #{sdk_component}" do - interpreter 'expect' - environment 'ANDROID_HOME' => android_home - user node['android-sdk']['owner'] - group node['android-sdk']['group'] - # TODO: use --force or not? - code <<-EOF - spawn #{android_bin} update sdk --no-ui --all --filter #{sdk_component} - set timeout 1800 - expect { - -regexp "Do you accept the license '(#{node['android-sdk']['license']['white_list'].join('|')})'.*" { - exp_send "y\r" - exp_continue - } - -regexp "Do you accept the license '(#{node['android-sdk']['license']['black_list'].join('|')})'.*" { - exp_send "n\r" - exp_continue - } - "Do you accept the license '*-license-*'*" { - exp_send "#{node['android-sdk']['license']['default_answer']}\r" - exp_continue - } - eof + interpreter 'expect' + environment 'ANDROID_HOME' => android_home + user node['android-sdk']['owner'] + group node['android-sdk']['group'] + code <<-EOF + spawn #{sdkmanager_bin} "#{sdk_component}" + set timeout 1800 + expect { + -regexp "License (#{node['android-sdk']['license']['white_list'].join('|')}).*" { + exp_send "y\r" + exp_continue } - EOF - end + -regexp "License (#{node['android-sdk']['license']['black_list'].join('|')}).*" { + exp_send "n\r" + exp_continue + } + -regexp "Accept (y/N):.*" { + exp_send "#{node['android-sdk']['license']['default_answer']}\r" + exp_continue + } + eof + } + EOF end end @@ -147,7 +137,7 @@ # Deploy additional scripts, preferably outside Android-SDK own directories to # avoid unwanted removal when updating android sdk components later. # -%w(android-accept-licenses android-wait-for-emulator).each do |android_helper_script| +%w(android-wait-for-emulator).each do |android_helper_script| cookbook_file File.join(node['android-sdk']['scripts']['path'], android_helper_script) do source android_helper_script owner node['android-sdk']['scripts']['owner'] @@ -155,14 +145,6 @@ mode 0755 end end -%w(android-update-sdk).each do |android_helper_script| - template File.join(node['android-sdk']['scripts']['path'], android_helper_script) do - source "#{android_helper_script}.erb" - owner node['android-sdk']['scripts']['owner'] - group node['android-sdk']['scripts']['group'] - mode 0755 - end -end # # Install Maven Android SDK Deployer toolkit to populate local Maven repository diff --git a/community-cookbooks/android-sdk/templates/default/android-sdk.sh.erb b/community-cookbooks/android-sdk/templates/default/android-sdk.sh.erb index 505b4f687..1e43e1e48 100644 --- a/community-cookbooks/android-sdk/templates/default/android-sdk.sh.erb +++ b/community-cookbooks/android-sdk/templates/default/android-sdk.sh.erb @@ -5,4 +5,4 @@ # this work around. export ANDROID_HOME=<%= @android_home %>/ -export PATH="${PATH}:${ANDROID_HOME}tools:${ANDROID_HOME}platform-tools" +export PATH="${PATH}:${ANDROID_HOME}emulator:${ANDROID_HOME}tools:${ANDROID_HOME}platform-tools" diff --git a/community-cookbooks/android-sdk/templates/default/android-update-sdk.erb b/community-cookbooks/android-sdk/templates/default/android-update-sdk.erb deleted file mode 100644 index 8a66ef8c7..000000000 --- a/community-cookbooks/android-sdk/templates/default/android-update-sdk.erb +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env bash - -# This little script code is in the public domain -# It is strongly inspired from https://github.com/embarkmobile/android-sdk-installer - -set +e - -# Defaults -LICENSES="<%= node['android-sdk']['license']['white_list'].join('|') %>" - -for i in "$@" -do -case $i in - --components=*) - COMPONENTS=`echo $i | sed 's/[-a-zA-Z0-9]*=//'` - ;; - --accept-licenses=*) - LICENSES=`echo $i | sed 's/[-a-zA-Z0-9]*=//'` - ;; - *) - # unknown option - ;; -esac -done - -echo "Installing $COMPONENTS" -android-accept-licenses "android update sdk --no-ui --all --filter $COMPONENTS" "$LICENSES" -