page.title=Getting Started with Android Studio
page.tags="studio"
@jd:body




<div style="position:relative;min-height:660px;">

<h3 style="color:#f80">EARLY ACCESS PREVIEW</h3>

<div id="tos" style="position:absolute;display:none;width:inherit;">
<div class="col-13" style="margin:0;">&nbsp;</div><!-- provides top margin for content -->


<p class="sdk-terms-intro">Before installing the Android SDK, you must agree to the following terms and conditions.</p>

<div class="sdk-terms" onfocus="this.blur()">
<h2 class="norule">Terms and Conditions</h2>
This is the Android Software Development Kit License Agreement

<h3>1. Introduction</h3>
1.1 The Android Software Development Kit (referred to in this License Agreement as the "SDK" and specifically including the Android system files, packaged APIs, and Google APIs add-ons) is licensed to you subject to the terms of this License Agreement. This License Agreement forms a legally binding contract between you and Google in relation to your use of the SDK.

1.2 "Android" means the Android software stack for devices, as made available under the Android Open Source Project, which is located at the following URL: http://source.android.com/, as updated from time to time.

1.3 "Google" means Google Inc., a Delaware corporation with principal place of business at 1600 Amphitheatre Parkway, Mountain View, CA 94043, United States.


<h3>2. Accepting this License Agreement</h3>
2.1 In order to use the SDK, you must first agree to this License Agreement. You may not use the SDK if you do not accept this License Agreement.

2.2 By clicking to accept, you hereby agree to the terms of this License Agreement.

2.3 You may not use the SDK and may not accept the License Agreement if you are a person barred from receiving the SDK under the laws of the United States or other countries including the country in which you are resident or from which you use the SDK.

2.4 If you are agreeing to be bound by this License Agreement on behalf of your employer or other entity, you represent and warrant that you have full legal authority to bind your employer or such entity to this License Agreement. If you do not have the requisite authority, you may not accept the License Agreement or use the SDK on behalf of your employer or other entity.


<h3>3. SDK License from Google</h3>
3.1 Subject to the terms of this License Agreement, Google grants you a limited, worldwide, royalty-free, non-assignable and non-exclusive license to use the SDK solely to develop applications to run on the Android platform.

3.2 You agree that Google or third parties own all legal right, title and interest in and to the SDK, including any Intellectual Property Rights that subsist in the SDK. "Intellectual Property Rights" means any and all rights under patent law, copyright law, trade secret law, trademark law, and any and all other proprietary rights. Google reserves all rights not expressly granted to you.

3.3 You may not use the SDK for any purpose not expressly permitted by this License Agreement.  Except to the extent required by applicable third party licenses, you may not: (a) copy (except for backup purposes), modify, adapt, redistribute, decompile, reverse engineer, disassemble, or create derivative works of the SDK or any part of the SDK; or (b) load any part of the SDK onto a mobile handset or any other hardware device except a personal computer, combine any part of the SDK with other software, or distribute any software or device incorporating a part of the SDK.

3.4 You agree that you will not take any actions that may cause or result in the fragmentation of Android, including but not limited to distributing, participating in the creation of, or promoting in any way a software development kit derived from the SDK.

3.5 Use, reproduction and distribution of components of the SDK licensed under an open source software license are governed solely by the terms of that open source software license and not this License Agreement.

3.6 You agree that the form and nature of the SDK that Google provides may change without prior notice to you and that future versions of the SDK may be incompatible with applications developed on previous versions of the SDK. You agree that Google may stop (permanently or temporarily) providing the SDK (or any features within the SDK) to you or to users generally at Google's sole discretion, without prior notice to you.

3.7 Nothing in this License Agreement gives you a right to use any of Google's trade names, trademarks, service marks, logos, domain names, or other distinctive brand features.

3.8 You agree that you will not remove, obscure, or alter any proprietary rights notices (including copyright and trademark notices) that may be affixed to or contained within the SDK.


<h3>4. Use of the SDK by You</h3>
4.1 Google agrees that it obtains no right, title or interest from you (or your licensors) under this License Agreement in or to any software applications that you develop using the SDK, including any intellectual property rights that subsist in those applications.

