Skip to content

Commit 2bac06d

Browse files
committed
Download Android and Google repositories, legacy support library
1 parent 4e7b0b7 commit 2bac06d

File tree

3 files changed

+111
-58
lines changed

3 files changed

+111
-58
lines changed

src/processing/mode/android/AndroidMode.java

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -230,29 +230,6 @@ public String getSearchPath() {
230230
Messages.log("Android SDK path couldn't be loaded.");
231231
return "";
232232
}
233-
234-
/*
235-
Path path = Paths.get(sdk.getSdkFolder().getAbsolutePath(),
236-
"platforms", AndroidBuild.target_platform,
237-
"android.jar").toAbsolutePath();
238-
239-
// String path = new File().getAbsolutePath();
240-
//
241-
//
242-
// sdk.getSdkFolder().getAbsolutePath() + File.separator +
243-
// "platforms" + File.separator + "android-";
244-
String level = AndroidBuild.target_api_level;
245-
String name = AndroidBuild.target_sdk_version;
246-
String androidJarPath = path + level + File.separator + "android.jar";
247-
if (!new File(androidJarPath).exists()) {
248-
// Try again using SDK name, I have seen the SDK stored as platforms/android-x.y.z
249-
androidJarPath = path + name + File.separator + "android.jar";
250-
if (!new File(androidJarPath).exists()) {
251-
Messages.log("Android SDK path couldn't be loaded.");
252-
return "";
253-
}
254-
}
255-
*/
256233

257234
String coreJarPath = new File(getFolder(), "android-core.zip").getAbsolutePath();
258235
return sdk.getAndroidJarPath().getAbsolutePath() + File.pathSeparatorChar + coreJarPath;

src/processing/mode/android/SDKDownloader.java

Lines changed: 97 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,16 @@
5050

