diff options
20 files changed, 291 insertions, 145 deletions
diff --git a/files/devices.xml b/files/devices.xml index 6dc0a3f..9b90578 100644 --- a/files/devices.xml +++ b/files/devices.xml @@ -261,6 +261,33 @@ </d:config> </d:device> + <d:device name="4.7in WXGA"> + <d:default> + <d:screen-size>normal</d:screen-size> + <d:screen-ratio>long</d:screen-ratio> + <d:screen-orientation>port</d:screen-orientation> + <d:pixel-density>xhdpi</d:pixel-density> + <d:touch-type>finger</d:touch-type> + <d:keyboard-state>keyssoft</d:keyboard-state> + <d:text-input-method>nokeys</d:text-input-method> + <d:nav-state>navexposed</d:nav-state> + <d:nav-method>nonav</d:nav-method> + <d:screen-dimension> + <d:size>1280</d:size> + <d:size>720</d:size> + </d:screen-dimension> + <d:xdpi>320</d:xdpi> + <d:ydpi>320</d:ydpi> + </d:default> + + <d:config name="Portrait"> + <d:screen-orientation>port</d:screen-orientation> + </d:config> + <d:config name="Landscape"> + <d:screen-orientation>land</d:screen-orientation> + </d:config> + </d:device> + <d:device name="5.1in WVGA"> <d:default> <d:screen-size>large</d:screen-size> diff --git a/sdkmanager/app/etc/android.bat b/sdkmanager/app/etc/android.bat index 3233ebd..6f93c7b 100755 --- a/sdkmanager/app/etc/android.bat +++ b/sdkmanager/app/etc/android.bat @@ -64,8 +64,8 @@ if not "%1"=="" goto EndTempCopy copy /B /D /Y lib\commons-logging* %tmp_dir%\lib\ > nul
copy /B /D /Y lib\commons-codec* %tmp_dir%\lib\ > nul
copy /B /D /Y lib\httpclient* %tmp_dir%\lib\ > nul
- copy /B /D /Y lib\httpcode* %tmp_dir%\lib\ > nul
- copy /B /D /Y lib\httpmime* %tmp_dir%\lib\ > nul + copy /B /D /Y lib\httpcore* %tmp_dir%\lib\ > nul
+ copy /B /D /Y lib\httpmime* %tmp_dir%\lib\ > nul
rem jar_path and swt_path are relative to PWD so we don't need to adjust them, just change dirs.
set tools_dir=%cd%
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/SdkManager.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/SdkManager.java index 8b54ccd..eab2dbe 100644 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/SdkManager.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/SdkManager.java @@ -344,127 +344,126 @@ public class SdkManager { private static PlatformTarget loadPlatform(String sdkOsPath, File platformFolder, ISdkLog log) { FileWrapper buildProp = new FileWrapper(platformFolder, SdkConstants.FN_BUILD_PROP); + FileWrapper sourcePropFile = new FileWrapper(platformFolder, SdkConstants.FN_SOURCE_PROP); - if (buildProp.isFile()) { + if (buildProp.isFile() && sourcePropFile.isFile()) { + Map<String, String> platformProp = new HashMap<String, String>(); + + // add all the property files Map<String, String> map = ProjectProperties.parsePropertyFile(buildProp, log); + if (map != null) { + platformProp.putAll(map); + } + map = ProjectProperties.parsePropertyFile(sourcePropFile, log); if (map != null) { - // look for some specific values in the map. + platformProp.putAll(map); + } - // version string - String apiName = map.get(PROP_VERSION_RELEASE); - if (apiName == null) { - log.warning( - "Ignoring platform '%1$s': %2$s is missing from '%3$s'", - platformFolder.getName(), PROP_VERSION_RELEASE, - SdkConstants.FN_BUILD_PROP); - return null; + FileWrapper sdkPropFile = new FileWrapper(platformFolder, SdkConstants.FN_SDK_PROP); + if (sdkPropFile.isFile()) { // obsolete platforms don't have this. + map = ProjectProperties.parsePropertyFile(sdkPropFile, log); + if (map != null) { + platformProp.putAll(map); } + } - // api level - int apiNumber; - String stringValue = map.get(PROP_VERSION_SDK); - if (stringValue == null) { + // look for some specific values in the map. + + // api level + int apiNumber; + String stringValue = platformProp.get(PROP_VERSION_SDK); + if (stringValue == null) { + log.warning( + "Ignoring platform '%1$s': %2$s is missing from '%3$s'", + platformFolder.getName(), PROP_VERSION_SDK, + SdkConstants.FN_BUILD_PROP); + return null; + } else { + try { + apiNumber = Integer.parseInt(stringValue); + } catch (NumberFormatException e) { + // looks like apiNumber does not parse to a number. + // Ignore this platform. log.warning( - "Ignoring platform '%1$s': %2$s is missing from '%3$s'", + "Ignoring platform '%1$s': %2$s is not a valid number in %3$s.", platformFolder.getName(), PROP_VERSION_SDK, SdkConstants.FN_BUILD_PROP); return null; - } else { - try { - apiNumber = Integer.parseInt(stringValue); - } catch (NumberFormatException e) { - // looks like apiNumber does not parse to a number. - // Ignore this platform. - log.warning( - "Ignoring platform '%1$s': %2$s is not a valid number in %3$s.", - platformFolder.getName(), PROP_VERSION_SDK, - SdkConstants.FN_BUILD_PROP); - return null; - } - } - - // codename (optional) - String apiCodename = map.get(PROP_VERSION_CODENAME); - if (apiCodename != null && apiCodename.equals("REL")) { - apiCodename = null; // REL means it's a release version and therefore the - // codename is irrelevant at this point. } + } - // platform rev number & layoutlib version are extracted from the source.properties - // saved by the SDK Manager when installing the package. - - int revision = 1; - LayoutlibVersion layoutlibVersion = null; - - FileWrapper sourcePropFile = - new FileWrapper(platformFolder, SdkConstants.FN_SOURCE_PROP); + // codename (optional) + String apiCodename = platformProp.get(PROP_VERSION_CODENAME); + if (apiCodename != null && apiCodename.equals("REL")) { + apiCodename = null; // REL means it's a release version and therefore the + // codename is irrelevant at this point. + } - Map<String, String> sourceProp = ProjectProperties.parsePropertyFile( - sourcePropFile, log); + // version string + String apiName = platformProp.get(PkgProps.PLATFORM_VERSION); + if (apiName == null) { + apiName = platformProp.get(PROP_VERSION_RELEASE); + } + if (apiName == null) { + log.warning( + "Ignoring platform '%1$s': %2$s is missing from '%3$s'", + platformFolder.getName(), PROP_VERSION_RELEASE, + SdkConstants.FN_BUILD_PROP); + return null; + } - if (sourceProp != null) { - try { - revision = Integer.parseInt(sourceProp.get(PkgProps.PKG_REVISION)); - } catch (NumberFormatException e) { - // do nothing, we'll keep the default value of 1. - } + // platform rev number & layoutlib version are extracted from the source.properties + // saved by the SDK Manager when installing the package. - try { - String propApi = sourceProp.get(PkgProps.LAYOUTLIB_API); - String propRev = sourceProp.get(PkgProps.LAYOUTLIB_REV); - int llApi = propApi == null ? LayoutlibVersion.NOT_SPECIFIED : - Integer.parseInt(propApi); - int llRev = propRev == null ? LayoutlibVersion.NOT_SPECIFIED : - Integer.parseInt(propRev); - if (llApi > LayoutlibVersion.NOT_SPECIFIED && - llRev >= LayoutlibVersion.NOT_SPECIFIED) { - layoutlibVersion = new LayoutlibVersion(llApi, llRev); - } - } catch (NumberFormatException e) { - // do nothing, we'll ignore the layoutlib version if it's invalid - } + int revision = 1; + LayoutlibVersion layoutlibVersion = null; + try { + revision = Integer.parseInt(platformProp.get(PkgProps.PKG_REVISION)); + } catch (NumberFormatException e) { + // do nothing, we'll keep the default value of 1. + } - map.putAll(sourceProp); + try { + String propApi = platformProp.get(PkgProps.LAYOUTLIB_API); + String propRev = platformProp.get(PkgProps.LAYOUTLIB_REV); + int llApi = propApi == null ? LayoutlibVersion.NOT_SPECIFIED : + Integer.parseInt(propApi); + int llRev = propRev == null ? LayoutlibVersion.NOT_SPECIFIED : + Integer.parseInt(propRev); + if (llApi > LayoutlibVersion.NOT_SPECIFIED && + llRev >= LayoutlibVersion.NOT_SPECIFIED) { + layoutlibVersion = new LayoutlibVersion(llApi, llRev); } + } catch (NumberFormatException e) { + // do nothing, we'll ignore the layoutlib version if it's invalid + } - // Ant properties - FileWrapper sdkPropFile = new FileWrapper(platformFolder, SdkConstants.FN_SDK_PROP); - Map<String, String> antProp = null; - if (sdkPropFile.isFile()) { // obsolete platforms don't have this. - antProp = ProjectProperties.parsePropertyFile(sdkPropFile, log); - } + // api number and name look valid, perform a few more checks + if (checkPlatformContent(platformFolder, log) == false) { + return null; + } - if (antProp != null) { - map.putAll(antProp); - } + ISystemImage[] systemImages = + getPlatformSystemImages(sdkOsPath, platformFolder, apiNumber, apiCodename); + + // create the target. + PlatformTarget target = new PlatformTarget( + sdkOsPath, + platformFolder.getAbsolutePath(), + apiNumber, + apiCodename, + apiName, + revision, + layoutlibVersion, + systemImages, + platformProp); - // api number and name look valid, perform a few more checks - if (checkPlatformContent(platformFolder, log) == false) { - return null; - } + // need to parse the skins. + String[] skins = parseSkinFolder(target.getPath(IAndroidTarget.SKINS)); + target.setSkins(skins); - ISystemImage[] systemImages = - getPlatformSystemImages(sdkOsPath, platformFolder, apiNumber, apiCodename); - - // create the target. - PlatformTarget target = new PlatformTarget( - sdkOsPath, - platformFolder.getAbsolutePath(), - apiNumber, - apiCodename, - apiName, - revision, - layoutlibVersion, - systemImages, - map); - - // need to parse the skins. - String[] skins = parseSkinFolder(target.getPath(IAndroidTarget.SKINS)); - target.setSkins(skins); - - return target; - } + return target; } else { log.warning("Ignoring platform '%1$s': %2$s is missing.", //$NON-NLS-1$ platformFolder.getName(), @@ -560,7 +559,15 @@ public class SdkManager { try { File propFile = new File(secondLevel, SdkConstants.FN_SOURCE_PROP); Properties props = new Properties(); - props.load(new FileInputStream(propFile)); + FileInputStream fis = null; + try { + fis = new FileInputStream(propFile); + props.load(fis); + } finally { + if (fis != null) { + fis.close(); + } + } AndroidVersion propsVersion = new AndroidVersion(props); if (!propsVersion.equals(version)) { @@ -1025,7 +1032,15 @@ public class SdkManager { File sourceProp = new File(folder, SdkConstants.FN_SOURCE_PROP); try { Properties p = new Properties(); - p.load(new FileInputStream(sourceProp)); + FileInputStream fis = null; + try { + fis = new FileInputStream(sourceProp); + p.load(fis); + } finally { + if (fis != null) { + fis.close(); + } + } return new AndroidVersion(p); } catch (FileNotFoundException e) { diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/Archive.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/Archive.java index 8aea2c1..f56d202 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/Archive.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/Archive.java @@ -215,7 +215,7 @@ public class Archive implements IDescription, Comparable<Archive> { mLocalOsPath = localOsPath;
mSize = 0;
mChecksum = "";
- mIsLocal = true;
+ mIsLocal = localOsPath != null;
}
/**
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/LocalSdkParser.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/LocalSdkParser.java index 4324623..efc736a 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/LocalSdkParser.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/LocalSdkParser.java @@ -149,7 +149,8 @@ public class LocalSdkParser { target.getVersion(),
0 /*revision*/, // this will use the one from siProps if any
systemImage.getAbiType(),
- siProps);
+ siProps,
+ siDir.getAbsolutePath());
packages.add(pkg2);
visited.add(siDir);
}
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/Package.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/Package.java index c5a176f..57de740 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/Package.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/Package.java @@ -147,6 +147,7 @@ public abstract class Package implements IDescription, Comparable<Package> { }
mSource = source;
+ assert archiveOsPath != null;
mArchives = initializeArchives(props, archiveOs, archiveArch, archiveOsPath);
}
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/SdkAddonSource.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/SdkAddonSource.java index b79cc90..42f7603 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/SdkAddonSource.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/SdkAddonSource.java @@ -50,8 +50,8 @@ public class SdkAddonSource extends SdkSource { }
@Override
- protected String getUrlDefaultXmlFile() {
- return SdkAddonConstants.URL_DEFAULT_FILENAME;
+ protected String[] getDefaultXmlFileUrls() {
+ return new String[] { SdkAddonConstants.URL_DEFAULT_FILENAME };
}
@Override
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/SdkRepoSource.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/SdkRepoSource.java index d53bcc5..d35e365 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/SdkRepoSource.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/SdkRepoSource.java @@ -64,8 +64,11 @@ public class SdkRepoSource extends SdkSource { }
@Override
- protected String getUrlDefaultXmlFile() {
- return SdkRepoConstants.URL_DEFAULT_FILENAME;
+ protected String[] getDefaultXmlFileUrls() {
+ return new String[] {
+ SdkRepoConstants.URL_DEFAULT_FILENAME2,
+ SdkRepoConstants.URL_DEFAULT_FILENAME
+ };
}
@Override
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/SdkSource.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/SdkSource.java index 5cc2cce..263bf15 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/SdkSource.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/SdkSource.java @@ -86,7 +86,10 @@ public abstract class SdkSource implements IDescription, Comparable<SdkSource> { // looked for. This way it will be obvious to the user which
// resource we are actually trying to fetch.
if (url.endsWith("/")) { //$NON-NLS-1$
- url += getUrlDefaultXmlFile();
+ String[] names = getDefaultXmlFileUrls();
+ if (names.length > 0) {
+ url += names[0];
+ }
}
mUrl = url;
@@ -100,8 +103,13 @@ public abstract class SdkSource implements IDescription, Comparable<SdkSource> { */
public abstract boolean isAddonSource();
- /** Returns SdkRepoConstants.URL_DEFAULT_XML_FILE or SdkAddonConstants.URL_DEFAULT_XML_FILE */
- protected abstract String getUrlDefaultXmlFile();
+ /**
+ * Returns the basename of the default URLs to try to download the
+ * XML manifest.
+ * E.g. this is typically SdkRepoConstants.URL_DEFAULT_XML_FILE
+ * or SdkAddonConstants.URL_DEFAULT_XML_FILE
+ */
+ protected abstract String[] getDefaultXmlFileUrls();
/** Returns SdkRepoConstants.NS_LATEST_VERSION or SdkAddonConstants.NS_LATEST_VERSION. */
protected abstract int getNsLatestVersion();
@@ -250,7 +258,7 @@ public abstract class SdkSource implements IDescription, Comparable<SdkSource> { */
public void load(ITaskMonitor monitor, boolean forceHttp) {
- monitor.setProgressMax(6);
+ monitor.setProgressMax(7);
setDefaultDescription();
@@ -266,28 +274,77 @@ public abstract class SdkSource implements IDescription, Comparable<SdkSource> { Boolean[] validatorFound = new Boolean[] { Boolean.FALSE };
String[] validationError = new String[] { null };
Exception[] exception = new Exception[] { null };
- InputStream xml = fetchUrl(url, monitor.createSubMonitor(1), exception);
Document validatedDoc = null;
boolean usingAlternateXml = false;
boolean usingAlternateUrl = false;
String validatedUri = null;
+ String[] defaultNames = getDefaultXmlFileUrls();
+ String firstDefaultName = defaultNames.length > 0 ? defaultNames[0] : "";
+
+ InputStream xml = fetchUrl(url, monitor.createSubMonitor(1), exception);
+ if (xml != null) {
+ int version = getXmlSchemaVersion(xml);
+ if (version == 0) {
+ xml = null;
+ }
+ }
+
+ // FIXME: this is a quick fix to support an alternate upgrade path.
+ // The whole logic below needs to be updated.
+ if (xml == null && defaultNames.length > 0) {
+ ITaskMonitor subMonitor = monitor.createSubMonitor(1);
+ subMonitor.setProgressMax(defaultNames.length);
+
+ String baseUrl = url;
+ if (!baseUrl.endsWith("/")) {
+ int pos = baseUrl.lastIndexOf('/');
+ if (pos > 0) {
+ baseUrl = baseUrl.substring(0, pos + 1);
+ }
+ }
+
+ for(String name : defaultNames) {
+ String newUrl = baseUrl + name;
+ if (newUrl.equals(url)) {
+ continue;
+ }
+ xml = fetchUrl(newUrl, subMonitor.createSubMonitor(1), exception);
+ if (xml != null) {
+ int version = getXmlSchemaVersion(xml);
+ if (version == 0) {
+ xml = null;
+ } else {
+ url = newUrl;
+ subMonitor.incProgress(
+ subMonitor.getProgressMax() - subMonitor.getProgress());
+ break;
+ }
+ }
+ }
+ } else {
+ monitor.incProgress(1);
+ }
+
// If the original URL can't be fetched
// and the URL doesn't explicitly end with our filename
// and it wasn't an HTTP authentication operation canceled by the user
// then make another tentative after changing the URL.
if (xml == null
- && !url.endsWith(getUrlDefaultXmlFile())
+ && !url.endsWith(firstDefaultName)
&& !(exception[0] instanceof CanceledByUserException)) {
if (!url.endsWith("/")) { //$NON-NLS-1$
url += "/"; //$NON-NLS-1$
}
- url += getUrlDefaultXmlFile();
+ url += firstDefaultName;
xml = fetchUrl(url, monitor.createSubMonitor(1), exception);
usingAlternateUrl = true;
+ } else {
+ monitor.incProgress(1);
}
+ // FIXME this needs to revisited.
if (xml != null) {
monitor.setDescription("Validate XML: %1$s", url);
@@ -348,11 +405,11 @@ public abstract class SdkSource implements IDescription, Comparable<SdkSource> { // If we haven't already tried the alternate URL, let's do it now.
// We don't capture any fetch exception that happen during the second
// fetch in order to avoid hidding any previous fetch errors.
- if (!url.endsWith(getUrlDefaultXmlFile())) {
+ if (!url.endsWith(firstDefaultName)) {
if (!url.endsWith("/")) { //$NON-NLS-1$
url += "/"; //$NON-NLS-1$
}
- url += getUrlDefaultXmlFile();
+ url += firstDefaultName;
xml = fetchUrl(url, subMonitor.createSubMonitor(1), null /* outException */);
subMonitor.incProgress(1);
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/SourcePackage.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/SourcePackage.java index 8b928c7..c33d949 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/SourcePackage.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/SourcePackage.java @@ -72,8 +72,9 @@ public class SourcePackage extends Package implements IPackageVersion { protected SourcePackage(
AndroidVersion platformVersion,
int revision,
- Properties props) {
- this(null /*source*/, platformVersion, revision, props);
+ Properties props,
+ String localOsPath) {
+ this(null /*source*/, platformVersion, revision, props, localOsPath);
}
@VisibleForTesting(visibility=Visibility.PRIVATE)
@@ -81,7 +82,8 @@ public class SourcePackage extends Package implements IPackageVersion { SdkSource source,
AndroidVersion platformVersion,
int revision,
- Properties props) {
+ Properties props,
+ String localOsPath) {
super( source, //source
props, //properties
revision, //revision
@@ -90,7 +92,7 @@ public class SourcePackage extends Package implements IPackageVersion { null, //descUrl
Os.getCurrentOs(), //archiveOs
Arch.getCurrentArch(), //archiveArch
- null //archiveOsPath
+ localOsPath //archiveOsPath
);
mVersion = platformVersion;
}
@@ -119,7 +121,7 @@ public class SourcePackage extends Package implements IPackageVersion { version = new AndroidVersion(props);
// The constructor will extract the revision from the properties
// and it will not consider a missing revision as being fatal.
- return new SourcePackage(version, 0 /*revision*/, props);
+ return new SourcePackage(version, 0 /*revision*/, props, srcDir.getAbsolutePath());
} catch (AndroidVersionException e) {
error = String.format("Invalid file %1$s: %2$s",
SdkConstants.FN_SOURCE_PROP,
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/SystemImagePackage.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/SystemImagePackage.java index 63d7732..3e8363c 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/SystemImagePackage.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/SystemImagePackage.java @@ -77,8 +77,9 @@ public class SystemImagePackage extends Package AndroidVersion platformVersion,
int revision,
String abi,
- Properties props) {
- this(null /*source*/, platformVersion, revision, abi, props);
+ Properties props,
+ String localOsPath) {
+ this(null /*source*/, platformVersion, revision, abi, props, localOsPath);
}
@VisibleForTesting(visibility=Visibility.PRIVATE)
@@ -87,7 +88,8 @@ public class SystemImagePackage extends Package AndroidVersion platformVersion,
int revision,
String abi,
- Properties props) {
+ Properties props,
+ String localOsPath) {
super( source, //source
props, //properties
revision, //revision
@@ -96,7 +98,7 @@ public class SystemImagePackage extends Package null, //descUrl
Os.getCurrentOs(), //archiveOs
Arch.getCurrentArch(), //archiveArch
- null //archiveOsPath
+ localOsPath //archiveOsPath
);
mVersion = platformVersion;
if (abi == null && props != null) {
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/io/FileOp.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/io/FileOp.java index 4600e68..efab4ad 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/io/FileOp.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/io/FileOp.java @@ -95,8 +95,11 @@ public class FileOp implements IFileOp { if (fileOrFolder != null) {
if (isDirectory(fileOrFolder)) {
// Must delete content recursively first
- for (File item : fileOrFolder.listFiles()) {
- deleteFileOrFolder(item);
+ File[] files = fileOrFolder.listFiles();
+ if (files != null) {
+ for (File item : files) {
+ deleteFileOrFolder(item);
+ }
}
}
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/SdkRepoConstants.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/SdkRepoConstants.java index b7701fe..bbd5f7a 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/SdkRepoConstants.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/SdkRepoConstants.java @@ -26,6 +26,10 @@ import java.io.InputStream; */
public class SdkRepoConstants extends RepoConstants {
+ /** The latest version of the sdk-repository XML Schema.
+ * Valid version numbers are between 1 and this number, included. */
+ public static final int NS_LATEST_VERSION = 5;
+
/** The URL of the official Google sdk-repository site. */
public static final String URL_GOOGLE_SDK_SITE =
"https://dl-ssl.google.com/android/repository/"; //$NON-NLS-1$
@@ -34,6 +38,13 @@ public class SdkRepoConstants extends RepoConstants { * sdk-repository XML if the URL doesn't match an existing resource. */
public static final String URL_DEFAULT_FILENAME = "repository.xml"; //$NON-NLS-1$
+ /** The pattern name looked by {@link SdkSource} when trying to load
+ * the latest sdk-repository XML that is specific to the current XSD
+ * schema revision.
+ */
+ public static final String URL_DEFAULT_FILENAME2 =
+ String.format("repository-%d.xml", NS_LATEST_VERSION); //$NON-NLS-1$
+
/** The base of our sdk-repository XML namespace. */
private static final String NS_BASE =
"http://schemas.android.com/sdk/android/repository/"; //$NON-NLS-1$
@@ -44,10 +55,6 @@ public class SdkRepoConstants extends RepoConstants { */
public static final String NS_PATTERN = NS_BASE + "([1-9][0-9]*)"; //$NON-NLS-1$
- /** The latest version of the sdk-repository XML Schema.
- * Valid version numbers are between 1 and this number, included. */
- public static final int NS_LATEST_VERSION = 5;
-
/** The XML namespace of the latest sdk-repository XML. */
public static final String NS_URI = getSchemaUri(NS_LATEST_VERSION);
diff --git a/sdkmanager/libs/sdklib/tests/src/com/android/sdklib/internal/repository/MockBrokenPackage.java b/sdkmanager/libs/sdklib/tests/src/com/android/sdklib/internal/repository/MockBrokenPackage.java index b64af25..9ea9dfa 100755 --- a/sdkmanager/libs/sdklib/tests/src/com/android/sdklib/internal/repository/MockBrokenPackage.java +++ b/sdkmanager/libs/sdklib/tests/src/com/android/sdklib/internal/repository/MockBrokenPackage.java @@ -50,6 +50,6 @@ public class MockBrokenPackage extends BrokenPackage { longDescription,
minApiLevel,
exactApiLevel,
- null /*osPath*/);
+ "/sdk/broken/package" /*osPath*/);
}
}
diff --git a/sdkmanager/libs/sdklib/tests/src/com/android/sdklib/internal/repository/MockEmptyPackage.java b/sdkmanager/libs/sdklib/tests/src/com/android/sdklib/internal/repository/MockEmptyPackage.java index 040d18d..7fdee5b 100755 --- a/sdkmanager/libs/sdklib/tests/src/com/android/sdklib/internal/repository/MockEmptyPackage.java +++ b/sdkmanager/libs/sdklib/tests/src/com/android/sdklib/internal/repository/MockEmptyPackage.java @@ -48,7 +48,7 @@ public class MockEmptyPackage extends Package { null /*descUrl*/, Os.ANY /*archiveOs*/, Arch.ANY /*archiveArch*/, - null /*archiveOsPath*/ + "/sdk/tmp/empty_pkg" /*archiveOsPath*/ ); mTestHandle = testHandle; } @@ -69,7 +69,7 @@ public class MockEmptyPackage extends Package { null /*descUrl*/, Os.ANY /*archiveOs*/, Arch.ANY /*archiveArch*/, - null /*archiveOsPath*/ + "/sdk/tmp/empty_pkg" /*archiveOsPath*/ ); mTestHandle = testHandle; } @@ -91,7 +91,7 @@ public class MockEmptyPackage extends Package { null /*descUrl*/, Os.ANY /*archiveOs*/, Arch.ANY /*archiveArch*/, - null /*archiveOsPath*/ + "/sdk/tmp/empty_pkg" /*archiveOsPath*/ ); mTestHandle = testHandle; } diff --git a/sdkmanager/libs/sdklib/tests/src/com/android/sdklib/internal/repository/MockSourcePackage.java b/sdkmanager/libs/sdklib/tests/src/com/android/sdklib/internal/repository/MockSourcePackage.java index f45e79a..ea65566 100755 --- a/sdkmanager/libs/sdklib/tests/src/com/android/sdklib/internal/repository/MockSourcePackage.java +++ b/sdkmanager/libs/sdklib/tests/src/com/android/sdklib/internal/repository/MockSourcePackage.java @@ -32,7 +32,10 @@ public class MockSourcePackage extends SourcePackage { * By design, this package contains one and only one archive.
*/
public MockSourcePackage(AndroidVersion version, int revision) {
- super(version, revision, null /*props*/);
+ super(version,
+ revision,
+ null /*props*/,
+ String.format("/sdk/sources/android-%s", version.getApiString()));
}
/**
@@ -45,6 +48,10 @@ public class MockSourcePackage extends SourcePackage { SdkSource source,
AndroidVersion version,
int revision) {
- super(source, version, revision, null /*props*/);
+ super(source,
+ version,
+ revision,
+ null /*props*/,
+ String.format("/sdk/sources/android-%s", version.getApiString()));
}
}
diff --git a/sdkmanager/libs/sdklib/tests/src/com/android/sdklib/internal/repository/MockSystemImagePackage.java b/sdkmanager/libs/sdklib/tests/src/com/android/sdklib/internal/repository/MockSystemImagePackage.java index 53f3a54..3237fbb 100755 --- a/sdkmanager/libs/sdklib/tests/src/com/android/sdklib/internal/repository/MockSystemImagePackage.java +++ b/sdkmanager/libs/sdklib/tests/src/com/android/sdklib/internal/repository/MockSystemImagePackage.java @@ -30,7 +30,12 @@ public class MockSystemImagePackage extends SystemImagePackage { * By design, this package contains one and only one archive.
*/
public MockSystemImagePackage(MockPlatformPackage basePlatform, int revision, String abi) {
- super(basePlatform.getVersion(), revision, abi, null /*props*/);
+ super(basePlatform.getVersion(),
+ revision,
+ abi,
+ null /*props*/,
+ String.format("/sdk/system-images/android-%s/%s",
+ basePlatform.getVersion().getApiString(), abi));
}
/**
@@ -44,6 +49,12 @@ public class MockSystemImagePackage extends SystemImagePackage { MockPlatformPackage basePlatform,
int revision,
String abi) {
- super(source, basePlatform.getVersion(), revision, abi, null /*props*/);
+ super(source,
+ basePlatform.getVersion(),
+ revision,
+ abi,
+ null /*props*/,
+ String.format("/sdk/system-images/android-%s/%s",
+ basePlatform.getVersion().getApiString(), abi));
}
}
diff --git a/sdkmanager/libs/sdklib/tests/src/com/android/sdklib/internal/repository/SourcePackageTest.java b/sdkmanager/libs/sdklib/tests/src/com/android/sdklib/internal/repository/SourcePackageTest.java index 2558546..2311feb 100755 --- a/sdkmanager/libs/sdklib/tests/src/com/android/sdklib/internal/repository/SourcePackageTest.java +++ b/sdkmanager/libs/sdklib/tests/src/com/android/sdklib/internal/repository/SourcePackageTest.java @@ -37,7 +37,10 @@ public class SourcePackageTest extends PackageTest { AndroidVersion platformVersion, int revision, Properties props) { - super(platformVersion, revision, props); + super(platformVersion, + revision, + props, + String.format("/sdk/sources/android-%s", platformVersion.getApiString())); } @Override diff --git a/sdkmanager/libs/sdklib/tests/src/com/android/sdklib/internal/repository/SystemImagePackageTest.java b/sdkmanager/libs/sdklib/tests/src/com/android/sdklib/internal/repository/SystemImagePackageTest.java index 14a8c3b..e6f0a2d 100755 --- a/sdkmanager/libs/sdklib/tests/src/com/android/sdklib/internal/repository/SystemImagePackageTest.java +++ b/sdkmanager/libs/sdklib/tests/src/com/android/sdklib/internal/repository/SystemImagePackageTest.java @@ -38,7 +38,12 @@ public class SystemImagePackageTest extends PackageTest { int revision, String abi, Properties props) { - super(platformVersion, revision, abi, props); + super(platformVersion, + revision, + abi, + props, + String.format("/sdk/system-images/android-%s/%s", + platformVersion.getApiString(), abi)); } @Override diff --git a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdaterData.java b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdaterData.java index d59e67b..cb26576 100755 --- a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdaterData.java +++ b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdaterData.java @@ -337,10 +337,12 @@ public class UpdaterData implements IUpdaterData { for (String url : urls) {
if (url != null) {
url = url.trim();
- if (url.endsWith("/") || url.endsWith(SdkRepoConstants.URL_DEFAULT_FILENAME)) {
+ if (url.endsWith("/")
+ || url.endsWith(SdkRepoConstants.URL_DEFAULT_FILENAME)
+ || url.endsWith(SdkRepoConstants.URL_DEFAULT_FILENAME2)) {
String fullUrl = url;
if (fullUrl.endsWith("/")) {
- fullUrl += SdkRepoConstants.URL_DEFAULT_FILENAME;
+ fullUrl += SdkRepoConstants.URL_DEFAULT_FILENAME2;
}
SdkSource s = new SdkRepoSource(fullUrl, null/*uiName*/);
|