4.2 You agree to use the SDK and write applications only for purposes that are permitted by (a) this License Agreement and (b) any applicable law, regulation or generally accepted practices or guidelines in the relevant jurisdictions (including any laws regarding the export of data or software to and from the United States or other relevant countries).

4.3 You agree that if you use the SDK to develop applications for general public users, you will protect the privacy and legal rights of those users. If the users provide you with user names, passwords, or other login information or personal information, you must make the users aware that the information will be available to your application, and you must provide legally adequate privacy notice and protection for those users. If your application stores personal or sensitive information provided by users, it must do so securely. If the user provides your application with Google Account information, your application may only use that information to access the user's Google Account when, and for the limited purposes for which, the user has given you permission to do so.

4.4 You agree that you will not engage in any activity with the SDK, including the development or distribution of an application, that interferes with, disrupts, damages, or accesses in an unauthorized manner the servers, networks, or other properties or services of any third party including, but not limited to, Google or any mobile communications carrier.

4.5 You agree that you are solely responsible for (and that Google has no responsibility to you or to any third party for) any data, content, or resources that you create, transmit or display through Android and/or applications for Android, and for the consequences of your actions (including any loss or damage which Google may suffer) by doing so.

4.6 You agree that you are solely responsible for (and that Google has no responsibility to you or to any third party for) any breach of your obligations under this License Agreement, any applicable third party contract or Terms of Service, or any applicable law or regulation, and for the consequences (including any loss or damage which Google or any third party may suffer) of any such breach.


<h3>5. Your Developer Credentials</h3>
5.1 You agree that you are responsible for maintaining the confidentiality of any developer credentials that may be issued to you by Google or which you may choose yourself and that you will be solely responsible for all applications that are developed under your developer credentials.


<h3>6. Privacy and Information</h3>
6.1 In order to continually innovate and improve the SDK, Google may collect certain usage statistics from the software including but not limited to a unique identifier, associated IP address, version number of the software, and information on which tools and/or services in the SDK are being used and how they are being used. Before any of this information is collected, the SDK will notify you and seek your consent. If you withhold consent, the information will not be collected.

6.2 The data collected is examined in the aggregate to improve the SDK and is maintained in accordance with Google's Privacy Policy.


<h3>7. Third Party Applications</h3>
7.1 If you use the SDK to run applications developed by a third party or that access data, content or resources provided by a third party, you agree that Google is not responsible for those applications, data, content, or resources. You understand that all data, content or resources which you may access through such third party applications are the sole responsibility of the person from which they originated and that Google is not liable for any loss or damage that you may experience as a result of the use or access of any of those third party applications, data, content, or resources.

7.2 You should be aware the data, content, and resources presented to you through such a third party application may be protected by intellectual property rights which are owned by the providers (or by other persons or companies on their behalf). You may not modify, rent, lease, loan, sell, distribute or create derivative works based on these data, content, or resources (either in whole or in part) unless you have been specifically given permission to do so by the relevant owners.

7.3 You acknowledge that your use of such third party applications, data, content, or resources may be subject to separate terms between you and the relevant third party. In that case, this License Agreement does not affect your legal relationship with these third parties.


<h3>8. Using Android APIs</h3>
8.1 Google Data APIs

8.1.1 If you use any API to retrieve data from Google, you acknowledge that the data may be protected by intellectual property rights which are owned by Google or those parties that provide the data (or by other persons or companies on their behalf). Your use of any such API may be subject to additional Terms of Service. You may not modify, rent, lease, loan, sell, distribute or create derivative works based on this data (either in whole or in part) unless allowed by the relevant Terms of Service.

8.1.2 If you use any API to retrieve a user's data from Google, you acknowledge and agree that you shall retrieve data only with the user's explicit consent and only when, and for the limited purposes for which, the user has given you permission to do so.


<h3>9. Terminating this License Agreement</h3>
9.1 This License Agreement will continue to apply until terminated by either you or Google as set out below.

9.2 If you want to terminate this License Agreement, you may do so by ceasing your use of the SDK and any relevant developer credentials.

