Class: Env
- Inherits:
-
Object
- Object
- Env
- Defined in:
- lib/calabash-android/env.rb
Class Method Summary collapse
- .adb_executable ⇒ Object
- .adb_path ⇒ Object
- .android_home_path ⇒ Object
- .android_platform_path ⇒ Object
- .ant_path ⇒ Object
- .exit_if_env_not_set_up ⇒ Object
- .exit_unless_android_sdk_is_available ⇒ Object
- .exit_unless_jdk_is_available ⇒ Object
- .find_executable_on_path(executable) ⇒ Object
- .is_windows? ⇒ Boolean
- .jarsigner_executable ⇒ Object
- .jarsigner_path ⇒ Object
- .java_executable ⇒ Object
- .java_path ⇒ Object
- .jdk_path ⇒ Object
- .keytool_executable ⇒ Object
- .keytool_path ⇒ Object
- .path_elements ⇒ Object
- .path_if_android_home(path) ⇒ Object
- .path_if_jdk(path) ⇒ Object
- .read_attribute_from_monodroid_config(element, attribute) ⇒ Object
- .read_registry(root_key, key, value) ⇒ Object
- .tools_dir ⇒ Object
- .tools_directories ⇒ Object
- .zipalign_executable ⇒ Object
- .zipalign_path ⇒ Object
Class Method Details
.adb_executable ⇒ Object
120 121 122 |
# File 'lib/calabash-android/env.rb', line 120 def self.adb_executable is_windows? ? 'adb.exe' : 'adb' end |
.adb_path ⇒ Object
146 147 148 |
# File 'lib/calabash-android/env.rb', line 146 def self.adb_path %Q("#{android_home_path}/platform-tools/#{adb_executable}") end |
.android_home_path ⇒ Object
61 62 63 64 65 66 67 68 69 |
# File 'lib/calabash-android/env.rb', line 61 def self.android_home_path path_if_android_home(ENV["ANDROID_HOME"]) || if is_windows? path_if_android_home(read_registry(::Win32::Registry::HKEY_LOCAL_MACHINE, 'SOFTWARE\\Android SDK Tools', 'Path')) || path_if_android_home("C:\\Android\\android-sdk") else path_if_android_home(read_attribute_from_monodroid_config('android-sdk', 'path')) end end |
.android_platform_path ⇒ Object
170 171 172 173 174 175 176 |
# File 'lib/calabash-android/env.rb', line 170 def self.android_platform_path Dir.chdir(android_home_path) do platforms = Dir["platforms/android-*"].sort_by { |item| '%08s' % item.split('-').last } raise "No Android SDK found in #{android_home_path}/platforms/" if platforms.empty? File.(platforms.last) end end |
.ant_path ⇒ Object
124 125 126 |
# File 'lib/calabash-android/env.rb', line 124 def self.ant_path is_windows? ? "ant.bat" : "ant" end |
.exit_if_env_not_set_up ⇒ Object
6 7 8 9 |
# File 'lib/calabash-android/env.rb', line 6 def self.exit_if_env_not_set_up exit_unless_jdk_is_available exit_unless_android_sdk_is_available end |
.exit_unless_android_sdk_is_available ⇒ Object
11 12 13 14 15 16 17 18 19 20 |
# File 'lib/calabash-android/env.rb', line 11 def self.exit_unless_android_sdk_is_available if android_home_path log "Android SDK found at: #{android_home_path}" return end puts "Could not find an Android SDK please make sure it is installed." puts "You can read about how Calabash-Android is searching for an Android SDK and how you can help here:" puts "https://github.com/calabash/calabash-android/blob/master/documentation/installation.md#prerequisites" exit 1 end |
.exit_unless_jdk_is_available ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/calabash-android/env.rb', line 27 def self.exit_unless_jdk_is_available jdk = jdk_path if find_executable_on_path(keytool_executable) || jdk log "JDK found on PATH." if find_executable_on_path(keytool_executable) log "JDK found at: #{jdk}" if jdk return end puts "Could not find Java Development Kit please make sure it is installed." puts "You can read about how Calabash-Android is searching for a JDK and how you can help here:" puts "https://github.com/calabash/calabash-android/blob/master/documentation/installation.md#prerequisites" exit 1 end |
.find_executable_on_path(executable) ⇒ Object
71 72 73 74 75 76 77 |
# File 'lib/calabash-android/env.rb', line 71 def self.find_executable_on_path(executable) path_elements.each do |x| f = File.join(x, executable) return "\"#{f}\"" if File.exists?(f) end nil end |
.is_windows? ⇒ Boolean
128 129 130 |
# File 'lib/calabash-android/env.rb', line 128 def self.is_windows? (RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/) end |
.jarsigner_executable ⇒ Object
108 109 110 |
# File 'lib/calabash-android/env.rb', line 108 def self.jarsigner_executable is_windows? ? 'jarsigner.exe' : 'jarsigner' end |
.jarsigner_path ⇒ Object
40 41 42 43 |
# File 'lib/calabash-android/env.rb', line 40 def self.jarsigner_path find_executable_on_path(jarsigner_executable) || "\"#{jdk_path}/bin/#{jarsigner_executable}\"" end |
.java_executable ⇒ Object
112 113 114 |
# File 'lib/calabash-android/env.rb', line 112 def self.java_executable is_windows? ? 'java.exe' : 'java' end |
.java_path ⇒ Object
45 46 47 48 |
# File 'lib/calabash-android/env.rb', line 45 def self.java_path find_executable_on_path(java_executable) || "\"#{jdk_path}/bin/#{java_executable}\"" end |
.jdk_path ⇒ Object
50 51 52 53 54 55 56 57 58 59 |
# File 'lib/calabash-android/env.rb', line 50 def self.jdk_path path_if_jdk(ENV['JAVA_HOME']) || if is_windows? path_if_jdk(read_registry(::Win32::Registry::HKEY_LOCAL_MACHINE, 'SOFTWARE\\JavaSoft\\Java Development Kit\\1.8', 'JavaHome')) || path_if_jdk(read_registry(::Win32::Registry::HKEY_LOCAL_MACHINE, 'SOFTWARE\\JavaSoft\\Java Development Kit\\1.7', 'JavaHome')) || path_if_jdk(read_registry(::Win32::Registry::HKEY_LOCAL_MACHINE, 'SOFTWARE\\JavaSoft\\Java Development Kit\\1.6', 'JavaHome')) else path_if_jdk(read_attribute_from_monodroid_config('java-sdk', 'path')) end end |
.keytool_executable ⇒ Object
116 117 118 |
# File 'lib/calabash-android/env.rb', line 116 def self.keytool_executable is_windows? ? 'keytool.exe' : 'keytool' end |
.keytool_path ⇒ Object
22 23 24 25 |
# File 'lib/calabash-android/env.rb', line 22 def self.keytool_path find_executable_on_path(keytool_executable) || "\"#{jdk_path}/bin/#{keytool_executable}\"" end |
.path_elements ⇒ Object
154 155 156 157 |
# File 'lib/calabash-android/env.rb', line 154 def self.path_elements return [] unless ENV['PATH'] ENV['PATH'].split (/[:;]/) end |
.path_if_android_home(path) ⇒ Object
150 151 152 |
# File 'lib/calabash-android/env.rb', line 150 def self.path_if_android_home(path) path if path && File.exists?(File.join(path, 'platform-tools', adb_executable)) end |
.path_if_jdk(path) ⇒ Object
79 80 81 |
# File 'lib/calabash-android/env.rb', line 79 def self.path_if_jdk(path) path if path && File.exists?(File.join(path, 'bin', jarsigner_executable)) end |
.read_attribute_from_monodroid_config(element, attribute) ⇒ Object
159 160 161 162 163 164 165 166 167 168 |
# File 'lib/calabash-android/env.rb', line 159 def self.read_attribute_from_monodroid_config(element, attribute) monodroid_config_file = File.("~/.config/xbuild/monodroid-config.xml") if File.exists?(monodroid_config_file) require 'rexml/document' begin return REXML::Document.new(IO.read(monodroid_config_file)).elements["//#{element}"].attributes[attribute] rescue end end end |
.read_registry(root_key, key, value) ⇒ Object
178 179 180 181 182 183 184 |
# File 'lib/calabash-android/env.rb', line 178 def self.read_registry(root_key, key, value) begin root_key.open(key)[value] rescue nil end end |
.tools_dir ⇒ Object
132 133 134 135 136 |
# File 'lib/calabash-android/env.rb', line 132 def self.tools_dir tools_dir = tools_directories.first log "Found tools directory at '#{tools_dir}'" tools_dir end |
.tools_directories ⇒ Object
138 139 140 141 142 143 144 |
# File 'lib/calabash-android/env.rb', line 138 def self.tools_directories Dir.chdir(android_home_path) do dirs = Dir["build-tools/*"] + Dir["platform-tools"] raise "Could not find tools directory in #{android_home_path}" if dirs.empty? dirs.map {|dir| File.(dir)} end end |
.zipalign_executable ⇒ Object
104 105 106 |
# File 'lib/calabash-android/env.rb', line 104 def self.zipalign_executable is_windows? ? 'zipalign.exe' : 'zipalign' end |
.zipalign_path ⇒ Object
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/calabash-android/env.rb', line 83 def self.zipalign_path zipalign_path = File.join(android_home_path, 'tools', zipalign_executable) unless File.exists?(zipalign_path) log "Did not find zipalign at '#{zipalign_path}'. Trying to find zipalign in tools directories." tools_directories.each do |dir| zipalign_path = File.join(dir, zipalign_executable) break if File.exists?(zipalign_path) end end if File.exists?(zipalign_path) log "Found zipalign at '#{zipalign_path}'" zipalign_path else log("Did not find zipalign in any of '#{tools_directories.join("','")}'.", true) raise 'Could not find zipalign' end end |