@@ -52,7 +52,11 @@ public class SDKDownloader extends JDialog implements PropertyChangeListener {
5252 private static final String URL_REPOSITORY = "https://dl-ssl.google.com/android/repository/repository-11.xml" ;
5353 private static final String URL_REPOSITORY_FOLDER = "http://dl-ssl.google.com/android/repository/" ;
5454 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+
5660 private static final String PROPERTY_CHANGE_EVENT_TOTAL = "total" ;
5761 private static final String PROPERTY_CHANGE_EVENT_DOWNLOADED = "downloaded" ;
5862
@@ -70,8 +74,8 @@ public class SDKDownloader extends JDialog implements PropertyChangeListener {
7074
7175 class SDKUrlHolder {
7276 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 ;
7579 public int totalSize = 0 ;
7680 }
7781
@@ -97,6 +101,8 @@ protected Object doInBackground() throws Exception {
97101 if (!platformsFolder .exists ()) platformsFolder .mkdir ();
98102 File buildToolsFolder = new File (sdkFolder , "build-tools" );
99103 if (!buildToolsFolder .exists ()) buildToolsFolder .mkdir ();
104+ File sysImgFolder = new File (sdkFolder , "system-images" );
105+ if (!sysImgFolder .exists ()) sysImgFolder .mkdir ();
100106 File extrasFolder = new File (sdkFolder , "extras" );
101107 if (!extrasFolder .exists ()) extrasFolder .mkdir ();
102108
@@ -105,7 +111,7 @@ protected Object doInBackground() throws Exception {
105111 if (!tempFolder .exists ()) tempFolder .mkdir ();
106112
107113 try {
108- SDKUrlHolder downloadUrls = getDownloadUrls (URL_REPOSITORY , Platform .getName ());
114+ SDKUrlHolder downloadUrls = getDownloadUrls (URL_REPOSITORY , URL_SYS_IMAGES , Platform .getName ());
109115 firePropertyChange (PROPERTY_CHANGE_EVENT_TOTAL , 0 , downloadUrls .totalSize );
110116 totalSize = downloadUrls .totalSize ;
111117
@@ -125,6 +131,14 @@ protected Object doInBackground() throws Exception {
125131 File downloadedPlatform = new File (tempFolder , downloadUrls .platformFilename );
126132 downloadAndUnpack (downloadUrls .platformUrl , downloadedPlatform , platformsFolder , false );
127133
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+
128142 // usb driver
129143 if (Platform .isWindows ()) {
130144 File usbDriverFolder = new File (extrasFolder , "google" );
@@ -208,7 +222,9 @@ private void downloadAndUnpack(String urlString, File saveTo,
208222 AndroidMode .extractFolder (saveTo , unpackTo , setExec );
209223 }
210224
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 {
212228 SDKUrlHolder urlHolder = new SDKUrlHolder ();
213229
214230 DocumentBuilderFactory dbf = DocumentBuilderFactory .newInstance ();
@@ -281,6 +297,30 @@ private SDKUrlHolder getDownloadUrls(String repositoryUrl, String requiredHostOs
281297 break ;
282298 }
283299 }
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+ }
284324
285325 return urlHolder ;
286326 }
0 commit comments