9.3 Google may at any time, terminate this License Agreement with you if:
(A) you have breached any provision of this License Agreement; or
(B) Google is required to do so by law; or
(C) the partner with whom Google offered certain parts of SDK (such as APIs) to you has terminated its relationship with Google or ceased to offer certain parts of the SDK to you; or
(D) Google decides to no longer provide the SDK or certain parts of the SDK to users in the country in which you are resident or from which you use the service, or the provision of the SDK or certain SDK services to you by Google is, in Google's sole discretion, no longer commercially viable.

9.4 When this License Agreement comes to an end, all of the legal rights, obligations and liabilities that you and Google have benefited from, been subject to (or which have accrued over time whilst this License Agreement has been in force) or which are expressed to continue indefinitely, shall be unaffected by this cessation, and the provisions of paragraph 14.7 shall continue to apply to such rights, obligations and liabilities indefinitely.


<h3>10. DISCLAIMER OF WARRANTIES</h3>
10.1 YOU EXPRESSLY UNDERSTAND AND AGREE THAT YOUR USE OF THE SDK IS AT YOUR SOLE RISK AND THAT THE SDK IS PROVIDED "AS IS" AND "AS AVAILABLE" WITHOUT WARRANTY OF ANY KIND FROM GOOGLE.

10.2 YOUR USE OF THE SDK AND ANY MATERIAL DOWNLOADED OR OTHERWISE OBTAINED THROUGH THE USE OF THE SDK IS AT YOUR OWN DISCRETION AND RISK AND YOU ARE SOLELY RESPONSIBLE FOR ANY DAMAGE TO YOUR COMPUTER SYSTEM OR OTHER DEVICE OR LOSS OF DATA THAT RESULTS FROM SUCH USE.

10.3 GOOGLE FURTHER EXPRESSLY DISCLAIMS ALL WARRANTIES AND CONDITIONS OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.


<h3>11. LIMITATION OF LIABILITY</h3>
11.1 YOU EXPRESSLY UNDERSTAND AND AGREE THAT GOOGLE, ITS SUBSIDIARIES AND AFFILIATES, AND ITS LICENSORS SHALL NOT BE LIABLE TO YOU UNDER ANY THEORY OF LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL OR EXEMPLARY DAMAGES THAT MAY BE INCURRED BY YOU, INCLUDING ANY LOSS OF DATA, WHETHER OR NOT GOOGLE OR ITS REPRESENTATIVES HAVE BEEN ADVISED OF OR SHOULD HAVE BEEN AWARE OF THE POSSIBILITY OF ANY SUCH LOSSES ARISING.


<h3>12. Indemnification</h3>
12.1 To the maximum extent permitted by law, you agree to defend, indemnify and hold harmless Google, its affiliates and their respective directors, officers, employees and agents from and against any and all claims, actions, suits or proceedings, as well as any and all losses, liabilities, damages, costs and expenses (including reasonable attorneys fees) arising out of or accruing from (a) your use of the SDK, (b) any application you develop on the SDK that infringes any copyright, trademark, trade secret, trade dress, patent or other intellectual property right of any person or defames any person or violates their rights of publicity or privacy, and (c) any non-compliance by you with this License Agreement.


<h3>13. Changes to the License Agreement</h3>
13.1 Google may make changes to the License Agreement as it distributes new versions of the SDK. When these changes are made, Google will make a new version of the License Agreement available on the website where the SDK is made available.


<h3>14. General Legal Terms</h3>
14.1 This License Agreement constitutes the whole legal agreement between you and Google and governs your use of the SDK (excluding any services which Google may provide to you under a separate written agreement), and completely replaces any prior agreements between you and Google in relation to the SDK.

14.2 You agree that if Google does not exercise or enforce any legal right or remedy which is contained in this License Agreement (or which Google has the benefit of under any applicable law), this will not be taken to be a formal waiver of Google's rights and that those rights or remedies will still be available to Google.

14.3 If any court of law, having the jurisdiction to decide on this matter, rules that any provision of this License Agreement is invalid, then that provision will be removed from this License Agreement without affecting the rest of this License Agreement. The remaining provisions of this License Agreement will continue to be valid and enforceable.

14.4 You acknowledge and agree that each member of the group of companies of which Google is the parent shall be third party beneficiaries to this License Agreement and that such other companies shall be entitled to directly enforce, and rely upon, any provision of this License Agreement that confers a benefit on (or rights in favor of) them. Other than this, no other person or company shall be third party beneficiaries to this License Agreement.

