@@ -10,14 +10,101 @@ class Android < Script
1010
1111 def setup
1212 super
13- set_android_environment_variables
14- if build_tools_desired . empty?
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
13+
14+ android_home = '/usr/local/android-sdk'
15+ sh . echo "Using Android SDK at #{ android_home } " , ansi : :green
16+ sh . export 'ANDROID_HOME' , android_home , echo : true
17+
18+ sh . echo "Setting up sdkmanager" , ansi : :green
19+
20+ # Najpierw sprawdzamy, czy sdkmanager jest dostępny w PATH
21+ sdkmanager_path = nil
22+ sdkmanager_cmd = nil
23+
24+ sh . cmd "command -v sdkmanager >/dev/null && echo \" FOUND_IN_PATH=YES\" || echo \" FOUND_IN_PATH=NO\" " , echo : false , assert : true do |result |
25+ if result . stdout . include? ( "FOUND_IN_PATH=YES" )
26+ sh . echo "sdkmanager available in PATH" , ansi : :green
27+ sdkmanager_cmd = "sdkmanager --sdk_root=\" #{ android_home } \" "
28+ else
29+ sh . echo "sdkmanager not available in PATH, checking specific locations" , ansi : :yellow
30+
31+ # Sprawdzamy konkretną ścieżkę, którą widzimy w logach
32+ sdkmanager_path = "#{ android_home } /cmdline-tools/bin/sdkmanager"
33+
34+ sh . cmd "test -f \" #{ sdkmanager_path } \" && echo \" FOUND=YES\" || echo \" FOUND=NO\" " , echo : false , assert : true do |path_result |
35+ if path_result . stdout . include? ( "FOUND=YES" )
36+ sh . echo "Found sdkmanager at #{ sdkmanager_path } " , ansi : :green
37+ sdkmanager_cmd = "\" #{ sdkmanager_path } \" --sdk_root=\" #{ android_home } \" "
38+ else
39+ sdkmanager_path = nil
40+ sh . echo "sdkmanager not found at expected location" , ansi : :yellow
41+ end
42+ end
43+ end
44+ end
45+
46+ # Jeśli nadal nie mamy sdkmanager, dodajemy narzędzia Android do PATH
47+ if sdkmanager_cmd . nil?
48+ sh . echo "Trying to add Android tools to PATH" , ansi : :yellow
49+ sh . export 'PATH' , "#{ android_home } /cmdline-tools/bin:#{ android_home } /tools/bin:#{ android_home } /platform-tools:$PATH" , echo : true
50+
51+ sh . cmd "command -v sdkmanager >/dev/null && echo \" NOW_FOUND=YES\" || echo \" NOW_FOUND=NO\" " , echo : false , assert : true do |result |
52+ if result . stdout . include? ( "NOW_FOUND=YES" )
53+ sh . echo "sdkmanager now available in PATH after adjustment" , ansi : :green
54+ sdkmanager_cmd = "sdkmanager --sdk_root=\" #{ android_home } \" "
55+ else
56+ sh . echo "sdkmanager still not available in PATH" , ansi : :red
57+ end
58+ end
59+ end
60+
61+ # Używamy komendy sdkmanager, jeśli jest dostępna
62+ if sdkmanager_cmd
63+ sh . echo "Using sdkmanager command: #{ sdkmanager_cmd } " , ansi : :green
64+
65+ if build_tools_desired . empty?
66+ sh . echo "No build-tools version specified in android.components. Available versions:" , ansi : :yellow
67+ sh . cmd "#{ sdkmanager_cmd } --list | grep 'build-tools' | cut -d'|' -f1 || echo 'Failed to list build-tools'" , echo : true , assert : true
68+
69+ sh . echo "Preinstalled versions:" , ansi : :yellow
70+ sh . cmd "ls -la #{ android_sdk_build_tools_dir } 2>/dev/null || echo 'None'" , echo : true , assert : true
71+ end
72+
73+ unless components . empty?
74+ sh . echo "Installing Android components: #{ components . join ( ', ' ) } " , ansi : :green
75+
76+ sh . echo "Accepting SDK licenses"
77+ sh . cmd "yes | #{ sdkmanager_cmd } --licenses > /dev/null || echo 'License acceptance failed'" , echo : true , assert : true
78+
79+ components . each do |name |
80+ sh . echo "Installing component: #{ name } " , ansi : :yellow
81+
82+ sdk_name = if name =~ /^build-tools-(.+)$/
83+ "build-tools;#{ $1} "
84+ elsif name == 'platform-tools'
85+ "platform-tools"
86+ elsif name == 'tools'
87+ "tools"
88+ elsif name =~ /^platforms-android-(.+)$/
89+ "platforms;android-#{ $1} "
90+ elsif name =~ /^android-(.+)$/
91+ "platforms;android-#{ $1} "
92+ elsif name =~ /^system-images-android-(.+)-(.+)-(.+)$/
93+ "system-images;android-#{ $1} ;#{ $2} ;#{ $3} "
94+ elsif name =~ /^extra-google-(.+)$/
95+ "extras;google;#{ $1} "
96+ elsif name =~ /^extra-android-(.+)$/
97+ "extras;android;#{ $1} "
98+ else
99+ name
100+ end
101+
102+ sh . cmd "yes | #{ sdkmanager_cmd } \" #{ sdk_name } \" --verbose || echo 'Installation of #{ name } failed'" , echo : true , assert : true
103+ end
104+ end
105+ else
106+ sh . echo "Could not find sdkmanager, Android build may fail" , ansi : :red
19107 end
20- install_sdk_components unless components . empty?
21108 end
22109
23110 def script
@@ -37,49 +124,6 @@ def script
37124
38125 private
39126
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-
48- def install_sdk_components
49- sh . fold 'android.install' do
50- 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
53- components . each do |name |
54- sh . cmd install_sdk_component ( name )
55- end
56- end
57- end
58-
59- def install_sdk_component ( name )
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"
81- end
82-
83127 def build_tools_desired
84128 components . map do |component |
85129 if component =~ /^build-tools-(?<version>[\d \. ]+)$/
0 commit comments