5151
@SuppressWarnings("serial")
5252
public class SDKDownloader extends JDialog implements PropertyChangeListener {
53-
private static final String URL_REPOSITORY = "https://dl-ssl.google.com/android/repository/repository-11.xml";
54-
private static final String URL_REPOSITORY_FOLDER = "http://dl-ssl.google.com/android/repository/";
55-
private static final String URL_USB_DRIVER = "https://dl-ssl.google.com//android/repository/latest_usb_driver_windows.zip";
53+
private static final String REPOSITORY_URL = "http://dl-ssl.google.com/android/repository/";
54+
private static final String REPOSITORY_LIST = "repository-11.xml";
55+
private static final String ADDON_LIST = "addon.xml";
56+
57+
// The Android Support Repository does not include the android-support-v4 jar
58+
// file, so downloading the latest support library package available.
59+
// More info on the Support Library and latest releases:
60+
// https://developer.android.com/topic/libraries/support-library/index.html
61+
private static final String LEGACY_SUPPORT_LIBRARY = "support_r23.2.1.zip";
62+
private static final int SUPPORT_LIBRARY_SIZE = 10850402;
5663

5764
private static final String PROPERTY_CHANGE_EVENT_TOTAL = "total";
5865
private static final String PROPERTY_CHANGE_EVENT_DOWNLOADED = "downloaded";
@@ -73,9 +80,11 @@ class SDKUrlHolder {
7380
public String platformVersion, buildToolsVersion;
7481
public String platformToolsUrl, buildToolsUrl, platformUrl, toolsUrl;
7582
public String platformToolsFilename, buildToolsFilename, platformFilename, toolsFilename;
83+
public String supportRepoUrl, googleRepoUrl, usbDriverUrl;
84+
public String supportRepoFilename, googleRepoFilename, usbDriverFilename;
7685
public int totalSize = 0;
7786
}
78-
87+
7988
class SDKDownloadTask extends SwingWorker<Object, Object> {
8089

8190
private int downloadedSize = 0;
@@ -93,16 +102,24 @@ protected Object doInBackground() throws Exception {
93102
File buildToolsFolder = new File(sdkFolder, "build-tools");
94103
if (!buildToolsFolder.exists()) buildToolsFolder.mkdir();
95104
File extrasFolder = new File(sdkFolder, "extras");
96-
if(!extrasFolder.exists()) extrasFolder.mkdir();
97-
105+
if (!extrasFolder.exists()) extrasFolder.mkdir();
106+
File googleRepoFolder = new File(extrasFolder, "google");
107+
if (!googleRepoFolder.exists()) googleRepoFolder.mkdir();
108+
File androidRepoFolder = new File(extrasFolder, "android");
109+
if (!androidRepoFolder.exists()) androidRepoFolder.mkdir();
110+
98111
// creating temp folder for downloaded zip packages
99112
File tempFolder = new File(modeFolder, "temp");
100113
if (!tempFolder.exists()) tempFolder.mkdir();
101114

102115
try {
103-
SDKUrlHolder downloadUrls = getDownloadUrls(URL_REPOSITORY, Platform.getName());
116+
SDKUrlHolder downloadUrls = new SDKUrlHolder();
117+
String repositoryUrl = REPOSITORY_URL + REPOSITORY_LIST;
118+
String addonUrl = REPOSITORY_URL + ADDON_LIST;
119+
getMainDownloadUrls(downloadUrls, repositoryUrl, Platform.getName());
120+
getExtrasDownloadUrls(downloadUrls, addonUrl, Platform.getName());
104121
firePropertyChange(PROPERTY_CHANGE_EVENT_TOTAL, 0, downloadUrls.totalSize);
105-
totalSize = downloadUrls.totalSize;
122+
totalSize = downloadUrls.totalSize + SUPPORT_LIBRARY_SIZE;
106123

107124
// tools
108125
File downloadedTools = new File(tempFolder, downloadUrls.toolsFilename);
@@ -120,11 +137,23 @@ protected Object doInBackground() throws Exception {
120137
File downloadedPlatform = new File(tempFolder, downloadUrls.platformFilename);
121138
downloadAndUnpack(downloadUrls.platformUrl, downloadedPlatform, platformsFolder, false);
122139

140+
// google repository
141+
File downloadedGoogleRepo = new File(tempFolder, downloadUrls.googleRepoFilename);
142+
downloadAndUnpack(downloadUrls.googleRepoUrl, downloadedGoogleRepo, googleRepoFolder, false);
143+
144+
// android repository
145+
File downloadedSupportRepo = new File(tempFolder, downloadUrls.supportRepoFilename);
146+
downloadAndUnpack(downloadUrls.supportRepoUrl, downloadedSupportRepo, androidRepoFolder, false);
147+
148+
// support library
149+
File downloadedSupportLibrary = new File(tempFolder, LEGACY_SUPPORT_LIBRARY);
150+
String supportLibraryUrl = REPOSITORY_URL + LEGACY_SUPPORT_LIBRARY;
151+
downloadAndUnpack(supportLibraryUrl, downloadedSupportLibrary, androidRepoFolder, false);
152+
123153
// usb driver
124154
if (Platform.isWindows()) {
125-
File usbDriverFolder = new File(extrasFolder, "google");
126-
File downloadedFolder = new File(tempFolder, "latest_usb_driver_windows.zip");
127-
downloadAndUnpack(URL_USB_DRIVER, downloadedFolder, usbDriverFolder, false);
155+
File downloadedFolder = new File(tempFolder, downloadUrls.usbDriverFilename);
156+
downloadAndUnpack(downloadUrls.usbDriverUrl, downloadedFolder, googleRepoFolder, false);
128157
}
129158

130159
if (Platform.isLinux() || Platform.isMacOS()) {
@@ -170,7 +199,7 @@ private void downloadAndUnpack(String urlString, File saveTo,
170199
} catch (MalformedURLException e) {
171200
//This is expected for API level 14 and more
172201
try {
173-
url = new URL(URL_REPOSITORY_FOLDER + urlString);
202+
url = new URL(REPOSITORY_URL + urlString);
174203
} catch (MalformedURLException e1) {
175204
//This exception is not expected. Need to return.
176205
e1.printStackTrace();
@@ -198,10 +227,9 @@ private void downloadAndUnpack(String urlString, File saveTo,
198227
AndroidMode.extractFolder(saveTo, unpackTo, setExec);
199228
}
200229

201-
private SDKUrlHolder getDownloadUrls(String repositoryUrl, String requiredHostOs)
230+
private void getMainDownloadUrls(SDKUrlHolder urlHolder,
231+
String repositoryUrl, String requiredHostOs)
202232
throws ParserConfigurationException, IOException, SAXException {
203-
SDKUrlHolder urlHolder = new SDKUrlHolder();
204-
205233
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
206234
DocumentBuilder db = dbf.newDocumentBuilder();
207235
Document doc = db.parse(new URL(repositoryUrl).openStream());
@@ -237,7 +265,7 @@ private SDKUrlHolder getDownloadUrls(String repositoryUrl, String requiredHostOs
237265
String hostOs = ((Element) archive).getElementsByTagName("sdk:host-os").item(0).getTextContent();
238266
if (hostOs.equals(requiredHostOs)) {
239267
urlHolder.platformToolsFilename = (((Element) archive).getElementsByTagName("sdk:url").item(0).getTextContent());
240-
urlHolder.platformToolsUrl = URL_REPOSITORY_FOLDER + urlHolder.platformToolsFilename;
268+
urlHolder.platformToolsUrl = REPOSITORY_URL + urlHolder.platformToolsFilename;
241269
urlHolder.totalSize += Integer.parseInt(((Element) archive).getElementsByTagName("sdk:size").item(0).getTextContent());
242270
break;
243271
}
@@ -260,7 +288,7 @@ private SDKUrlHolder getDownloadUrls(String repositoryUrl, String requiredHostOs
260288
String hostOs = ((Element) archive).getElementsByTagName("sdk:host-os").item(0).getTextContent();
261289
if (hostOs.equals(requiredHostOs)) {
262290
urlHolder.buildToolsFilename = (((Element) archive).getElementsByTagName("sdk:url").item(0).getTextContent());
263-
urlHolder.buildToolsUrl = URL_REPOSITORY_FOLDER + urlHolder.buildToolsFilename;
291+
urlHolder.buildToolsUrl = REPOSITORY_URL + urlHolder.buildToolsFilename;
264292
urlHolder.totalSize += Integer.parseInt(((Element) archive).getElementsByTagName("sdk:size").item(0).getTextContent());
265293
break;
266294
}
@@ -278,17 +306,65 @@ private SDKUrlHolder getDownloadUrls(String repositoryUrl, String requiredHostOs
278306
String hostOs = ((Element) archive).getElementsByTagName("sdk:host-os").item(0).getTextContent();
279307
if (hostOs.equals(requiredHostOs)) {
280308
urlHolder.toolsFilename = (((Element) archive).getElementsByTagName("sdk:url").item(0).getTextContent());
281-
urlHolder.toolsUrl = URL_REPOSITORY_FOLDER + urlHolder.toolsFilename;
309+
urlHolder.toolsUrl = REPOSITORY_URL + urlHolder.toolsFilename;
282310
urlHolder.totalSize += Integer.parseInt(((Element) archive).getElementsByTagName("sdk:size").item(0).getTextContent());
283311
break;
284312
}
285313
}
286-
}
287-
288-
return urlHolder;
314+
}
289315
}
290316
}
291317

318+
private void getExtrasDownloadUrls(SDKUrlHolder urlHolder,
319+
String repositoryUrl, String requiredHostOs)
320+
throws ParserConfigurationException, IOException, SAXException {
321+
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
322+
DocumentBuilder db = dbf.newDocumentBuilder();
323+
Document doc = db.parse(new URL(repositoryUrl).openStream());
324+
Node archiveListItem;
325+
NodeList archiveList;
326+
327+
NodeList nodeList = doc.getElementsByTagName("sdk:extra");
328+
for (int i = 0; i < nodeList.getLength(); i++) {
329+
Node sdkExtraItem = nodeList.item(i);
330+
if (sdkExtraItem != null) {
331+
String name = ((Element) sdkExtraItem).getElementsByTagName("sdk:name-display").item(0).getTextContent();
332+
// ---------------------------------------------------------------------
333+
// Android Support repository
334+
if (name.equals("Android Support Repository")) {
335+
archiveListItem = ((Element) sdkExtraItem).getElementsByTagName("sdk:archives").item(0);
336+
archiveList = ((Element) archiveListItem).getElementsByTagName("sdk:archive");
337+
Node archive = archiveList.item(0);
338+
urlHolder.supportRepoFilename = (((Element) archive).getElementsByTagName("sdk:url").item(0).getTextContent());
339+
urlHolder.supportRepoUrl = REPOSITORY_URL + urlHolder.supportRepoFilename;
340+
urlHolder.totalSize += Integer.parseInt(((Element) archive).getElementsByTagName("sdk:size").item(0).getTextContent());
341+
}
342+
343+
// ---------------------------------------------------------------------
344+
// Google repository
345+
if (name.equals("Google Repository")) {
346+
archiveListItem = ((Element) sdkExtraItem).getElementsByTagName("sdk:archives").item(0);
347+
archiveList = ((Element) archiveListItem).getElementsByTagName("sdk:archive");
348+
Node archive = archiveList.item(0);
349+
urlHolder.googleRepoFilename = (((Element) archive).getElementsByTagName("sdk:url").item(0).getTextContent());
350+
urlHolder.googleRepoUrl = REPOSITORY_URL + urlHolder.googleRepoFilename;
351+
urlHolder.totalSize += Integer.parseInt(((Element) archive).getElementsByTagName("sdk:size").item(0).getTextContent());
352+
}
353+
354+
// ---------------------------------------------------------------------
355+
// USB driver
356+
if (name.equals("Google USB Driver")) {
357+
archiveListItem = ((Element) sdkExtraItem).getElementsByTagName("sdk:archives").item(0);
358+
archiveList = ((Element) archiveListItem).getElementsByTagName("sdk:archive");
359+
Node archive = archiveList.item(0);
360+
urlHolder.usbDriverFilename = (((Element) archive).getElementsByTagName("sdk:url").item(0).getTextContent());
361+
urlHolder.usbDriverUrl = REPOSITORY_URL + urlHolder.usbDriverFilename;
362+
urlHolder.totalSize += Integer.parseInt(((Element) archive).getElementsByTagName("sdk:size").item(0).getTextContent());
363+
}
364+
}
365+
}
366+
}
367+
292368
private Node getLatestPlatform(NodeList platformList) {
293369
Node latest = null;
294370
int maxRevision = -1;

src/processing/mode/android/SysImageDownloader.java

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,11 @@
5050

5151
@SuppressWarnings("serial")
5252
public class SysImageDownloader extends JDialog implements PropertyChangeListener {
53-
private static final String URL_SYS_IMAGES = "https://dl-ssl.google.com/android/repository/sys-img/android/sys-img.xml";
54-
private static final String URL_SYS_IMAGES_FOLDER = "http://dl-ssl.google.com/android/repository/sys-img/android/";
55-
private static final String URL_SYS_IMAGES_WEAR = "https://dl-ssl.google.com/android/repository/sys-img/android-wear/sys-img.xml";
56-
private static final String URL_SYS_IMAGES_WEAR_FOLDER = "https://dl-ssl.google.com/android/repository/sys-img/android-wear/";
53+
private static final String SYS_IMAGES_URL = "https://dl-ssl.google.com/android/repository/sys-img/android/";
54+
private static final String SYS_IMAGES_LIST = "sys-img.xml";
55+
56+
private static final String SYS_IMAGES_WEAR_URL = "https://dl-ssl.google.com/android/repository/sys-img/android-wear/";
57+
private static final String SYS_IMAGES_WEAR_LIST = "sys-img.xml";
5758

5859
public static final String SYSTEM_IMAGE_TAG = "google_apis";
5960
private static final String SYSTEM_IMAGE_MACOSX = "Google APIs Intel x86 Atom System Image";
@@ -114,9 +115,11 @@ protected Object doInBackground() throws Exception {
114115
if (!tempFolder.exists()) tempFolder.mkdir();
115116

116117
try {
117-
String repo = wear ? URL_SYS_IMAGES_WEAR : URL_SYS_IMAGES;
118+
String repo = wear ? SYS_IMAGES_URL + SYS_IMAGES_WEAR_LIST :
119+
SYS_IMAGES_WEAR_URL + SYS_IMAGES_LIST;
118120

119-
UrlHolder downloadUrls = getDownloadUrls(repo, Platform.getName());
121+
UrlHolder downloadUrls = new UrlHolder();
122+
getDownloadUrls(downloadUrls, repo, Platform.getName());
120123
firePropertyChange(PROPERTY_CHANGE_EVENT_TOTAL, 0, downloadUrls.totalSize);
121124
totalSize = downloadUrls.totalSize;
122125

@@ -218,10 +221,9 @@ private void fixSourceProperties(File imageFolder) {
218221
}
219222
}
220223

221-
private UrlHolder getDownloadUrls(String repositoryUrl, String requiredHostOs)
224+
private void getDownloadUrls(UrlHolder urlHolder,
225+
String repositoryUrl, String requiredHostOs)
222226
throws ParserConfigurationException, IOException, SAXException {
223-
UrlHolder urlHolder = new UrlHolder();
224-
225227
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
226228
DocumentBuilder db = dbf.newDocumentBuilder();
227229

@@ -252,7 +254,7 @@ private UrlHolder getDownloadUrls(String repositoryUrl, String requiredHostOs)
252254
Node archiveListItem = ((Element) img).getElementsByTagName("sdk:archives").item(0);
253255
Node archiveItem = ((Element) archiveListItem).getElementsByTagName("sdk:archive").item(0);
254256
urlHolder.sysImgWearFilename = ((Element) archiveItem).getElementsByTagName("sdk:url").item(0).getTextContent();
255-
urlHolder.sysImgWearUrl = URL_SYS_IMAGES_WEAR_FOLDER + urlHolder.sysImgWearFilename;
257+
urlHolder.sysImgWearUrl = SYS_IMAGES_WEAR_URL + urlHolder.sysImgWearFilename;
256258
urlHolder.totalSize += Integer.parseInt(((Element) archiveItem).getElementsByTagName("sdk:size").item(0).getTextContent());
257259
break;
258260
}
@@ -284,14 +286,12 @@ private UrlHolder getDownloadUrls(String repositoryUrl, String requiredHostOs)
284286
Node archiveListItem = ((Element) img).getElementsByTagName("sdk:archives").item(0);
285287
Node archiveItem = ((Element) archiveListItem).getElementsByTagName("sdk:archive").item(0);
286288
urlHolder.sysImgFilename = ((Element) archiveItem).getElementsByTagName("sdk:url").item(0).getTextContent();
287-
urlHolder.sysImgUrl = URL_SYS_IMAGES_FOLDER + urlHolder.sysImgFilename;
289+
urlHolder.sysImgUrl = SYS_IMAGES_URL + urlHolder.sysImgFilename;
288290
urlHolder.totalSize += Integer.parseInt(((Element) archiveItem).getElementsByTagName("sdk:size").item(0).getTextContent());
289291
break;
290292
}
291-
}
293+
}
292294
}
293-
294-
return urlHolder;
295295
}
296296
}
297297

0 commit comments

Comments
 (0)