14.5 EXPORT RESTRICTIONS. THE SDK IS SUBJECT TO UNITED STATES EXPORT LAWS AND REGULATIONS. YOU MUST COMPLY WITH ALL DOMESTIC AND INTERNATIONAL EXPORT LAWS AND REGULATIONS THAT APPLY TO THE SDK. THESE LAWS INCLUDE RESTRICTIONS ON DESTINATIONS, END USERS AND END USE.

14.6 The rights granted in this License Agreement may not be assigned or transferred by either you or Google without the prior written approval of the other party. Neither you nor Google shall be permitted to delegate their responsibilities or obligations under this License Agreement without the prior written approval of the other party.

14.7 This License Agreement, and your relationship with Google under this License Agreement, shall be governed by the laws of the State of California without regard to its conflict of laws provisions. You and Google agree to submit to the exclusive jurisdiction of the courts located within the county of Santa Clara, California to resolve any legal matter arising from this License Agreement. Notwithstanding this, you agree that Google shall still be allowed to apply for injunctive remedies (or an equivalent type of urgent legal relief) in any jurisdiction.


<em>November 13, 2012</em>
</div>



<div id="sdk-terms-form">
<p>
<input id="agree" type="checkbox" name="agree" value="1" onclick="onAgreeChecked()" />
<label id="agreeLabel" for="agree">I have read and agree with the above terms and conditions</label>
</p>
<p id="bitpicker" style="display:none">
  <input id="32" onclick="onAgreeChecked()" type="radio" name="bit" value="32">
    <label for="32">32-bit</label>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  <input id="64" onclick="onAgreeChecked()" type="radio" name="bit" value="64">
    <label for="64">64-bit</label>
</p>
<p><a href="" class="button disabled" id="downloadForRealz" onclick="return onDownloadForRealz(this);"></a></p>
</div>



</div><!-- end TOS -->


















<div id="main">

<div class="figure" style="width:400px;margin-top:-50px">
<img src="{@docRoot}images/tools/android-studio.png" height="330" width="400" style="margin-bottom:20px" />

<a class="big button subtitle" id="download-ide-button"
href="" style="display:none;width:265px;margin:0 auto;display:block;font-size:18px" ></a>
<div style="width:290px;padding:10px 40px 0 60px;font-size:12px;line-height:16px">

<p style="margin-bottom:8px">This download includes:</p>
<ul>
<li>Android Studio <b>early access preview</b></li>
<li>All the Android SDK Tools to design, test, debug, and profile your app</li>
<li>The latest Android platform to compile your app</li>
<li>The latest Android system image to run your app in the emulator</li>
</ul>

</div>
</div>



<p>Android Studio is a new Android development environment based on IntelliJ
IDEA. Similar to Eclipse with the
ADT Plugin, Android Studio provides integrated Android developer tools
for development and debugging. On top of the
capabilities you expect from IntelliJ, Android Studio offers:</p>

<ul>
  <li>Gradle-based build support.</li>
  <li>Android-specific refactoring and quick fixes.</li>
  <li>Lint tools to catch performance, usability, version compatibility and other problems.</li>
  <li>ProGuard and app-signing capabilities. </li>
  <li>Template-based wizards to create common Android designs and components.</li>
  <li>A rich layout editor that allows you to drag-and-drop UI components, preview layouts on
  multiple screen configurations, and much more.</li>
</ul>

<p class="caution"><strong>Caution:</strong> Android Studio is currently available as
an <strong>early access preview</strong>. Several features
are either incomplete or not yet implemented and you may encounter bugs. If you are not
comfortable using an unfinished product, you may want to instead
download (or continue to use) the
<a href="{@docRoot}sdk/index.html">ADT Bundle</a> (Eclipse with the ADT Plugin).</p>


<h4 style="clear:right;text-align:right;margin-right:50px"><a href='' class="expandable"
  onclick="toggleExpandable(this,'.pax');return false;"
  >DOWNLOAD FOR OTHER PLATFORMS</a></h4>

