page.title=Download an Archived Android SDK
hide_license_footer=true

@jd:body

<script type="text/javascript">
  function verify() {
    document.getElementById('download-button').disabled =
!document.getElementById('checkbox').checked;
  }
  function submit() {
    var location = window.location.href;
    if (location.indexOf('?v=') != -1) {
      var filename = location.substring(location.indexOf('=')+1,location.length);
      if (document.getElementById('checkbox').checked) {
        document.location = "http://dl.google.com/android/" + filename;
      }
      document.getElementById('click-download').setAttribute("href", "http://dl.google.com/android/"
+ filename);
      $("#terms-form").hide(500);
      $("#next-steps").show(500);
      document.getElementById('checkbox').disabled=true;
      document.getElementById('download-button').disabled=true;
    } else {
      alert("You have not selected an SDK version. Please return to the SDK Archives page");
    }
  }
</script>

<div id="terms-form">
    <p>Please carefully review the Android SDK License Agreement before downloading the SDK.
The License Agreement constitutes a contract between you and Google with respect to your use of the
SDK.</p>
    <p class="note"><strong>Note:</strong> You must agree to this license agreement in order to
download one of the archived SDKs, because these SDK packages contain Google software (whereas, the
<a href="http://developer.android.com/sdk/index.html">current SDK</a> packages do not require a
license agreement, because they contain only the open sourced SDK tools).</p>

  <iframe id="terms" style="border:1px solid #888;margin:0 0 1em;height:400px;width:95%;"
src="terms_body.html">
  </iframe>

  <p>
    <input type="checkbox" id="checkbox" onclick="verify()" />
    <label for="checkbox">I agree to the terms of the Android SDK License Agreement.</label>
  </p>
  <p>
    <input type="submit" value="Download" id="download-button" disabled="disabled"
onclick="submit()" />
  </p>
  <p>
  <script language="javascript">
    var loc = window.location.href;
    if (loc.indexOf('?v=') != -1) {
      var filename = loc.substring(loc.indexOf('=')+1,loc.length);
      document.write("File: " + filename);
    }
  </script>
  </p>
</div><!-- end terms-form -->

<noscript>
  <p><strong>Please enable Javascript in your browser in order to agree to the terms and download
the SDK.</strong></p>
</noscript>

<div class="special" id="next-steps" style="display:none">
  <p>Your download should be underway. If not, <a id="click-download">click here to start the
download</a>.</p>
  <p>Beware that you've just downloaded a very old version of the Android SDK, which is not
recommended. We no longer maintain documentation about how to install these archived SDKs nor
support the tools contained within.</p>
  <p>We recommend that you instead download the latest <a
href="http://developer.android.com/sdk/index.html">Android SDK starter package</a>, which includes
the latest SDK tools and allows you to develop against any version of the Android platform, back to
Android 1.1.</p>
</div>

<script type="text/javascript">
  var loc = window.location.href;
  var filename = loc.substring(loc.indexOf('=')+1,loc.length);
  version = filename.substring(filename.indexOf('.')-1,filename.lastIndexOf('.'));
  $(".addVersionPath").each(function(i) {
    var oldHref = $(this).attr("href");
    $(this).attr({href: "/sdk/" + version + "/" + oldHref});
  });
</script>






