Skip to content

Commit

Permalink
[FIXED JENKINS-18584] Add support for build-tools so aapt can be loca…
Browse files Browse the repository at this point in the history
…ted in newer SDKs.
  • Loading branch information
Steve Moyer authored and orrc committed Aug 3, 2013
1 parent 378acf0 commit d49096f
Show file tree
Hide file tree
Showing 7 changed files with 67 additions and 18 deletions.
Expand Up @@ -2,7 +2,7 @@

public final class SdkInstallationException extends AndroidEmulatorException {

SdkInstallationException(String message) {
public SdkInstallationException(String message) {
super(message);
}

Expand All @@ -12,4 +12,4 @@ public final class SdkInstallationException extends AndroidEmulatorException {

private static final long serialVersionUID = 1L;

}
}
Expand Up @@ -27,6 +27,7 @@ public class AndroidSdk implements Serializable {
private final String sdkHome;
private boolean usesPlatformTools;
private int sdkToolsVersion;
private String sdkToolsRevision;

public AndroidSdk(String root, String home) throws IOException {
this.sdkRoot = root;
Expand Down
@@ -0,0 +1,9 @@
package hudson.plugins.android_emulator.sdk;

import java.io.File;

public class DefaultToolLocator implements ToolLocator {
public String findInSdk(AndroidSdk androidSdk, Tool tool) {
return File.separator + "tools" + File.separator;
}
}
@@ -0,0 +1,28 @@
package hudson.plugins.android_emulator.sdk;
import hudson.plugins.android_emulator.util.Utils;
import hudson.plugins.android_emulator.SdkInstallationException;
import java.io.File;

public class PlatformToolLocator implements ToolLocator {
private static final String BUILD_TOOLS_PATH = File.separator + "build-tools" + File.separator;

public String findInSdk(AndroidSdk androidSdk, Tool tool) throws SdkInstallationException {
if (tool == Tool.AAPT) {
File buildToolsDir = new File(androidSdk.getSdkRoot() + BUILD_TOOLS_PATH);
if (buildToolsDir.exists()) {
String[] subDirs = buildToolsDir.list();
// TODO: Maybe we should be using the newest toolset available?
return getFirstInstalledBuildToolsDir(subDirs);
}
}
return File.separator + "platform-tools" + File.separator;

}

private String getFirstInstalledBuildToolsDir(String[] buildToolsDirs) throws SdkInstallationException {
if (buildToolsDirs.length == 0) {
throw new SdkInstallationException("Please install at least one set of build-tools.");
}
return BUILD_TOOLS_PATH + buildToolsDirs[0] + File.separator;
}
}
23 changes: 12 additions & 11 deletions src/main/java/hudson/plugins/android_emulator/sdk/Tool.java
@@ -1,8 +1,10 @@
package hudson.plugins.android_emulator.sdk;

import hudson.plugins.android_emulator.SdkInstallationException;

public enum Tool {
AAPT("aapt", ".exe", true),
ADB("adb", ".exe", true),
AAPT("aapt", ".exe", new PlatformToolLocator()),
ADB("adb", ".exe", new PlatformToolLocator()),
ANDROID("android", ".bat"),
EMULATOR("emulator", ".exe"),
EMULATOR_ARM("emulator-arm", ".exe"),
Expand All @@ -24,20 +26,15 @@ public enum Tool {

public final String executable;
public final String windowsExtension;
public final boolean isPlatformTool;

public final ToolLocator toolLocator;
Tool(String executable, String windowsExtension) {
this(executable, windowsExtension, false);
this(executable, windowsExtension, new DefaultToolLocator());
}

Tool(String executable, String windowsExtension, boolean isPlatformTool) {
Tool(String executable, String windowsExtension, ToolLocator toolLocator) {
this.executable = executable;
this.windowsExtension = windowsExtension;
this.isPlatformTool = isPlatformTool;
}

public boolean isPlatformTool() {
return isPlatformTool;
this.toolLocator = toolLocator;
}

public String getExecutable(boolean isUnix) {
Expand All @@ -47,6 +44,10 @@ public String getExecutable(boolean isUnix) {
return executable + windowsExtension;
}

public String findInSdk(AndroidSdk androidSdk) throws SdkInstallationException {
return toolLocator.findInSdk(androidSdk, this);
}

public static String[] getAllExecutableVariants() {
return getAllExecutableVariants(values());
}
Expand Down
@@ -0,0 +1,6 @@
package hudson.plugins.android_emulator.sdk;
import hudson.plugins.android_emulator.SdkInstallationException;

public interface ToolLocator {
String findInSdk(AndroidSdk androidSdk, Tool tool)throws SdkInstallationException ;
}
14 changes: 9 additions & 5 deletions src/main/java/hudson/plugins/android_emulator/util/Utils.java
Expand Up @@ -18,6 +18,7 @@
import hudson.plugins.android_emulator.Messages;
import hudson.plugins.android_emulator.sdk.AndroidSdk;
import hudson.plugins.android_emulator.sdk.Tool;
import hudson.plugins.android_emulator.SdkInstallationException;
import hudson.remoting.Callable;
import hudson.remoting.Future;
import hudson.util.ArgumentListBuilder;
Expand All @@ -42,6 +43,7 @@
import java.util.concurrent.FutureTask;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

Expand All @@ -52,6 +54,7 @@

public class Utils {

private static final Logger LOGGER = Logger.getLogger(Utils.class.getName());
private static final Pattern REVISION = Pattern.compile("(\\d++).*");

/**
Expand Down Expand Up @@ -359,13 +362,14 @@ public static ArgumentListBuilder getToolCommand(AndroidSdk androidSdk, boolean
// Determine the path to the desired tool
String androidToolsDir;
if (androidSdk.hasKnownRoot()) {
if (tool.isPlatformTool() && androidSdk.usesPlatformTools()) {
androidToolsDir = androidSdk.getSdkRoot() +"/platform-tools/";
} else {
androidToolsDir = androidSdk.getSdkRoot() +"/tools/";
try {
androidToolsDir = androidSdk.getSdkRoot() + tool.findInSdk(androidSdk);;
} catch ( SdkInstallationException e){
LOGGER.warning("A build-tools directory was found but there were no build-tools installed. Assuming command is on the PATH");
androidToolsDir = "";
}
} else {
// If SDK root is unknown, we'll assume that the tool is on the PATH
LOGGER.warning("SDK root not found. Assuming command is on the PATH");
androidToolsDir = "";
}

Expand Down

0 comments on commit d49096f

Please sign in to comment.