<div class="pax col-13 online" style="display:none;margin:0;">

  <table class="download">
    <tr>
      <th>Platform</th>
      <th>Package</th>
      <th>Size</th>
      <th>MD5 Checksum</th>
  </tr>

  <tr>
    <td>Windows</td>
    <td>
  <a onclick="return onDownload(this)" id="win-studio"
      href="http://dl.google.com/android/studio/android-studio-bundle-130.687321-windows.exe">
      android-studio-bundle-130.677228-windows.exe
      </a>
    </td>
    <td>393023485 bytes</td>
    <td>3da987a9778b66edb68fb43d8b53bfcb</td>
  </tr>

  <tr>
    <td><nobr>Mac OS X</nobr></td>
    <td>
  <a onclick="return onDownload(this)" id="mac-studio"
    href="http://dl.google.com/android/studio/android-studio-bundle-130.687321-mac.dmg">
    android-studio-bundle-130.687321-mac.dmg
    </a>
    </td>
    <td>379877697 bytes</td>
    <td>eb5ca6c77f4a119595d941daeda58810</td>
  </tr>

  <tr>
    <td>Linux</td>
    <td>
  <a onclick="return onDownload(this)" id="linux-studio"
    href="http://dl.google.com/android/studio/android-studio-bundle-130.687321-linux.tgz">
    android-studio-bundle-130.687321-linux.tgz
    </a>
    </td>
    <td>406516375 bytes</td>
    <td>6796d66de07c85b2822ca8d501a043c0</td>
  </tr>
  </table>

</div><!-- end pax -->



<h2 id="Installing">Installing Android Studio</h2>
<ol>
<li>Download the <strong>Android Studio</strong> package from above.</li>
<li>Install Android Studio and the SDK tools:
  <p><b>Windows:</b></p>
  <ol>
    <li>Launch the downloaded EXE file, {@code android-studio-bundle-&lt;version&gt;.exe}.</li>
    <li>Follow the setup wizard to install Android Studio.

    <div class="caution"><p><strong>Known issue:</strong>
      On some Windows systems, the launcher script does not find where Java is installed.
      If you encounter this problem,
      you need to set an environment variable indicating the correct location.</p>
      <p>Select <strong>Start menu > Computer > System Properties >
      Advanced System Properties</strong>. Then open <strong>Advanced tab > Environment
      Variables</strong> and add a new system variable <code>JAVA_HOME</code> that points to
      your JDK folder, for example <code>C:\Program Files\Java\jdk1.7.0_21</code>.</p>
    </div>
    </li>

  </ol>
  <p><b>Mac OS X:</b></p>
  <ol>
    <li>Open the downloaded DMG file, {@code android-studio-bundle-&lt;version&gt;.dmg}.</li>
    <li>Drag and drop Android Studio into the Applications folder.

    <div class="caution"><p><strong>Known issue:</strong>
      Depending on your security settings, when you attempt to open Android Studio, you might
      see a warning that says the package is damaged and should be moved to the trash. If this
      happens, go to <strong>System Preferences > Security &amp; Privacy</strong> and under
      <strong>Allow applications downloaded from</strong>, select <strong>Anywhere</strong>.
      Then open Android Studio again.</p>
    </div>
    </li>

  </ol>
  <p><b>Linux:</b></p>
  <ol>
    <li>Unpack the downloaded Tar file, {@code android-studio-bundle-&lt;version&gt;.tgz}, into an appropriate
    location for your applications.
    <li>To launch Android Studio, navigate to the {@code android-studio/bin/} directory
    in a terminal and execute {@code studio.sh}.
      <p>You may want to add {@code android-studio/bin/} to your PATH environmental
      variable so that you can start Android Studio from any directory.</p>
    </li>
  </ol>
</li>
</ol>

<p>That's it! You're ready to start developing apps with Android Studio.</p>

<div class="note">
<p><strong>Note:</strong> On Windows and Mac, the individual tools and
other SDK packages are saved within the Android Studio application directory.
To access the tools directly, use a terminal to navigate into the application and locate
the {@code sdk/} directory. For example:</p>
<p>Windows: <code>\Users\&lt;user&gt;\AppData\Local\Android\android-studio\sdk\</code></p>
<p>Mac: <code>/Applications/Android\ Studio.app/sdk/</code></p>
</div>

<p>For a list of some known issues, see <a
href="http://tools.android.com/knownissues">tools.android.com/knownissues</a>.</p>


