Class Utils
java.lang.Object
hudson.plugins.android_emulator.util.Utils
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic booleanareAllFilesExistantInDir(File root, String[] relativeFilePaths) Check if a root directory contains all the given files.static booleanareAllSubdirectoriesExistant(File root, String[] subDirectories) Check if a root directory contains all the given subDirectories.static booleanequalsVersion(String strVersionA, String strVersionB, int partsToCompare) Compares one given string representing a version number ("[:digit:]+(\.[:digit:]+)*") to another one and checks for equality.static StringExpands the variable in the given string to its value in the variables available to this build.static StringexpandVariables(AbstractBuild<?, ?> build, BuildListener listener, String token) Expands the variable in the given string to its value in the environment variables available to this build.static AndroidSdkgetAndroidSdk(Launcher launcher, Node node, EnvVars envVars, boolean checkPreferredOnly, String androidSdkRootPreferred, String androidSdkHome) Tries to validate the given Android SDK root directory; otherwise tries to locate a copy of the SDK by checking for the auto-install directory and for common environment variables.static AndroidSdkgetAndroidSdk(Launcher launcher, Node node, EnvVars envVars, String androidSdkRootPreferred, String androidSdkHome) Tries to validate the given Android SDK root directory; otherwise tries to locate a copy of the SDK by checking for the auto-install directory and for common environment variables.static AndroidSdkgetAndroidSdk(Launcher launcher, String androidSdkRootPreferred, String androidSdkHome) Tries to validate the given Android SDK root directory.static FilegetAndroidSdkHomeDirectory(String androidSdkHome) Locates the Android SDK home directory using the same scheme as the Android SDK does.static StringRetrieves the configured Android SDK root directory.static EnvVarsgetEnvironment(AbstractBuild<?, ?> build, BuildListener listener) Gets a combined set of environment variables for the current computer and build.static EnvVarsgetEnvironmentVarsFromEmulatorArgs(String commandLineOptions) Parse the given command-line and return the appropriate environment variables if known options are found.static FileLocates the current user's home directory using the same scheme as the Android SDK does.static StringgetPatternWithHighestSuffixedVersionNumberInMultiLineInput(String multiLine, String pattern) Looks up the input for the given pattern with an attached version number.static StringgetRelativePath(String from, String to) Determines the relative path required to get from one path to another.static intgetRelativePathDistance(String from, String to) Determines the number of steps required to get between two paths.static final FilePathgetSdkInstallDirectory(Node node) Retrieves the path at which the Android SDK should be installed on the current node.static ArgumentListBuildergetToolCommand(AndroidSdk androidSdk, boolean isUnix, SdkCliCommand sdkCmd) Generates a ready-to-use ArgumentListBuilder for one of the Android SDK tools.static booleanisProcessAlive(Process process) Checks if java.lang.Process is still alive.static booleanisVersionOlderThan(String strVersion, String strVersionToCompare) Checks whether the version number string represented by the first parameter is older then the version number string represented by the second parameter.static booleankillProcess(Proc process, int timeoutMs) Attempts to kill the given process, timing-out aftertimeoutMs.static StringReduce multi-slash and multi-backslash to single characters, but keeping double backslash in the beginning to keep UNC paths.static voidrunAndroidTool(Launcher launcher, EnvVars env, OutputStream stdout, OutputStream stderr, AndroidSdk androidSdk, SdkCliCommand sdkCmd, FilePath workingDirectory) static voidrunAndroidTool(Launcher launcher, EnvVars env, OutputStream stdout, OutputStream stderr, AndroidSdk androidSdk, SdkCliCommand sdkCmd, FilePath workingDirectory, long timeoutMs) static voidrunAndroidTool(Launcher launcher, OutputStream stdout, OutputStream stderr, AndroidSdk androidSdk, SdkCliCommand sdkCmd, FilePath workingDirectory) Runs an Android tool on the remote build node and waits for completion before returning.static booleansendEmulatorCommand(Launcher launcher, PrintStream logger, int port, String command, int timeoutMs) Sends a user command to the running emulator via its telnet interface.
Execution will be cancelled if it takes longer thantimeoutMs.static ValidationResultvalidateAndroidHome(File sdkRoot, boolean allowLegacy, boolean fromWebConfig) Validates whether the given directory looks like a valid Android SDK directory.
-
Constructor Details
-
Utils
public Utils()
-
-
Method Details
-
getConfiguredAndroidHome
Retrieves the configured Android SDK root directory.- Returns:
- The configured Android SDK root, if any. May include un-expanded variables.
-
getEnvironment
Gets a combined set of environment variables for the current computer and build.- Parameters:
build- The build for which we should retrieve environment variables.listener- The listener used to get the environment variables.- Returns:
- Environment variables for the current computer, with the build variables taking precedence.
-
getAndroidSdk
public static AndroidSdk getAndroidSdk(Launcher launcher, String androidSdkRootPreferred, String androidSdkHome) Tries to validate the given Android SDK root directory.- Parameters:
launcher- The launcher for the remote node.androidSdkRootPreferred- The preferred SDK root directory. Normally the (variable-expanded) SDK root directory specified in the job/system configuration.androidSdkHome- The SDK home directory, i.e. the workspace directory.- Returns:
- AndroidSdk object representing the properties of the installed SDK, or null if no valid directory is found.
-
getAndroidSdk
public static AndroidSdk getAndroidSdk(Launcher launcher, Node node, EnvVars envVars, String androidSdkRootPreferred, String androidSdkHome) Tries to validate the given Android SDK root directory; otherwise tries to locate a copy of the SDK by checking for the auto-install directory and for common environment variables.- Parameters:
launcher- The launcher for the remote node.node- Current nodeenvVars- Environment variables for the build.androidSdkRootPreferred- The preferred SDK root directory. Normally the (variable-expanded) SDK root directory specified in the job/system configuration.androidSdkHome- The SDK home directory, i.e. the workspace directory.- Returns:
- AndroidSdk object representing the properties of the installed SDK, or null if no valid directory is found.
-
getAndroidSdk
public static AndroidSdk getAndroidSdk(Launcher launcher, Node node, EnvVars envVars, boolean checkPreferredOnly, String androidSdkRootPreferred, String androidSdkHome) Tries to validate the given Android SDK root directory; otherwise tries to locate a copy of the SDK by checking for the auto-install directory and for common environment variables.- Parameters:
launcher- The launcher for the remote node.node- Current nodeenvVars- Environment variables for the build.checkPreferredOnly- just check preferred directory, do not try to determine other SDK roots by evaluating auto-install directory or common environment variables.androidSdkRootPreferred- The preferred SDK root directory. Normally the (variable-expanded) SDK root directory specified in the job/system configuration.androidSdkHome- The SDK home directory, i.e. the workspace directory.- Returns:
- AndroidSdk object representing the properties of the installed SDK, or null if no valid directory is found.
-
areAllSubdirectoriesExistant
Check if a root directory contains all the given subDirectories. If a single subDirectory does not exist, false is returned.- Parameters:
root- the root-directory which needs to hold the subDirectoriessubDirectories- the names of the subDirectories to check for existence- Returns:
- true if all subDirectories exist or empty, false otherwise
-
areAllFilesExistantInDir
Check if a root directory contains all the given files. If a single file is not found false is returned.- Parameters:
root- the root-directory which needs to hold the subDirectoriesrelativeFilePaths- the names of the files to check for existence- Returns:
- true if all files exist or empty, false otherwise
-
validateAndroidHome
public static ValidationResult validateAndroidHome(File sdkRoot, boolean allowLegacy, boolean fromWebConfig) Validates whether the given directory looks like a valid Android SDK directory.- Parameters:
sdkRoot- The directory to validate.allowLegacy- Whether the legacy SDK Tools layout is considered validfromWebConfig- Whether we are being called from the web config and should be more lax.- Returns:
- Whether the SDK looks valid or not (or a warning if the SDK install is incomplete).
-
getAndroidSdkHomeDirectory
Locates the Android SDK home directory using the same scheme as the Android SDK does.- Parameters:
androidSdkHome-- Returns:
- A
Filerepresenting the directory in which the ".android" subdirectory should go.
-
getHomeDirectory
Locates the current user's home directory using the same scheme as the Android SDK does.- Returns:
- A
Filerepresenting the home directory.
-
getSdkInstallDirectory
Retrieves the path at which the Android SDK should be installed on the current node.- Parameters:
node-- Returns:
- Path within the tools folder where the SDK should live.
-
getEnvironmentVarsFromEmulatorArgs
Parse the given command-line and return the appropriate environment variables if known options are found. Currently this method is only used to workaround Android Emulator Bug 64356053, where the '-no-audio', '-noaudio', '-audio none' option does not work for the qemu2-emulator. If one of the options is found the environment variable 'QEMU_AUDIO_DRV=none' is set.- Parameters:
commandLineOptions- CLI-parameters to parse- Returns:
EnvVars(Map) of additional environment variables based on given commandLine, empty if no recognized option was found or parameters isnull
-
getToolCommand
public static ArgumentListBuilder getToolCommand(AndroidSdk androidSdk, boolean isUnix, SdkCliCommand sdkCmd) Generates a ready-to-use ArgumentListBuilder for one of the Android SDK tools.- Parameters:
androidSdk- The Android SDK to use.isUnix- Whether the system where this command should run is sane.sdkCmd- The Android tool and any extra arguments for the command to run.- Returns:
- Arguments including the full path to the SDK and any extra Windows stuff required.
-
runAndroidTool
public static void runAndroidTool(Launcher launcher, OutputStream stdout, OutputStream stderr, AndroidSdk androidSdk, SdkCliCommand sdkCmd, FilePath workingDirectory) throws IOException, InterruptedException Runs an Android tool on the remote build node and waits for completion before returning.- Parameters:
launcher- The launcher for the remote node.stdout- The stream to which standard output should be redirected.stderr- The stream to which standard error should be redirected.androidSdk- The Android SDK to use.sdkCmd- The Android tool and any extra arguments for the command to run.workingDirectory- The directory to run the tool from, ornullif irrelevant- Throws:
IOException- If execution of the tool fails.InterruptedException- If execution of the tool is interrupted.
-
runAndroidTool
public static void runAndroidTool(Launcher launcher, EnvVars env, OutputStream stdout, OutputStream stderr, AndroidSdk androidSdk, SdkCliCommand sdkCmd, FilePath workingDirectory) throws IOException, InterruptedException - Throws:
IOExceptionInterruptedException
-
runAndroidTool
public static void runAndroidTool(Launcher launcher, EnvVars env, OutputStream stdout, OutputStream stderr, AndroidSdk androidSdk, SdkCliCommand sdkCmd, FilePath workingDirectory, long timeoutMs) throws IOException, InterruptedException - Throws:
IOExceptionInterruptedException
-
expandVariables
public static String expandVariables(AbstractBuild<?, ?> build, BuildListener listener, String token) Expands the variable in the given string to its value in the environment variables available to this build. The Jenkins-specific build variables for this build are then substituted.- Parameters:
build- The build from which to get the build-specific and environment variables.listener- The listener used to get the environment variables.token- The token which may or may not contain variables in the format${foo}.- Returns:
- The given token, with applicable variable expansions done.
-
expandVariables
Expands the variable in the given string to its value in the variables available to this build. The Jenkins-specific build variables take precedence over environment variables.- Parameters:
envVars- Map of the environment variables.buildVars- Map of the build-specific variables.token- The token which may or may not contain variables in the format${foo}.- Returns:
- The given token, with applicable variable expansions done.
-
killProcess
Attempts to kill the given process, timing-out aftertimeoutMs.- Parameters:
process- The process to kill.timeoutMs- How long to wait for before cancelling the attempt to kill the process.- Returns:
trueif the process was killed successfully.
-
sendEmulatorCommand
public static boolean sendEmulatorCommand(Launcher launcher, PrintStream logger, int port, String command, int timeoutMs) Sends a user command to the running emulator via its telnet interface.
Execution will be cancelled if it takes longer thantimeoutMs.- Parameters:
logger- The build logger.launcher- The launcher for the remote node.port- The emulator's telnet port.command- The command to execute on the emulator's telnet interface.timeoutMs- How long to wait (in ms) for the command to complete before cancelling it.- Returns:
- Whether sending the command succeeded.
-
getRelativePath
Determines the relative path required to get from one path to another.- Parameters:
from- Path to go from.to- Path to reach.- Returns:
- The relative path between the two, or
nullfor invalid input.
-
getRelativePathDistance
Determines the number of steps required to get between two paths.e.g. To get from "/foo/bar/baz" to "/foo/blah" requires making three steps:
- "/foo/bar"
- "/foo"
- "/foo/blah"
- Parameters:
from- Path to go from.to- Path to reach.- Returns:
- The relative distance between the two, or
-1for invalid input.
-
normalizePathSeparators
Reduce multi-slash and multi-backslash to single characters, but keeping double backslash in the beginning to keep UNC paths.- Parameters:
path- the path to normalize- Returns:
- normalized path without double slash/backslash
-
isVersionOlderThan
Checks whether the version number string represented by the first parameter is older then the version number string represented by the second parameter. For comparison the utility classVersionNumberis used.- Parameters:
strVersion- the version number to check if older thenstrVersionToComparestrVersionToCompare- the version number wherestrVersionis compared to- Returns:
trueifVersionNumberrepresentation ofstrVersionis older thenVersionNumberrepresentation ofstrVersionToCompare
-
getPatternWithHighestSuffixedVersionNumberInMultiLineInput
public static String getPatternWithHighestSuffixedVersionNumberInMultiLineInput(String multiLine, String pattern) Looks up the input for the given pattern with an attached version number. The pattern with the highest version found is returned. The delimiter between pattern and version may be ';' or '-'. No RC or beta versions are supported, those versions with an additional suffix will be ignored- Parameters:
multiLine- multi-line input string to look up pattern + versionpattern- the pattern to look for- Returns:
- The pattern found with the highest version number, or null if pattern is not found
-
equalsVersion
Compares one given string representing a version number ("[:digit:]+(\.[:digit:]+)*") to another one and checks for equality. Additionally the number of parts to compare can be given, this allows comparing only eg: the major and minor numbers. The version number "1.0.0" would match "1.0.1" if partsToCompare would be 2.- Parameters:
strVersionA- version number to compare againststrVersionBstrVersionB- version number to compare againststrVersionApartsToCompare- if > 0 then the number of parts for that version number are compared, if <= 0 the complete version number is compared- Returns:
trueif the versions number (or if requested parts of the version numbers) are identical,falseotherwise
-
isProcessAlive
Checks if java.lang.Process is still alive. Native isAlive method exists since Java 8 API.- Parameters:
process- Process to check- Returns:
- true if process is alive, false if process has exited
-