Skip to content

Commit 4a7c012

Browse files
committed
SDKDownloader : download HAXM driver
1 parent 5bd250e commit 4a7c012

File tree

1 file changed

+62
-2
lines changed

1 file changed

+62
-2
lines changed

src/processing/mode/android/SDKDownloader.java

Lines changed: 62 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ public class SDKDownloader extends JDialog implements PropertyChangeListener {
6262
private static final int USB_DRIVER = 6;
6363

6464
private static final String REPOSITORY_URL = "https://dl.google.com/android/repository/";
65+
private static final String HAXM_URL = "https://dl.google.com/android/repository/extras/intel/";
6566
private static final String REPOSITORY_LIST = "repository2-1.xml";
6667
private static final String ADDON_LIST = "addon2-1.xml";
6768

@@ -84,7 +85,8 @@ class SDKUrlHolder {
8485
public String platformToolsUrl, buildToolsUrl, platformUrl, toolsUrl, emulatorUrl;
8586
public String platformToolsFilename, buildToolsFilename, platformFilename, toolsFilename, emulatorFilename;
8687
public String supportRepoUrl, googleRepoUrl, usbDriverUrl;
87-
public String supportRepoFilename, googleRepoFilename, usbDriverFilename;
88+
public String supportRepoFilename, googleRepoFilename, usbDriverFilename;
89+
public String haxmFilename, haxmUrl;
8890
public int totalSize = 0;
8991
}
9092

@@ -122,9 +124,11 @@ protected Object doInBackground() throws Exception {
122124
try {
123125
SDKUrlHolder downloadUrls = new SDKUrlHolder();
124126
String repositoryUrl = REPOSITORY_URL + REPOSITORY_LIST;
125-
String addonUrl = REPOSITORY_URL + ADDON_LIST;
127+
String addonUrl = REPOSITORY_URL + ADDON_LIST;
128+
String haxmUrl = HAXM_URL + ADDON_LIST;
126129
getMainDownloadUrls(downloadUrls, repositoryUrl, Platform.getName());
127130
getExtrasDownloadUrls(downloadUrls, addonUrl, Platform.getName());
131+
getHaxmDownloadUrl(downloadUrls, haxmUrl, Platform.getName());
128132
firePropertyChange(PROPERTY_CHANGE_EVENT_TOTAL, 0, downloadUrls.totalSize);
129133

130134
// tools
@@ -161,6 +165,22 @@ protected Object doInBackground() throws Exception {
161165
downloadAndUnpack(downloadUrls.usbDriverUrl, downloadedFolder, googleRepoFolder, false);
162166
}
163167

168+
// HAXM
169+
if (!Platform.isLinux()) {
170+
File downloadedFolder = new File(tempFolder, downloadUrls.haxmFilename);
171+
File haxmFolder = new File(tempFolder, "HAXM");
172+
downloadAndUnpack(downloadUrls.haxmUrl, downloadedFolder, haxmFolder, true);
173+
174+
ProcessBuilder pb;
175+
if (Platform.isWindows())
176+
pb = new ProcessBuilder("cmd.exe", "/c", "start", "silent_install.bat");
177+
else
178+
pb = new ProcessBuilder("silent_install.sh");
179+
180+
pb.directory(haxmFolder);
181+
pb.start().waitFor();
182+
}
183+
164184
if (Platform.isLinux() || Platform.isMacOS()) {
165185
Runtime.getRuntime().exec("chmod -R 755 " + sdkFolder.getAbsolutePath());
166186
}
@@ -429,6 +449,46 @@ private void getExtrasDownloadUrls(SDKUrlHolder urlHolder,
429449
}
430450
}
431451

452+
private void getHaxmDownloadUrl(SDKUrlHolder urlHolder,
453+
String repositoryUrl, String requiredHostOs)
454+
throws ParserConfigurationException, IOException, SAXException, XPathException {
455+
if (requiredHostOs.equals("linux"))
456+
return;
457+
458+
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
459+
DocumentBuilder db = dbf.newDocumentBuilder();
460+
Document doc = db.parse(new URL(repositoryUrl).openStream());
461+
462+
XPathFactory xPathfactory = XPathFactory.newInstance();
463+
XPath xpath = xPathfactory.newXPath();
464+
XPathExpression expr;
465+
NodeList remotePackages;
466+
467+
expr = xpath.compile("//remotePackage[@path=\"extras;intel;Hardware_Accelerated_Execution_Manager\"]");
468+
remotePackages = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
469+
if (remotePackages != null) {
470+
for (int i=0; i < remotePackages.getLength(); ++i) {
471+
NodeList childNodes = remotePackages.item(i).getChildNodes();
472+
NodeList archives = ((Element) childNodes).getElementsByTagName("archive");
473+
474+
NodeList archive = archives.item(0).getChildNodes();
475+
NodeList os = ((Element) archive).getElementsByTagName("host-os");
476+
477+
if (!os.item(0).getTextContent().equals(requiredHostOs))
478+
continue;
479+
480+
NodeList complete = ((Element) archive).getElementsByTagName("complete");
481+
NodeList url = ((Element) complete.item(0)).getElementsByTagName("url");
482+
NodeList size = ((Element) complete.item(0)).getElementsByTagName("size");
483+
484+
urlHolder.haxmFilename = url.item(0).getTextContent();
485+
urlHolder.haxmUrl = HAXM_URL + urlHolder.haxmFilename;
486+
urlHolder.totalSize += Integer.parseInt(size.item(0).getTextContent());
487+
break;
488+
}
489+
}
490+
}
491+
432492
private void parseAndSet(SDKUrlHolder urlHolder, NodeList remotePackages, String requiredHostOs, int packageN) {
433493
NodeList childNodes = remotePackages.item(0).getChildNodes();
434494
NodeList archives = ((Element) childNodes).getElementsByTagName("archive");

0 commit comments

Comments
 (0)