<h2 id="Start">Starting a Project</h2>

<p>When you launch Android Studio for the first time, you'll see a Welcome
screen that offers several ways to get started:</p>

<ul>
  <li>To start building a new app, click <strong>New Project</strong>.
    <p>This starts the New Project wizard, which helps you set up a project using an app template.
  </li>
  <li>To import an existing Android app project, click <strong>Import Project</strong>.
    <p class="note"><strong>Note:</strong> If you previously developed your Android project
    with Eclipse, you should first use the new export feature in the ADT plugin to prepare
    your project with the new Gradle build system. For more information, read
    <a href="{@docRoot}sdk/installing/migrate.html">Migrating from Eclipse</a>.</p>
  </li>
</ul>

<p>For additional help using Android Studio, read <a
href="{@docRoot}sdk/installing/studio-tips.html">Tips and Tricks</a>.</p>


<p>As you continue developing apps, you may need to install additional versions
of Android for the emulator and other packages such as the <a
href="{@docRoot}tools/extras/support-library.html">Android Support Library</a>.
To install more packages, use
the <a href="{@docRoot}tools/help/sdk-manager.html">SDK Manager</a>, which you can
open from Android Studio by clicking <strong>SDK Manager</strong>
<img src="{@docRoot}images/tools/sdk-manager-studio.png"
style="vertical-align:bottom;margin:0;height:19px" /> in the toolbar.</p>









<h2 id="Revisions">Revisions</h2>

<div class="toggle-content opened">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-content-img"
      alt=""/>Android Studio v0.1.1</a> <em>(May 2013)</em>
  </p>

  <div class="toggle-content-toggleme">
  <ul>
    <li>Various bug fixes, including a fix for a common Windows installation issue.
  </ul>
  </div>
</div>










</div><!-- end main content -->




</div><!-- end relative position wrapper -->







  
<script>
  var os;
  var bundlename;
  var $toolslink;

  if (navigator.appVersion.indexOf("Win")!=-1) {
    os = "Windows";
    bundlename = 'win-studio';
  } else if (navigator.appVersion.indexOf("Mac")!=-1) {
    os = "Mac";
    bundlename = 'mac-studio';
  } else if (navigator.appVersion.indexOf("Linux")!=-1) {
    os = "Linux";
    bundlename = 'linux-studio';
  }

  if (os) {
    /* set up primary ACE download button */
    $('#download-ide-button').show();
    $('#download-ide-button').append("Download Android Studio <span class='small'>v0.1.1</span>"
        + "<br/><span class='small'>for " + os + "</span>");
    $('#download-ide-button').click(function() {return onDownload(this,true);}).attr('href', bundlename);

  } else {
    $('.pax').show();
  }
  
  
  function onDownload(link, button) {
    var $studioLink;

    /* set text for download button */
    if (button) {
      $studioLink = $("a#"+$(link).attr('href'));
      $("#downloadForRealz").html($(link).text());
    } else {
      $studioLink = $(link);
      $("#downloadForRealz").html("Download " + $(link).text());
    }
    
    $("#downloadForRealz").attr('href', $studioLink.attr('href'));

    $("#tos").fadeIn('fast');
    $("#main").fadeOut('fast');

    location.hash = "download";
    return false;
  }


  function onAgreeChecked() {
    /* verify that the TOS is agreed */
    if ($("input#agree").is(":checked")) {
      /* reveal the download button */
      $("a#downloadForRealz").removeClass('disabled');
    } else {
      $("a#downloadForRealz").addClass('disabled');
    }
  }

  function onDownloadForRealz(link) {
    if ($("input#agree").is(':checked')) {
      $("div.sdk-terms").slideUp();
      $("#sdk-terms-form,.sdk-terms-intro").fadeOut('slow');
      $("#main").fadeIn('slow');
      return true;
    } else {
      $("label#agreeLabel,#bitpicker input").parent().stop().animate({color: "#258AAF"}, 200,
        function() {$("label#agreeLabel,#bitpicker input").parent().stop().animate({color: "#222"}, 200)}
      );
      return false;
    }
  }

  $(window).hashchange( function(){
    if (location.hash == "") {
      location.reload();
    }
  });

</script>
