Class: Env

Inherits:
Object
  • Object
show all
Defined in:
lib/calabash-android/env.rb

Class Method Summary collapse

Class Method Details

.adb_executableObject


84
85
86
# File 'lib/calabash-android/env.rb', line 84

def self.adb_executable
  is_windows? ? 'adb.exe' : 'adb'
end

.adb_pathObject


104
105
106
# File 'lib/calabash-android/env.rb', line 104

def self.adb_path
  %Q("#{android_home_path}/platform-tools/#{adb_executable}")
end

.android_home_pathObject


54
55
56
57
58
59
60
61
62
# File 'lib/calabash-android/env.rb', line 54

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_pathObject


128
129
130
131
132
133
134
# File 'lib/calabash-android/env.rb', line 128

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.expand_path(platforms.last)
  end
end

.ant_pathObject


88
89
90
# File 'lib/calabash-android/env.rb', line 88

def self.ant_path
  is_windows? ? "ant.bat" : "ant"
end

.exit_if_env_not_set_upObject


5
6
7
8
# File 'lib/calabash-android/env.rb', line 5

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_availableObject


10
11
12
13
14
15
16
17
18
19
# File 'lib/calabash-android/env.rb', line 10

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_availableObject


26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/calabash-android/env.rb', line 26

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


64
65
66
67
68
69
70
# File 'lib/calabash-android/env.rb', line 64

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

Returns:

  • (Boolean)

92
93
94
# File 'lib/calabash-android/env.rb', line 92

def self.is_windows?
  (RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/)
end

.jarsigner_executableObject


76
77
78
# File 'lib/calabash-android/env.rb', line 76

def self.jarsigner_executable
  is_windows? ? 'jarsigner.exe' : 'jarsigner'
end

.jarsigner_pathObject


39
40
41
42
# File 'lib/calabash-android/env.rb', line 39

def self.jarsigner_path
  find_executable_on_path(jarsigner_executable) ||
  "\"#{jdk_path}/bin/#{jarsigner_executable}\""
end

.jdk_pathObject


44
45
46
47
48
49
50
51
52
# File 'lib/calabash-android/env.rb', line 44

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.7', 'JavaHome')) ||
    path_if_jdk(read_registry(::Win32::Registry::HKEY_LOCAL_MACHINE, 'SOFTWARE\\JavaSoft\\Java Development Kit\\1.6', 'JavaHome'))
  else
    path_if_android_home(read_attribute_from_monodroid_config('java-sdk', 'path'))
  end
end

.keytool_executableObject


80
81
82
# File 'lib/calabash-android/env.rb', line 80

def self.keytool_executable
  is_windows? ? 'keytool.exe' : 'keytool'
end

.keytool_pathObject


21
22
23
24
# File 'lib/calabash-android/env.rb', line 21

def self.keytool_path
  find_executable_on_path(keytool_executable) ||
  "\"#{jdk_path}/bin/#{keytool_executable}\""
end

.path_elementsObject


112
113
114
115
# File 'lib/calabash-android/env.rb', line 112

def self.path_elements
  return [] unless ENV['PATH']
  ENV['PATH'].split (/[:;]/)
end

.path_if_android_home(path) ⇒ Object


108
109
110
# File 'lib/calabash-android/env.rb', line 108

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


72
73
74
# File 'lib/calabash-android/env.rb', line 72

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


117
118
119
120
121
122
123
124
125
126
# File 'lib/calabash-android/env.rb', line 117

def self.read_attribute_from_monodroid_config(element, attribute)
  monodroid_config_file = File.expand_path("~/.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


136
137
138
139
140
141
142
# File 'lib/calabash-android/env.rb', line 136

def self.read_registry(root_key, key, value)
  begin
    root_key.open(key)[value]
  rescue
    nil
  end
end

.tools_dirObject


96
97
98
99
100
101
102
# File 'lib/calabash-android/env.rb', line 96

def self.tools_dir
  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?
    File.expand_path(dirs.first)
  end
end