@@ -52,7 +52,11 @@ public class SDKDownloader extends JDialog implements PropertyChangeListener {
52
52
private static final String URL_REPOSITORY = "https://dl-ssl.google.com/android/repository/repository-11.xml" ;
53
53
private static final String URL_REPOSITORY_FOLDER = "http://dl-ssl.google.com/android/repository/" ;
54
54
private static final String URL_USB_DRIVER = "https://dl-ssl.google.com//android/repository/latest_usb_driver_windows.zip" ;
55
-
55
+ private static final String URL_SYS_IMAGES = "https://dl-ssl.google.com/android/repository/sys-img/android/sys-img.xml" ;
56
+ private static final String URL_SYS_IMAGES_FOLDER = "http://dl-ssl.google.com/android/repository/sys-img/android/" ;
57
+ private static final String SYSTEM_IMAGE = "Intel x86 Atom System Image" ;
58
+ // private static final String URL_SYS_IMAGES_WEAR = "https://dl-ssl.google.com/android/repository/sys-img/android-wear/sys-img.xml";
59
+
56
60
private static final String PROPERTY_CHANGE_EVENT_TOTAL = "total" ;
57
61
private static final String PROPERTY_CHANGE_EVENT_DOWNLOADED = "downloaded" ;
58
62
@@ -70,8 +74,8 @@ public class SDKDownloader extends JDialog implements PropertyChangeListener {
70
74
71
75
class SDKUrlHolder {
72
76
public String platformVersion ;
73
- public String platformToolsUrl , buildToolsUrl , platformUrl , toolsUrl ;
74
- public String platformToolsFilename , buildToolsFilename , platformFilename , toolsFilename ;
77
+ public String platformToolsUrl , buildToolsUrl , platformUrl , sysImgUrl , sysImgTag , toolsUrl ;
78
+ public String platformToolsFilename , buildToolsFilename , platformFilename , sysImgFilename , toolsFilename ;
75
79
public int totalSize = 0 ;
76
80
}
77
81
@@ -97,6 +101,8 @@ protected Object doInBackground() throws Exception {
97
101
if (!platformsFolder .exists ()) platformsFolder .mkdir ();
98
102
File buildToolsFolder = new File (sdkFolder , "build-tools" );
99
103
if (!buildToolsFolder .exists ()) buildToolsFolder .mkdir ();
104
+ File sysImgFolder = new File (sdkFolder , "system-images" );
105
+ if (!sysImgFolder .exists ()) sysImgFolder .mkdir ();
100
106
File extrasFolder = new File (sdkFolder , "extras" );
101
107
if (!extrasFolder .exists ()) extrasFolder .mkdir ();
102
108
@@ -105,7 +111,7 @@ protected Object doInBackground() throws Exception {
105
111
if (!tempFolder .exists ()) tempFolder .mkdir ();
106
112
107
113
try {
108
- SDKUrlHolder downloadUrls = getDownloadUrls (URL_REPOSITORY , Platform .getName ());
114
+ SDKUrlHolder downloadUrls = getDownloadUrls (URL_REPOSITORY , URL_SYS_IMAGES , Platform .getName ());
109
115
firePropertyChange (PROPERTY_CHANGE_EVENT_TOTAL , 0 , downloadUrls .totalSize );
110
116
totalSize = downloadUrls .totalSize ;
111
117
@@ -125,6 +131,14 @@ protected Object doInBackground() throws Exception {
125
131
File downloadedPlatform = new File (tempFolder , downloadUrls .platformFilename );
126
132
downloadAndUnpack (downloadUrls .platformUrl , downloadedPlatform , platformsFolder , false );
127
133
134
+ // system images
135
+ File downloadedSysImg = new File (tempFolder , downloadUrls .sysImgFilename );
136
+ File tmp = new File (sysImgFolder , "android-" + AndroidBuild .target_sdk );
137
+ if (!tmp .exists ()) tmp .mkdir ();
138
+ File sysImgFinalFolder = new File (tmp , downloadUrls .sysImgTag );
139
+ if (!sysImgFinalFolder .exists ()) sysImgFinalFolder .mkdir ();
140
+ downloadAndUnpack (downloadUrls .sysImgUrl , downloadedSysImg , sysImgFinalFolder , false );
141
+
128
142
// usb driver
129
143
if (Platform .isWindows ()) {
130
144
File usbDriverFolder = new File (extrasFolder , "google" );
@@ -208,7 +222,9 @@ private void downloadAndUnpack(String urlString, File saveTo,
208
222
AndroidMode .extractFolder (saveTo , unpackTo , setExec );
209
223
}
210
224
211
- private SDKUrlHolder getDownloadUrls (String repositoryUrl , String requiredHostOs ) throws ParserConfigurationException , IOException , SAXException {
225
+ private SDKUrlHolder getDownloadUrls (String repositoryUrl ,
226
+ String repositorySysImgUrlString , String requiredHostOs )
227
+ throws ParserConfigurationException , IOException , SAXException {
212
228
SDKUrlHolder urlHolder = new SDKUrlHolder ();
213
229
214
230
DocumentBuilderFactory dbf = DocumentBuilderFactory .newInstance ();
@@ -281,6 +297,30 @@ private SDKUrlHolder getDownloadUrls(String repositoryUrl, String requiredHostOs
281
297
break ;
282
298
}
283
299
}
300
+
301
+ // system image
302
+ Document docSysImg = db .parse (new URL (repositorySysImgUrlString ).openStream ());
303
+ NodeList sysImgList = docSysImg .getElementsByTagName ("sdk:system-image" );
304
+ for (int i = 0 ; i < sysImgList .getLength (); i ++) {
305
+ Node img = sysImgList .item (i );
306
+ NodeList level = ((Element ) img ).getElementsByTagName ("sdk:api-level" );
307
+ NodeList desc = ((Element ) img ).getElementsByTagName ("sdk:description" );
308
+ NodeList codename = ((Element ) img ).getElementsByTagName ("sdk:codename" );
309
+ // Only considering nodes without a codename, which correspond to the platform
310
+ // pre-releases.
311
+ if (level .item (0 ).getTextContent ().equals (AndroidBuild .target_sdk ) &&
312
+ desc .item (0 ).getTextContent ().equals (SYSTEM_IMAGE ) &&
313
+ codename .item (0 ) == null ) {
314
+ NodeList tag = ((Element ) img ).getElementsByTagName ("sdk:tag-id" );
315
+ urlHolder .sysImgTag = tag .item (0 ).getTextContent ();
316
+ archiveListItem = ((Element ) img ).getElementsByTagName ("sdk:archives" ).item (0 );
317
+ Node archiveItem = ((Element ) archiveListItem ).getElementsByTagName ("sdk:archive" ).item (0 );
318
+ urlHolder .sysImgFilename = ((Element ) archiveItem ).getElementsByTagName ("sdk:url" ).item (0 ).getTextContent ();
319
+ urlHolder .sysImgUrl = URL_SYS_IMAGES_FOLDER + urlHolder .sysImgFilename ;
320
+ urlHolder .totalSize += Integer .parseInt (((Element ) archiveItem ).getElementsByTagName ("sdk:size" ).item (0 ).getTextContent ());
321
+ break ;
322
+ }
323
+ }
284
324
285
325
return urlHolder ;
286
326
}
0 commit comments