@@ -10,17 +10,14 @@ class Android < Script
1010
1111 def setup
1212 super
13-
13+ set_android_environment_variables
1414 if build_tools_desired . empty?
15- sh . echo "No build-tools version is specified in android.components. Consider adding one of:" , ansi : :yellow
16- sh . cmd "android list sdk --extended --no-ui --all | awk -F \\ \" '/^id.* build-tools/ {print $2}' ", echo : false , timing : false
17- sh . echo "The following versions are pre-installed :" , ansi : :yellow
18- sh . cmd "for v in $(ls /usr/local/android-sdk/build-tools/ | sort -r 2>/dev/null); do echo build-tools-$v; done; echo" , echo : false , timing : false
15+ sh . echo "No build-tools version specified in android.components. Consider adding one of the following :" , ansi : :yellow
16+ sh . cmd " #{ @sdkmanager_bin } --list | grep ' build-tools' | cut -d'|' -f1 ", echo : false , timing : false
17+ sh . echo "The following versions are preinstalled :" , ansi : :yellow
18+ sh . cmd "for v in $(ls #{ android_sdk_build_tools_dir } | sort -r 2>/dev/null); do echo build-tools-$v; done; echo" , echo : false , timing : false
1919 end
20-
2120 install_sdk_components unless components . empty?
22-
23- ensure_tools_bin_path
2421 end
2522
2623 def script
@@ -40,33 +37,60 @@ def script
4037
4138 private
4239
40+ def set_android_environment_variables
41+ android_home = ENV [ 'ANDROID_HOME' ] || '/usr/local/android-sdk'
42+ sh . export 'ANDROID_HOME' , android_home
43+ @sdkmanager_bin = "#{ android_home } /cmdline-tools/bin/sdkmanager"
44+ sh . export 'PATH' , "#{ File . dirname ( @sdkmanager_bin ) } :#{ android_home } /tools:#{ android_home } /tools/bin:#{ android_home } /platform-tools:$PATH"
45+ sh . cmd "mkdir -p #{ File . dirname ( @sdkmanager_bin ) } " , echo : false
46+ end
47+
4348 def install_sdk_components
4449 sh . fold 'android.install' do
4550 sh . echo 'Installing Android dependencies'
51+ android_home = ENV [ 'ANDROID_HOME' ] || '/usr/local/android-sdk'
52+ sh . cmd "yes | #{ @sdkmanager_bin } --sdk_root=#{ android_home } --licenses >/dev/null || true" , echo : true
4653 components . each do |name |
4754 sh . cmd install_sdk_component ( name )
4855 end
4956 end
5057 end
5158
5259 def install_sdk_component ( name )
53- code = "android-update-sdk --components=#{ name } "
54- code << " --accept-licenses='#{ licenses . join ( '|' ) } '" unless licenses . empty?
55- code
60+ android_home = ENV [ 'ANDROID_HOME' ] || '/usr/local/android-sdk'
61+ sdk_name = if name =~ /^build-tools-(.+)$/
62+ "build-tools;#{ $1} "
63+ elsif name =~ /^platform-tools-(.+)$/
64+ "platform-tools"
65+ elsif name =~ /^tools-(.+)$/
66+ "tools"
67+ elsif name =~ /^platforms-android-(.+)$/
68+ "platforms;android-#{ $1} "
69+ elsif name =~ /^android-(.+)$/
70+ "platforms;android-#{ $1} "
71+ elsif name =~ /^system-images-android-(.+)-(.+)-(.+)$/
72+ "system-images;android-#{ $1} ;#{ $2} ;#{ $3} "
73+ elsif name =~ /^extra-google-(.+)$/
74+ "extras;google;#{ $1} "
75+ elsif name =~ /^extra-android-(.+)$/
76+ "extras;android;#{ $1} "
77+ else
78+ name
79+ end
80+ "yes | #{ @sdkmanager_bin } --sdk_root=#{ android_home } \" #{ sdk_name } \" --verbose"
5681 end
5782
5883 def build_tools_desired
59- components . map { |component |
60- match = /build-tools-(?<version>[\d \. ]+)/ . match ( component )
61- match [ :version ] if match
62- }
84+ components . map do |component |
85+ if component =~ /^build-tools-(?<version>[\d \. ]+)$/
86+ Regexp . last_match [ :version ]
87+ end
88+ end . compact
6389 end
6490
65- def ensure_tools_bin_path
66- tools_bin_path = '/usr/local/android-sdk/tools/bin'
67- sh . if "$(echo :$PATH: | grep -v :#{ tools_bin_path } :)" do
68- sh . export "PATH" , "#{ tools_bin_path } :$PATH"
69- end
91+ def android_sdk_build_tools_dir
92+ android_home = ENV [ 'ANDROID_HOME' ] || '/usr/local/android-sdk'
93+ File . join ( android_home , 'build-tools' )
7094 end
7195
7296 def components
@@ -80,8 +104,7 @@ def licenses
80104 def android_config
81105 config [ :android ] || { }
82106 end
83-
84- end
107+ end
85108 end
86109 end
87110end
0 commit comments