package com.dianping.ant;
import java.io.File;
import java.util.Arrays;
import java.util.Comparator;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;
public class GetAnyBuildTools extends Task {
private File sdkdir;
private String name;
/**
* the android sdk dir
*/
public void setSdkDir(File f) {
sdkdir = f;
}
/**
* output property name
*/
public void setName(String s) {
name = s;
}
@Override
public void execute() throws BuildException {
if (sdkdir == null || !sdkdir.isDirectory()) {
throw new BuildException("dir is missing");
}
// build-tools
File buildTools = new File(sdkdir, "build-tools");
if (buildTools.isDirectory()) {
if (isBuildToolsDir(buildTools)) {
getProject().setProperty(name, buildTools.getAbsolutePath());
return;
}
File[] files = buildTools.listFiles();
// start with the highest version
Arrays.sort(files, new Comparator<File>() {
@Override
public int compare(File f1, File f2) {
return f2.getName().compareTo(f1.getName());
}
});
for (File f : files) {
if (f.isDirectory() && isBuildToolsDir(f)) {
getProject().setProperty(name, f.getAbsolutePath());
return;
}
}
}
// platform-tools in old version sdk (<17)
File platformTools = new File(sdkdir, "platform-tools");
if (platformTools.isDirectory() && isBuildToolsDir(platformTools)) {
getProject().setProperty(name, platformTools.getAbsolutePath());
return;
}
throw new BuildException("build tools directory not found");
}
private boolean isBuildToolsDir(File dir) {
if (new File(dir, "aapt").exists() && new File(dir, "dx").exists())
return true;
if (new File(dir, "aapt.exe").exists()
&& new File(dir, "dx.bat").exists())
return true;
return false;
}
}