ndk=true

ndk.win_download=android-ndk-r8d-windows.zip
ndk.win_bytes=327014028
ndk.win_checksum=d78ec3d4ec15ad3b18b9f488a5763c23

ndk.mac_download=android-ndk-r8d-darwin-x86.tar.bz2
ndk.mac_bytes=308328942
ndk.mac_checksum=5cd9ef9fb7e03943ee8c9e147e42e571

ndk.linux_download=android-ndk-r8d-linux-x86.tar.bz2
ndk.linux_bytes=254644383
ndk.linux_checksum=e1fa0379a3feb59f2f0865f1a90bd382

page.title=Android NDK
@jd:body




<div id="tos" style="display:none;width:760px;height:0;margin:0 auto">

<div class="ndk" style="
z-index: 99;
width: 720px;
position: absolute;
margin: -70px 0;
padding: 14px;
background: white;
border: 1px solid #999;
box-shadow: -10px 10px 50px #888;
-moz-box-shadow: -10px 10px 50px #888;
-webkit-box-shadow: -10px 10px 50px #888;">
<p>Before installing the Android NDK, you must agree to the following terms and conditions.</p>
<div class="sdk-terms" style="width:auto" 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><a href="" class="button disabled ndk" id="downloadForRealz" onclick="return onDownloadNdkForRealz(this);"></a></p>
</div>



</div>
</div>










 <div id="qv-wrapper">
    <div id="qv">
      <h2>In this document</h2>

      <ol>
        <li><a href="#Downloads">Downloads</a></li>
        <li><a href="#Revisions">Revisions</a></li>
        <li><a href="#Reqs">System and Software Requirements</a></li>
        <li><a href="#Installing">Installing the NDK</a></li>
        <li><a href="#GetStarted">Getting Started with the NDK</a>
          <ol>
            <li><a href="#Using">Using the NDK</a></li>
          </ol>
        </li>
        <li><a href="#Contents">Contents of the NDK</a>
          <ol>
            <li><a href="#Tools">Development tools</a></li>
            <li><a href="#Docs">Documentation</a></li>
            <li><a href="#Samples">Sample apps</a></li>
          </ol>
        </li>
      </ol>
    </div>
  </div>

  <p>The NDK is a toolset that allows you to implement parts
  of your app using native-code languages such as C and C++. For certain types of apps,
  this can be helpful so you can reuse existing code libraries written in these
  languages, but most apps do not need the Android NDK.</p>

  <p>Before downloading the NDK, you should understand that <strong>the NDK
   will not benefit most apps</strong>. As a developer, you need to balance its benefits
  against its drawbacks. Notably, using native code on Android
  generally does not result in a noticable performance improvement,
  but it always increases your app complexity. In general, you should only use the NDK
  if it is essential to your app&mdash;never because you simply prefer to program in C/C++.</p>

  <p>Typical good candidates for the NDK are self-contained, CPU-intensive operations that don't
  allocate much memory, such as signal processing, physics simulation, and so on. When examining
  whether or not you should develop in native code, think about your requirements and see if the
  Android framework APIs provide the functionality that you need.</p>


<h2 id="Downloads">Downloads</h2>


<script>
$('#Downloads').after($('#download-table'));
</script>


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

<p>The sections below provide information and notes about successive releases of
the NDK, as denoted by revision number. </p>


<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 NDK, Revision 8d</a> <em>(December 2012)</em>
  </p>

  <div class="toggle-content-toggleme">
    <dl>
      <dt>Important changes:</dt>
      <dd>
        <ul>
          <li>Added the GNU Compiler Collection (GCC) 4.7 compiler to the NDK. The GCC 4.6 compiler
            is still the default, so you must to explicitly enable the new version as follows:
            <ul>
              <li>For {@code ndk-build}, export the {@code NDK_TOOLCHAIN_VERSION=4.7} variable
                <em>or</em> add it to {@code Application.mk}.</li>
              <li>For standalone builds, add the {@code --toolchain=} option to
                {@code make-standalone-toolchain.sh}, for example:
                <pre>--toolchain=arm-linux-androideabi-4.7</pre></li>
            </ul>
            <p class="note">
              <strong>Note:</strong> This feature is experimental. Please try it and
              <a href="http://code.google.com/p/android/issues/list">report any issues</a>.</p>
          </li>
          <li>Added {@code stlport} exception support via gabi++.  Note that the new gabi++
            depends on {@code dlopen} and related code, meaning that:
            <ul>
              <li>You can no longer build a <em>static</em> executable using the {@code -static}
                option or include {@code libstlport_static.a} using
                {@code APP_STL := stlport_static}. (You can still use the {@code -static} option
                with a standalone toolchain.) Compiling a <em>dynamic</em> executable using
                {@code include $(BUILD_EXECUTABLE)} continues to work because the compiler
                automatically adds the {@code -ldl} option.</li>
              <li>If your project links using {@code -nostdlib} and {-Wl,--no-undefined}, you
                must manually include the {@code -ldl} option.</li>
            </ul>
              For more information, see {@code CPLUSPLUS-SUPPORT.html}.

              <p class="note">
                <strong>Note:</strong> This feature is experimental and works better with the GCC
                4.6/4.7 compilers than with GCC 4.4.3 or Clang 3.1. Please try it and
                <a href="http://code.google.com/p/android/issues/list">report any issues</a>.</p>
          </li>
          <li>Added a {@code -mstack-protector-guard=} option for x86 to choose between a
            <em>global</em> default path which is compatible with older Android C library (bionic)
            and a new <em>tls</em> path (%gs:20) for {@code -fstack-protector},
            {@code -fstack-protector-all} and {@code -fstack-protector-strong} using the GCC 4.6
            and higher compilers.

            <p class="note">
              <strong>Note:</strong> The {@code -mstack-protector-guard} setting itself does not
              enable any {@code -fstack-protector*} options.</p>
          </li>
          <li>Added {@code android_setCpu()} function to
            {@code sources/android/cpufeatures/cpu-features.c} for use when auto-detection via
            {@code /proc} is not possible in Android 4.1 and higher.
            (<a href="http://code.google.com/p/chromium/issues/detail?id=164154">Chromium Issue
            164154</a>)</li>
        </ul>
      </dd>

      <dt>Important bug fixes:</dt>
      <dd>
        <ul>
          <li>Fixed unnecessary rebuild of object files when using the {@code ndk-build} script.
            (<a href="http://code.google.com/p/android/issues/detail?id=39810">Issue 39810</a>)</li>
          <li>Fixed a linker failure with the NDK 8c release for Mac OS X 10.6.x that produced the
            following error:
            <pre>
dyld: lazy symbol binding failed: Symbol not found: _memmem
Referenced from: ...../arm-linux-androideabi/bin/ld
Expected in: /usr/lib/libSystem.B.dylib</pre>
            This problem was caused by building on Mac OS X 10.7, which produced binaries that were
            not compatible with Mac OS 10.6.x and the NDK.
          </li>
          <li>Removed the {@code -x c++} options from the Clang++ standalone build script.
          (<a href="http://code.google.com/p/android/issues/detail?id=39089">Issue 39089</a>)</li>
          <li>Fixed issues using the {@code NDK_TOOLCHAIN_VERSION=clang3.1} option in Cygwin.
           (<a href="http://code.google.com/p/android/issues/detail?id=39585">Issue 39585</a>)</li>
          <li>Fixed the {@code make-standalone-toolchain.sh} script to allow generation of a
            standalone toolchain using the Cygwin or MinGW environments. The resulting toolchain
            can be used in Cygwin, MingGW or CMD.exe environments.
            (<a href="http://code.google.com/p/android/issues/detail?id=39915">Issue 39915</a>,
            <a href="http://code.google.com/p/android/issues/detail?id=39585">Issue 39585</a>)</li>
          <li>Added missing {@code SL_IID_ANDROIDBUFFERQUEUESOURCE} option in android-14 builds for
            ARM and X86.
            (<a href="http://code.google.com/p/android/issues/detail?id=40625">Issue 40625</a>)</li>
          <li>Fixed x86 CPU detection for the {@code ANDROID_CPU_X86_FEATURE_MOVBE} feature.
            (<a href="http://code.google.com/p/android/issues/detail?id=39317">Issue 39317</a>)</li>
          <li>Fixed an issue preventing the Standard Template Library (STL) from using C++
            sources that do not have a {@code .cpp} file extension.</li>
          <li>Fixed GCC 4.6 ARM internal compiler error <em>at reload1.c:1061</em>.
            (<a href="http://code.google.com/p/android/issues/detail?id=20862">Issue 20862</a>)</li>
          <li>Fixed GCC 4.4.3 ARM internal compiler error <em>at emit-rtl.c:1954</em>.
            (<a href="http://code.google.com/p/android/issues/detail?id=22336">Issue 22336</a>)</li>
          <li>Fixed GCC 4.4.3 ARM internal compiler error <em>at postreload.c:396</em>.
            (<a href="http://code.google.com/p/android/issues/detail?id=22345">Issue 22345</a>)</li>
          <li>Fixed problem with GCC 4.6/4.7 skipping lambda functions.
            (<a href="http://code.google.com/p/android/issues/detail?id=35933">Issue 35933</a>)</li>
        </ul>
      </dd>

      <dt>Other bug fixes:</dt>
      <dd>
        <ul>
          <li>NDK header file fixes:
            <ul>
              <li>Fixed {@code __WINT_TYPE__} and {@code wint_t} to be the same type.</li>
              <li>Corrected typo in {@code android/bitmap.h}.
                (<a href="http://code.google.com/p/android/issues/detail?id=15134">Issue 15134</a>)
              </li>
              <li>Corrected typo in {@code errno.h}.</li>
              <li>Added check for the presence of {@code __STDC_VERSION__} in {@code sys/cdefs.h}.
                (<a href="http://code.google.com/p/android/issues/detail?id=14627">Issue 14627</a>)
              </li>
              <li>Reorganized headers in {@code byteswap.h} and {@code dirent.h}.</li>
              <li>Fixed {@code limits.h} to include {@code page.h} which provides {@code PAGE_SIZE}
                settings.
                (<a href="http://code.google.com/p/android/issues/detail?id=39983">Issue 39983</a>)
              </li>
              <li>Fixed return type of {@code glGetAttribLocation()} and
                {@code glGetUniformLocation()} from {@code int} to {@code GLint}.</li>
              <li>Fixed {@code __BYTE_ORDER} constant for x86 builds.
                (<a href="http://code.google.com/p/android/issues/detail?id=39824">Issue 39824</a>)
              </li>
            </ul>
          </li>
          <li>Fixed {@code ndk-build} script to not overwrite {@code -Os} with {@code -O2} for ARM
            builds.</li>
          <li>Fixed build scripts to allow overwriting of {@code HOST_AWK}, {@code HOST_SED}, and
            {@code HOST_MAKE} settings.</li>
          <li>Fixed issue for {@code ld.gold} on {@code fsck_msdos} builds linking objects built by
            the Intel C/C++ compiler (ICC).</li>
          <li>Fixed ARM EHABI support in Clang to conform to specifications.</li>
          <li>Fixed GNU Debugger (GDB) to shorten the time spent on walking the target's link map
            during {@code solib} events.
            (<a href="http://code.google.com/p/android/issues/detail?id=38402">Issue 38402</a>)</li>
          <li>Fixed missing {@code libgcc.a} file when linking shared libraries.</li>
        </ul>
      </dd>

      <dt>Other changes:</dt>
      <dd>
        <ul>
          <li>Backported 64-bit built-in atomic functions for ARM to GCC 4.6.</li>
          <li>Added documentation for audio output latency, along with other documentation and
            fixes.</li>
          <li>Fixed debug builds with Clang so that non-void functions now raise a {@code SIGILL}
            signal for paths without a return statement.</li>
          <li>Updated {@code make-standalone-toolchain.sh} to accept the suffix {@code -clang3.1}
            which is equivalent to adding {@code --llvm-version=3.1} to the GCC 4.6 toolchain.</li>
          <li>Updated GCC and Clang bug report URL to:
            <a href="http://source.android.com/source/report-bugs.html">http://source.android.com/source/report-bugs.html</a></li>
          <li>Added ARM ELF support to {@code llvm-objdump}.</li>
          <li>Suppressed <em>treating c input as c++</em> warning for Clang builds.</li>
          <li>Updated build so that only the 32-bit version of {@code libiberty.a} is built and
            placed in {@code lib32/}.</li>
        </ul>
      </dd>
    </dl>
  </div>
</div>


<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt="">Android NDK, Revision 8c</a> <em>(November 2012)</em>
  </p>

  <div class="toggle-content-toggleme">
    <dl>
      <dt>Important changes:</dt>

      <dd>
        <ul>
          <li>Added the Clang 3.1 compiler to the NDK. The GNU Compiler Collection (GCC) 4.6 is
          still the default, so you must explicitly enable the Clang compiler option as follows:
            <ul>
              <li>For {@code ndk-build}, export {@code NDK_TOOLCHAIN_VERSION=clang3.1} <em>or</em>
                add this environment variable setting to {@code Application.mk}.</li>
              <li>For standalone builds, add {@code --llvm-version=3.1} to
                {@code make-standalone-toolchain.sh} and replace {@code CC} and {@code CXX} in your
                makefile with {@code &lt;tool-path&gt;/bin/clang} and
                {@code &lt;tool-path&gt;/bin/clang++}. See {@code STANDALONE-TOOLCHAIN.html} for
                details.</li>
            </ul>
            <p class="note"><strong>Note:</strong> This feature is experimental. Please try it and
            <a href="http://code.google.com/p/android/issues/list">report any issues</a>.</p></li>
          <li>Added Gold linker {@code ld.gold} for the Windows toolchain. Gold linker is also the
            default for ARM and X86 on all hosts. You may override it to use the {@code ld.bfd}
            linker by adding {@code LOCAL_LDFLAGS += -fuse-ld=bfd} to {@code Android.mk}, or by passing
            {@code -fuse-ld=bfd} to the g++/clang++ command line that does the linking.</li>
          <li>Added checks for spaces in the NDK path to the {@code ndk-build[.cmd]} and
            {@code ndk-gdb} scripts, to prevent build errors that are difficult to diagnose.</li>
          <li>Made the following changes to API level handling:
            <ul>
              <li>Modified build logic so that projects that specify {@code android-10} through
                {@code android-13} in {@code APP_PLATFORM}, {@code project.properties} or
                {@code default.properties} link against {@code android-9} instead of
                {@code android-14}.
              <li>Updated build so that executables using android-16 (Jelly Bean) or higher are
                compiled with the {@code -fPIE} option for position-independent executables (PIE).
                A new {@code APP_PIE} option allows you to control this behavior. See {@code
                APPLICATION-MK.html} for details.
                <p class="note">
                  <strong>Note:</strong> All API levels above 14 still link against {@code
                  platforms/android-14} and no new {@code platforms/android-N} have been added.
                </p></li>
              <li>Modified {@code ndk-build} to provide warnings if the adjusted API level is larger
              than {@code android:minSdkVersion} in the project's {@code AndroidManifest.xml}.</li>
            </ul>
          </li>
          <li>Updated the {@code cpu-features} helper library to include more ARM-specific features.
          See {@code sources/android/cpufeatures/cpu-features.h} for details.</li>
          <li>Modified the long double on the X86 platform to be 8 bytes. This data type is now the
          same size as a double, but is still treated as a distinct type.</li>
          <li>Updated build for {@code APP_ABI=armeabi-v7a}:
            <ul>
              <li>Modified this build type to pass the {@code -march=armv7-a} parameter
              to the linker. This change ensures that v7-specific libraries and {@code crt*.o} are
              linked correctly.</li>
              <li>Added {@code -mfpu=vfpv3-d16} to {@code ndk-build} instead of the
              {@code -mfpu=vfp} option used in previous releases.</li>
            </ul>
          </li>
        </ul>
      </dd>
    </dl>

    <dl>
      <dt>Important bug fixes:</dt>

      <dd>
        <ul>
          <li>Fixed an issue where running {@code make-standalone-toolchain.sh} with root privileges
            resulted in the stand alone tool chain being inaccessible to some users.
            (<a href="http://code.google.com/p/android/issues/detail?id=35279">Issue 35279</a>)
            <ul>
              <li>All files and executables in the NDK release package are set to have read and
                execute permissions for all.</li>
              <li>The ownership/group of {@code libstdc++.a} is now preserved when copied.</li>
            </ul>
          </li>
          <li>Removed redundant {@code \r} from Windows prebuilt {@code echo.exe}. The redundant
          {@code \r} caused {@code gdb.setup} to fail in the GNU Debugger (GDB) because it
          incorrectly became part of the path.
          (<a href="http://code.google.com/p/android/issues/detail?id=36054">Issue 36054</a>)</li>
          <li>Fixed Windows parallel builds that sometimes failed due to timing issues in the
          {@code host-mkdir} implementation.
          (<a href="http://code.google.com/p/android/issues/detail?id=25875">Issue 25875</a>)</li>
          <li>Fixed GCC 4.4.3 GNU {@code libstdc++} to <em>not</em> merge {@code typeinfo} names by
          default. For more details, see
          {@code toolchain repo gcc/gcc-4.4.3/libstdc++-v3/libsupc++/typeinfo}.
          (<a href="http://code.google.com/p/android/issues/detail?id=22165">Issue 22165</a>)</li>
          <li>Fixed problem on {@code null} context in GCC 4.6
          {@code cp/mangle.c::write_unscoped_name}, where GCC may crash when the context is
          {@code null} and dereferenced in {@code TREE_CODE}.</li>
          <li>Fixed GCC 4.4.3 crashes on ARM NEON-specific type definitions for floats.
          (<a href="http://code.google.com/p/android/issues/detail?id=34613">Issue 34613</a>)</li>
          <li>Fixed the {@code STLport} internal {@code _IteWrapper::operator*()} implementation
          where a stale stack location holding the dereferenced value was returned and caused
          runtime crashes.
          (<a href="http://code.google.com/p/android/issues/detail?id=38630">Issue 38630</a>)</li>

          <li>ARM-specific fixes:
            <ul>
              <li>Fixed ARM GCC 4.4.3/4.6 {@code g++} to not warn that the <em>mangling of
              &lt;va_list&gt; was changed in GCC 4.4</em>. The workaround using the
              {@code -Wno-psabi} switch to avoid this warning is no longer required.</li>
              <li>Fixed an issue when a project with {@code .arm} or {@code .neon} suffixes in
              {@code LOCAL_SRC_FILES} also used {@code APP_STL}. With {@code APP_STL}, the
              {@code ndk-build} script searches for C++ files in {@code LOCAL_SRC_FILES} before
              adding STL {@code header/lib} paths to compilation. Modified {@code ndk-build} to
              filter out {@code .arm} and {@code .neon} suffixes before the search, otherwise items
              in {@code LOCAL_SRC_FILES} like {@code myfile.cpp.arm.neon} won't be compiled as C++
              code.</li>
              <li>Fixed {@code binutils-2.21/ld.bfd} to be capable of linking object from older
              binutils without {@code tag_FP_arch}, which was producing <em>assertion fail</em>
              error messages in GNU Binutils.
              (<a href="http://code.google.com/p/android/issues/detail?id=35209">Issue 35209</a>)
              </li>
              <li>Removed <em>Unknown EABI object attribute 44</em> warning when
              {@code binutils-2.19/ld} links prebuilt object by newer {@code binutils-2.21}</li>
              <li>Fixed an issue in GNU {@code stdc++} compilation with both {@code -mthumb} and
              {@code -march=armv7-a}, by modifying {@code make-standalone-toolchain.sh} to populate
              {@code headers/libs} in sub-directory {@code armv7-a/thumb}.
              (<a href="http://code.google.com/p/android/issues/detail?id=35616">Issue 35616</a>)
              </li>
              <li>Fixed <em>unresolvable R_ARM_THM_CALL relocation</em> error.
              (<a href="http://code.google.com/p/android/issues/detail?id=35342">Issue 35342</a>)
              </li>
              <li>Fixed internal compiler error at {@code reload1.c:3633}, caused by the ARM
              back-end expecting the wrong operand type when sign-extend from {@code char}.
              (<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50099">GCC Issue 50099</a>)</li>
              <li>Fixed internal compiler error with negative shift amount.
              (<a href="http://gcc.gnu.org/ml/gcc-patches/2011-10/msg00594.html">GCC Issue</a>)</li>
            </ul>
          </li>

          <li>Fixed {@code -fstack-protector} for X86, which is also the default for the
          {@code ndk-build} x86 ABI target.</li>

          <li>MIPS-specific fixes:
            <ul>
              <li>Fixed {@code STLport} endian-ness by setting {@code _STLP_LITTLE_ENDIAN} to 1 when
              compiling MIPS {@code libstlport_*}.</li>
              <li>Fixed GCC {@code __builtin_unreachable} issue when compiling LLVM.
              (<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54369">GCC Issue 54369</a>)</li>
              <li>Backported fix for {@code cc1} compile process consuming 100% CPU.
              (<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50380">GCC Issue 50380</a>)</li>
            </ul>
          </li>

          <li>GNU Debugger-specific fixes:
            <ul>
              <li>Disabled Python support in gdb-7.x at build, otherwise the gdb-7.x configure
              function may pick up whatever Python version is available on the host and build
              {@code gdb} with a hard-wired dependency on a specific version of Python.
              (<a href="http://code.google.com/p/android/issues/detail?id=36120">Issue 36120</a>)
              </li>
              <li>Fixed {@code ndk-gdb} when {@code APP_ABI} contains {@code all} and matchs none
              of the known architectures.
              (<a href="http://code.google.com/p/android/issues/detail?id=35392">Issue 35392</a>)
              </li>
              <li>Fixed Windows pathname support, by keeping the {@code :} character if it looks
              like it could be part of a Windows path starting with a drive letter.
              (<a href="http://sourceware.org/bugzilla/show_bug.cgi?id=12843">GDB Issue 12843</a>)
              </li>
              <li>Fixed adding of hardware breakpoint support for ARM in {@code gdbserver}.
              (<a href="http://sourceware.org/ml/gdb-patches/2011-09/msg00200.html">GDB Issue</a>)
              </li>
              <li>Added fix to only read the current {@code solibs} when the linker is consistent.
              This change speeds up {@code solib} event handling.
              (<a href="http://code.google.com/p/android/issues/detail?id=37677">Issue 37677</a>)
              </li>
              <li>Added fix to make repeated attempts to find {@code solib} breakpoints. GDB now
              retries {@code enable_break()} during every call to {@code svr4_current_sos()} until
              it succeeds.
              (<a href="https://android-review.googlesource.com/#/c/43563">Change 43563</a>)</li>
              <li>Fixed an issue where {@code gdb} would not stop on breakpoints placed in
              {@code dlopen-ed} libraries.
              (<a href="http://code.google.com/p/android/issues/detail?id=34856">Issue 34856</a>)
              </li>
              <li>Fixed {@code SIGILL} in dynamic linker when calling {@code dlopen()}, on system
              where {@code /system/bin/linker} is stripped of symbols and
              {@code rtld_db_dlactivity()} is implemented as {@code Thumb}, due to not preserving
              {@code LSB} of {@code sym_addr}.
              (<a href="http://code.google.com/p/android/issues/detail?id=37147">Issue 37147</a>)
              </li>
            </ul>
          </li>
        </ul>
      </dd>
    </dl>

    <dl>
      <dt>Other bug fixes:</dt>

      <dd>
        <ul>
          <li>Fixed NDK headers:
            <ul>
              <li>Fixed {@code arch-mips/include/asm/*} code that was incorrectly removed from
              original kernel. (<a href="https://android-review.googlesource.com/#/c/43335">Change
              43335</a>)</li>
              <li>Replaced struct member data {@code __unused} with {@code __linux_unused} in
              {@code linux/sysctl.h} and {@code linux/icmp.h} to avoid conflict with
              {@code #define __unused} in {@code sys/cdefs.h}.</li>
              <li>Fixed {@code fenv.h} for enclosed C functions with {@code __BEGIN_DECLS} and
              {@code __END_DECLS}.</li>
              <li>Removed unimplemented functions in {@code malloc.h}.</li>
              <li>Fixed {@code stdint.h} defintion of {@code uint64_t} for ANSI compilers.
              (<a href="http://code.google.com/p/android/issues/detail?id=1952">Issue 1952</a>)</li>
              <li>Fixed preprocessor macros in {@code &lt;arch&gt;/include/machine/*}.</li>
              <li>Replaced {@code link.h} for MIPS with new version supporting all platforms.</li>
              <li>Removed {@code linux-unistd.h}</li>
              <li>Move GLibc-specific macros {@code LONG_LONG_MIN}, {@code LONG_LONG_MAX} and
              {@code ULONG_LONG_MAX} from {@code &lt;pthread.h&gt;} to {@code &lt;limits.h&gt;}.</li>
            </ul>
          </li>
          <li>Fixed a buffer overflow in {@code ndk-stack-parser}.</li>
          <li>Fixed {@code _STLP_USE_EXCEPTIONS}, when not defined, to omit all declarations
          and uses of {@code __Named_exception}. Compiling and use of {@code __Named_exception}
          settings only occurs when {@code STLport} is allowed to use exceptions.</li>
          <li>Fixed building of Linux-only NDK packages without also building Windows code. Use the
          following settings to perform this type of build:
          <pre>./build/tools/make-release.sh --force --systems=linux-x86</pre></li>
          <li>Fixed {@code libc.so} so it does not export {@code atexit()} and {@code __do_handler}.
          These symbols are exported for ARM builds by the system version of the C library to
          support legacy native libraries. NDK-generated should never reference them directly.
          Instead, each shared library or executable should embed its own version of these symbols,
          provided by {@code crtbegin_*.o}.
          <p>If your project is linked with the {@code -nostdlib -Wl,--no-undefined} options, you
          must provide your own {@code __dso_handle} because {@code crtbegin_so.o} is not linked in
          this case. The content of {@code __dso_handle} does not matter, as shown in the following
          example code:</p>
<pre>
extern "C" {
  extern void *__dso_handle __attribute__((__visibility__ ("hidden")));
  void *__dso_handle;
}
</pre>
          </li>
          <li>Fixed symbol decoder for ARM used in {@code objdump} for {@code plt} entries to
          generate a more readable form {@code function@plt}.</li>
          <li>Removed the following symbols, introduced in GCC 4.6 {@code libgcc.a}, from
          the X86 platform {@code libc.so} library: {@code __aeabi_idiv0}, {@code __aeabi_ldiv0},
          {@code __aeabi_unwind_cpp_pr1}, and {@code __aeabi_unwind_cpp_pr2}.</li>
          <li>Removed unused {@code .ctors}, {@code .dtors}, and {@code .eh_frame} in MIPS
          {@code crt*_so.S}.</li>
          <li>Updated {@code ndk-gdb} so that it only takes the last line of output for
          {@code ndk-build} {@code DUMP_XXXX}. This change ensures that if {@code Application.mk} or
          {@code Android.mk} print something with {@code $(info ...)} syntax, it does not get
          injected into the result of {@code DUMP_XXXX}.
          (<a href="https://groups.google.com/d/msg/android-ndk/-/ew0lTWGr1UEJ">More info</a>)</li>
        </ul>
      </dd>
    </dl>

    <dl>
      <dt>Other changes:</dt>

      <dd>
        <ul>
          <li>Removed {@code arch-x86} and {@code arch-mips} headers from
          {@code platforms/android-[3,4,5,8]}. Those headers were incomplete, since both X86 and
          MIPS ABIs are only supported at API 9 or higher.</li>
          <li>Simplified c++ include path in standalone packages, as shown below.
          (<a href="http://code.google.com/p/android/issues/detail?id=35279">Issue 35279</a>)
<pre>
&lt;path&gt;/arm-linux-androideabi/include/c++/4.6.x-google
  to:
&lt;path&gt;/include/c++/4.6/
</pre></li>
          <li>Fixed {@code ndk-build} to recognize more C++ file extensions by default:
          {@code .cc .cp .cxx .cpp .CPP .c++ .C}. You may still use {@code LOCAL_CPP_EXTENSION} to
          overwrite these extension settings.</li>
          <li>Fixed an issue in {@code samples/san-angeles} that caused a black screen or freeze
          frame on re-launch.</li>
          <li>Replaced deprecated APIs in NDK samples.
          (<a href="http://code.google.com/p/android/issues/detail?id=20017">Issue 20017</a>)
            <ul>
              <li>{@code hello-gl2} from android-5 to android-7</li>
              <li>{@code native-activity} from android-9 to android-10</li>
              <li>{@code native-audio} from android-9 to android-10</li>
              <li>{@code native-plasma} from android-9 to android-10</li>
            </ul>
          </li>
          <li>Added new branding for Android executables with a simpler scheme in section
          {@code .note.android.ident} (defined in {@code crtbegin_static/dynamic.o}) so that
          debugging tools can act accordingly. The structure member and values are defined as
          follows:
<pre>
static const struct {
  int32_t namesz;  /* = 8,  sizeof ("Android") */
  int32_t descsz;  /* = 1 * sizeof(int32_t) */
  int32_t type;    /* = 1, ABI_NOTETYPE */
  char name[sizeof "Android"];  /* = "Android" */
  int32_t android_api; /* = 3, 4, 5, 8, 9, 14 */
}
</pre>
            <p>The previous branding options in section {@code .note.ABI-tag} are deprecated.</p>
          </li>
          <li>Added a new script {@code run-tests-all.sh} which calls {@code run-tests.sh} and
          {@code standalone/run.sh} with various conditions. The script {@code run-tests.sh} runs
          without the {@code --abi} option, and is enhanced to compile most of the tests for all
          supported ABIs and run on all attached devices</li>
        </ul>
      </dd>
    </dl>

  </div>
</div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt="">Android NDK, Revision 8b</a> <em>(July 2012)</em>
  </p>

  <div class="toggle-content-toggleme">
    <p>The main features of this release are a new GNU Compiler Collection (GCC) 4.6 toolchain and
GNU Debugger (GDB) 7.3.x which adds debugging support for the Android 4.1 (API Level 16) system
image.</p>

    <dl>
      <dt>Important bug fixes:</dt>

      <dd>
        <ul>
          <li>Fixed {@code LOCAL_SHORT_COMMANDS} issues on Mac OS, Windows Cygwin environments for
static libraries. List file generation is faster, and it is not regenerated to avoid repeated
project rebuilds.</li>
          <li>Fixed several issues in {@code ndk-gdb}:
            <ul>
              <li>Updated tool to pass flags {@code -e}, {@code -d} and {@code -s} to adb more
consistently.</li>
              <li>Updated tool to accept device serial names containing spaces.</li>
              <li>Updated tool to retrieve {@code /system/bin/link} information, so {@code gdb} on
the host can set a breakpoint in {@code __dl_rtld_db_dlactivity} and be aware of linker activity
(e.g., rescan {@code solib} symbols when {@code dlopen()} is called).</li>
            </ul>
          </li>
          <li>Fixed {@code ndk-build clean} on Windows, which was failing to remove
{@code ./libs/*/lib*.so}.</li>
          <li>Fixed {@code ndk-build.cmd} to return a non-zero {@code ERRORLEVEL} when {@code make}
fails.</li>
          <li>Fixed {@code libc.so} to stop incorrectly exporting the {@code __exidx_start} and
{@code __exidx_end} symbols.</li>
          <li>Fixed {@code SEGV} when unwinding the stack past {@code __libc_init} for ARM and
MIPS.</li>
        </ul>
      </dd>
    </dl>

    <dl>
      <dt>Important changes:</dt>

      <dd>
        <ul>
          <li>Added GCC 4.6 toolchain ({@code binutils} 2.21 with {@code gold} and GDB 7.3.x) to
co-exist with the original GCC 4.4.3 toolchain ({@code binutils} 2.19 and GDB 6.6).</p>
            <ul>
              <li>GCC 4.6 is now the default toolchain. You may set {@code
NDK_TOOLCHAIN_VERSION=4.4.3} in {@code Application.mk} to select the original one.</li>
              <li>Support for the {@code gold} linker is only available for ARM and x86
architectures on Linux and Mac OS hosts. This support is disabled by default. Add {@code
LOCAL_LDLIBS += -fuse-ld=gold} in {@code Android.mk} to enable it.</li>
              <li>Programs compiled with {@code -fPIE} require the new {@code GDB} for debugging,
including binaries in Android 4.1 (API Level 16) system images.</li>
              <li>The {@code binutils} 2.21 {@code ld} tool contains back-ported fixes from
version 2.22:
                <ul>
                  <li>Fixed {@code ld --gc-sections}, which incorrectly retains zombie references to
external libraries. (<a href="http://sourceware.org/bugzilla/show_bug.cgi?id=13177">more
info</a>).</li>
                  <li>Fixed ARM {@code strip} command to preserve the original {@code p_align} and
{@code p_flags} in {@code GNU_RELRO} section if they are valid. Without this fix, programs
built with {@code -fPIE} could not be debugged. (<a
href="http://sourceware.org/cgi-bin/cvsweb.cgi/src/bfd/elf.c.diff?cvsroot=src&r1=1.552&r2=1.553">more info</a>)</li>
                </ul>
              </li>
              <li>Disabled {@code sincos()} optimization for compatibility with older
                platforms.</li>
            </ul>
          </li>

          <li>Updated build options to enable the Never eXecute (NX) bit and {@code relro}/{@code
bind_now} protections by default:
            <ul>
              <li>Added {@code --noexecstack} to assembler and {@code -z noexecstack} to linker
that provides NX protection against buffer overflow attacks by enabling NX bit on stack and
heap.</li>
              <li>Added {@code -z relro} and  {@code -z now} to linker for hardening of internal
data sections after linking to guard against security vulnerabilities caused by memory corruption.
(more info: <a href="http://www.akkadia.org/drepper/nonselsec.pdf">1</a>,
<a href="http://tk-blog.blogspot.com/2009/02/relro-not-so-well-known-memory.html">2</a>)</li>

              <li>These features can be disabled using the following options:
                <ol>
                  <li>Disable NX protection by setting the {@code --execstack} option for the
assembler and {@code -z execstack} for the linker.</li>
                  <li>Disable hardening of internal data by setting the {@code -z norelro} and
{@code -z lazy} options for the linker.</li>
                  <li>Disable these protections in the NDK {@code jni/Android.mk} by setting the
following options:
<pre>
LOCAL_DISABLE_NO_EXECUTE=true  # disable "--noexecstack" and "-z noexecstack"
DISABLE_RELRO=true             # disable "-z relro" and "-z now"</li>
</pre>
                </ol>
                <p>See {@code docs/ANDROID-MK.html} for more details.</p>
              </li>
            </ul>
          </li>

          <li>Added branding for Android executables with the {@code .note.ABI-tag} section (in
{@code crtbegin_static/dynamic.o}) so that debugging tools can act accordingly. The structure
member and values are defined as follows:</p>
<pre>
static const struct {
  int32_t namesz;  /* = 4,  sizeof ("GNU") */
  int32_t descsz;  /* = 6 * sizeof(int32_t) */
  int32_t type;    /* = 1 */
  char  name[sizeof "GNU"];  /* = "GNU" */
  int32_t os;      /* = 0 */
  int32_t major;   /* = 2 */
  int32_t minor;   /* = 6 */
  int32_t teeny;   /* = 15 */
  int32_t os_variant;  /* = 1 */
  int32_t android_api; /* = 3, 4, 5, 8, 9, 14 */
}</pre>
          </li>
        </ul>
      </dd>
    </dl>

    <dl>
      <dt>Other bug fixes:</dt>

      <dd>
        <ul>
          <li>Fixed {@code mips-linux-gnu} relocation truncated to fit {@code R_MIPS_TLS_LDM} issue.
            (<a href="http://sourceware.org/bugzilla/show_bug.cgi?id=12637">more info</a>)</li>
          <li>Fixed {@code ld} tool segfaults when using {@code --gc-sections}.
            (<a href="http://sourceware.org/bugzilla/show_bug.cgi?id=12845">more info</a>)
          </li>
          <li>Fixed MIPS {@code GOT_PAGE} counting issue.
            (<a href="http://sourceware.org/ml/binutils/2011-05/msg00198.html">more info</a>)</li>
          <li>Fixed follow warning symbol link for {@code mips_elf_count_got_symbols}.</li>
          <li>Fixed follow warning symbol link for {@code mips_elf_allocate_lazy_stub}.</li>
          <li>Moved MIPS {@code .dynamic} to the data segment, so that it is writable.</li>
          <li>Replaced hard-coded values for symbols with correct segment sizes for MIPS.</li>
          <li>Removed the {@code -mno-shared} option from the defaults in the MIPS toolchain.
The default for Android toolchain is {@code -fPIC} (or {@code -fpic} if supported). If you do not
explicitly specify {@code -mshared}, {@code -fpic}, {@code -fPIC}, {@code -fpie}, or {@code -fPIE},
the MIPS compiler adds {@code -mno-shared} that turns off PIC. Fixed compiler not to add
{@code -mno-shared} in this case.</li>
          <li>Fixed wrong package names in samples {@code hello-jni} and {@code two-libs} so that
the {@code tests} project underneath it can compile.</li>
        </ul>
      </dd>
    </dl>

    <dl>
      <dt>Other Changes:</dt>

      <dd>
        <ul>
          <li>Changed locations of binaries:
            <ul>
              <li>Moved {@code gdbserver} from
{@code toolchain/&lt;arch-os-ver&gt;/prebuilt/gdbserver} to
{@code prebuilt/android-&lt;arch&gt;/gdbserver/gdbserver}.</li>
              <li>Renamed x86 toolchain prefix from {@code i686-android-linux-} to
{@code i686-linux-android-}.</li>
              <li>Moved {@code sources/cxx-stl/gnu-libstdc++/include} and {@code lib} to
{@code sources/cxx-stl/gnu-libstdc++/4.6} when compiled with GCC 4.6, or
{@code sources/cxx-stl/gnu-libstdc++/4.4.3} when compiled with GCC 4.4.3.</li>
              <li>Moved {@code libbfd.a} and {@code libintl.a} from {@code lib/} to {@code
lib32/}.</li>
            </ul>
          </li>

          <li>Added and improved various scripts in the rebuild and test NDK toolchain:
            <ul>
              <li>Added {@code build-mingw64-toolchain.sh} to generate a new Linux-hosted toolchain
that generates Win32 and Win64 executables.</li>
              <li>Improved speed of {@code download-toolchain-sources.sh} by using the {@code
clone} command and only using {@code checkout} for the directories that are needed to build the NDK
toolchain binaries.</li>
              <li>Added {@code build-host-gcc.sh} and {@code build-host-gdb.sh} scripts.</li>
              <li>Added {@code tests/check-release.sh} to check the content of a given NDK
installation directory, or an existing NDK package.</li>
              <li>Rewrote the {@code tests/standalone/run.sh} standalone tests .</li>
            </ul>
          </li>
          <li>Removed {@code if_dl.h} header from all platforms and architectures. The {@code
AF_LINK} and {@code sockaddr_dl} elements it describes are specific to BSD (i.e., they don't exist
in Linux).</li>
        </ul>
      </dd>
    </dl>

  </div>
</div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt="">Android NDK, Revision 8</a> <em>(May 2012)</em>
  </p>

  <div class="toggle-content-toggleme">
    <p>This release of the NDK includes support for MIPS ABI and a few additional fixes.</p>

    <dl>
      <dt>New features:</dt>

      <dd>
        <ul>
          <li>Added support for the MIPS ABI, which allows you to generate machine code that runs on
            compatible MIPS-based Android devices. Major features for MIPS include MIPS-specific
            toolchains, system headers, libraries and debugging support. For more details regarding
            MIPS support, see {@code docs/CPU-MIPS.html} in the NDK package.

              <p>By default, code is generated for ARM-based devices. You can add {@code mips} to
              your {@code APP_ABI} definition in your {@code Application.mk} file to build
              for MIPS platforms. For example, the following line instructs {@code ndk-build}
              to build your code for three distinct ABIs:</p>

              <pre>APP_ABI := armeabi armeabi-v7a <strong>mips</strong></pre>

              <p>Unless you rely on architecture-specific assembly sources, such as ARM assembly
              code, you should not need to touch your {@code Android.mk} files to build MIPS
              machine code.</p>
          </li>

          <li>You can build a standalone MIPS toolchain using the {@code --arch=mips}
          option when calling <code>make-standalone-toolchain.sh</code>. See
          {@code docs/STANDALONE-TOOLCHAIN.html} for more details.
          </li>
        </ul>

        <p class="note"><strong>Note:</strong> To ensure that your applications are available
to users only if their devices are capable of running them, Google Play filters applications based
on the instruction set information included in your application ? no action is needed on your part
to enable the filtering. Additionally, the Android system itself also checks your application at
install time and allows the installation to continue only if the application provides a library that
is compiled for the device's CPU architecture.</p>
      </dd>

      <dt>Important bug fixes:</dt>

      <dd>
        <ul>
          <li>Fixed a typo in GAbi++ implementation where the result of {@code
          dynamic_cast&lt;D&gt;(b)} of base class object {@code b} to derived class {@code D} is
          incorrectly adjusted in the opposite direction from the base class.
          (<a href="http://code.google.com/p/android/issues/detail?id=28721">Issue 28721</a>)
          </li>
          <li>Fixed an issue in which {@code make-standalone-toolchain.sh} fails to copy
          {@code libsupc++.*}.</li>
        </ul>
      </dd>

      <dt>Other bug fixes:</dt>

      <dd>
        <ul>
          <li>Fixed {@code ndk-build.cmd} to ensure that {@code ndk-build.cmd} works correctly even
          if the user has redefined the {@code SHELL} environment variable, which may be changed
          when installing a variety of development tools in Windows environments.
          </li>
        </ul>
      </dd>
    </dl>
  </div>
</div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt="">Android NDK, Revision 7c</a> <em>(April 2012)</em>
  </p>

  <div class="toggle-content-toggleme">
    <p>This release of the NDK includes an important fix for Tegra2-based devices, and a few
additional fixes and improvements:</p>

    <dl>
      <dt>Important bug fixes:</dt>

      <dd>
        <ul>
          <li>Fixed GNU STL armeabi-v7a binaries to not crash on non-NEON
  devices. The files provided with NDK r7b were not configured properly,
  resulting in crashes on Tegra2-based devices and others when trying to use
  certain floating-point functions (e.g., {@code cosf}, {@code sinf}, {@code expf}).</li>
        </ul>
      </dd>

      <dt>Important changes:</dt>

      <dd>
        <ul>
          <li>Added support for custom output directories through the {@code NDK_OUT}
  environment variable. When defined, this variable is used to store all
  intermediate generated files, instead of {@code $PROJECT_PATH/obj}. The variable is
  also recognized by {@code ndk-gdb}. </li>
          <li>Added support for building modules with hundreds or even thousands of source
  files by defining {@code LOCAL_SHORT_COMMANDS} to {@code true} in your {@code Android.mk}.
            <p>This change forces the NDK build system to put most linker or archiver options
  into list files, as a work-around for command-line length limitations.
  See {@code docs/ANDROID-MK.html} for details.</p>
          </li>
        </ul>
      </dd>

      <dt>Other bug fixes:</dt>

      <dd>
        <ul>
          <li>Fixed {@code android_getCpuCount()} implementation in the {@code cpufeatures}
helper library. On certain devices, where cores are enabled dynamically by the system, the previous
implementation would report the total number of <em>active</em> cores the first time the function
was called, rather than the total number of <em>physically available</em> cores.</li>
        </ul>
      </dd>
    </dl>
  </div>
</div>


<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt="">Android NDK, Revision 7b</a> <em>(February 2012)</em>
  </p>

  <div class="toggle-content-toggleme">
    <p>This release of the NDK includes fixes for native Windows builds, Cygwin and many other
      improvements:</p>

    <dl>
      <dt>Important bug fixes:</dt>

      <dd>
        <ul>
          <li>Updated {@code sys/atomics.h} to avoid correctness issues
            on some multi-core ARM-based devices. Rebuild your unmodified sources with this
            version of the NDK and this problem should be completely eliminated.
            For more details, read {@code docs/ANDROID-ATOMICS.html}.</li>
          <li>Reverted to {@code binutils} 2.19 to fix debugging issues that
            appeared in NDK r7 (which switched to {@code binutils} 2.20.1).</li>
          <li>Fixed {@code ndk-build} on 32-bit Linux. A packaging error put a 64-bit version
            of the {@code awk} executable under {@code prebuilt/linux-x86/bin} in NDK r7.</li>
          <li>Fixed native Windows build ({@code ndk-build.cmd}). Other build modes were not
            affected. The fixes include:
            <ul>
              <li>Removed an infinite loop / stack overflow bug that happened when trying
                to call {@code ndk-build.cmd} from a directory that was <em>not</em> the top of
                your project path (e.g., in any sub-directory of it).</li>
              <li>Fixed a problem where the auto-generated dependency files were ignored. This
                meant that updating a header didn't trigger recompilation of sources that included
                it.</li>
              <li>Fixed a problem where special characters in files or paths, other than spaces and
                quotes, were not correctly handled.</li>
            </ul>
          </li>
          <li>Fixed the standalone toolchain to generate proper binaries when using
            {@code -lstdc++} (i.e., linking against the GNU {@code libstdc++} C++ runtime). You
            should use {@code -lgnustl_shared} if you want to link against the shared library
            version or {@code -lstdc++} for the static version.

            <p>See {@code docs/STANDALONE-TOOLCHAIN.html} for more details about this fix.</p>
          </li>
          <li>Fixed {@code gnustl_shared} on Cygwin. The linker complained that it couldn't find
            {@code libsupc++.a} even though the file was at the right location.</li>
          <li>Fixed Cygwin C++ link when not using any specific C++ runtime through
            {@code APP_STL}.</li>
        </ul>
      </dd>
    </dl>

    <dl>
      <dt>Other changes:</dt>

      <dd>
        <ul>
          <li>When your application uses the GNU {@code libstdc++} runtime, the compiler will
            no longer forcibly enable exceptions and RTTI. This change results in smaller code.
            <p>If you need these features, you must do one of the following:</p>
            <ul>
              <li>Enable exceptions and/or RTTI explicitly in your modules or
                {@code Application.mk}. (recommended)</li>
              <li>Define {@code APP_GNUSTL_FORCE_CPP_FEATURES} to {@code 'exceptions'},
                {@code 'rtti'} or both in your {@code Application.mk}. See
                {@code docs/APPLICATION-MK.html} for more details.</li>
            </ul>
          </li>
          <li>{@code ndk-gdb} now works properly when your application has private services
            running in independent processes. It debugs the main application process, instead of the
            first process listed by {@code ps}, which is usually a service process.</li>
          <li>Fixed a rare bug where NDK r7 would fail to honor the {@code LOCAL_ARM_MODE} value
            and always compile certain source files (but not all) to 32-bit instructions.</li>
          <li>{@code STLport}: Refresh the sources to match the Android platform version. This
            update fixes a few minor bugs:
            <ul>
               <li>Fixed instantiation of an incomplete type</li>
               <li>Fixed minor "==" versus "=" typo</li>
               <li>Used {@code memmove} instead of {@code memcpy} in {@code string::assign}</li>
               <li>Added better handling of {@code IsNANorINF}, {@code IsINF}, {@code IsNegNAN},
                 etc.</li>
             </ul>
             <p>For complete details, see the commit log.</p>
          </li>
          <li>{@code STLport}: Removed 5 unnecessary static initializers from the library.</li>
          <li>The GNU libstdc++ libraries for armeabi-v7a were mistakenly compiled for
            armeabi instead. This change had no impact on correctness, but using the right
            ABI should provide slightly better performance.</li>
          <li>The {@code cpu-features} helper library was updated to report three optional
            x86 CPU features ({@code SSSE3}, {@code MOVBE} and {@code POPCNT}). See
            {@code docs/CPU-FEATURES.html} for more details.</li>
          <li>{@code docs/NDK-BUILD.html} was updated to mention {@code NDK_APPLICATION_MK} instead
            of {@code NDK_APP_APPLICATION_MK} to select a custom {@code Application.mk} file.</li>
          <li>Cygwin: {@code ndk-build} no longer creates an empty "NUL" file in the current
            directory when invoked.</li>
          <li>Cygwin: Added better automatic dependency detection. In the previous version, it
            didn't work properly in the following cases:
            <ul>
              <li>When the Cygwin drive prefix was not {@code /cygdrive}.</li>
              <li>When using drive-less mounts, for example, when Cygwin would translate
                {@code /home} to {@code \\server\subdir} instead of {@code C:\Some\Dir}.</li>
            </ul>
          </li>
          <li>Cygwin: {@code ndk-build} does not try to use the native Windows tools under
            {@code $NDK/prebuilt/windows/bin} with certain versions of Cygwin and/or GNU Make.</li>
        </ul>
      </dd>
    </dl>
  </div>
</div>


<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt="">Android NDK, Revision 7</a> <em>(November 2011)</em>
  </p>

  <div class="toggle-content-toggleme">
    <p>This release of the NDK includes new features to support the Android 4.0 platform as well
    as many other additions and improvements:</p>

    <dl>
      <dt>New features</dt>

      <dd>
        <ul>
          <li>Added official NDK APIs for Android 4.0 (API level 14), which adds the following
          native features to the platform:

            <ul>
              <li>Added native multimedia API based on the Khronos Group OpenMAX AL? 1.0.1
              standard. The new <code>&lt;OMXAL/OpenMAXAL.h&gt;</code> and
              <code>&lt;OMXAL/OpenMAXAL_Android.h&gt;</code> headers allow applications targeting
              API level 14 to perform multimedia output directly from native code by using a new
              Android-specific buffer queue interface. For more details, see
              <code>docs/openmaxal/index.html</code> and <a href=
              "http://www.khronos.org/openmax/">http://www.khronos.org/openmax/</a>.</li>

              <li>Updated the native audio API based on the Khronos Group OpenSL ES 1.0.1?
              standard. With API Level 14, you can now decode compressed audio (e.g. MP3, AAC,
              Vorbis) to PCM. For more details, see <code>docs/opensles/index.html</code> and
              <a href=
              "http://www.khronos.org/opensles">http://www.khronos.org/opensles/</a>.</li>
            </ul>
          </li>

          <li>Added CCache support. To speed up large rebuilds, define the
          <code>NDK_CCACHE</code> environment variable to <code>ccache</code> (or the path to
          your <code>ccache</code> binary). When declared, the NDK build system automatically
          uses CCache when compiling any source file. For example:
            <pre>
export NDK_CCACHE=ccache
</pre>
          <p class="note"><strong>Note:</strong> CCache is not included in the NDK release
          so you must have it installed prior to using it. For more information about CCache, see
          <a href="http://ccache.samba.org">http://ccache.samba.org</a>.</p>
          </li>

          <li>Added support for setting <code>APP_ABI</code> to <code>all</code> to indicate that
          you want to build your NDK modules for all the ABIs supported by your given NDK
          release. This means that either one of the following two lines in your
          <code>Application.mk</code> are equivalent with this release:
            <pre>
APP_ABI := all
APP_ABI := armeabi armeabi-v7a x86
</pre>

            <p>This also works if you define <code>APP_ABI</code> when calling
            <code>ndk-build</code> from the command-line, which is a quick way to check that your
            project builds for all supported ABIs without changing the project's
            <code>Application.mk file</code>. For example:</p>
            <pre>
ndk-build APP_ABI=all
</pre>
          </li>

          <li>Added a <code>LOCAL_CPP_FEATURES</code> variable in <code>Android.mk</code> that
          allows you to declare which C++ features (RTTI or Exceptions) your module uses. This
          ensures that the final linking works correctly if you have prebuilt modules that depend
          on these features. See <code>docs/ANDROID-MK.html</code> and
          <code>docs/CPLUSPLUS-SUPPORT.html</code> for more details.</li>

          <li>Shortened paths to source and object files that are used in build commands. When
          invoking <code>$NDK/ndk-build</code> from your project path, the paths to the source,
          object, and binary files that are passed to the build commands are significantly
          shorter now, because they are passed relative to the current directory. This is useful
          when building projects with a lot of source files, to avoid limits on the maximum
          command line length supported by your host operating system. The behavior is unchanged
          if you invoke <code>ndk-build</code> from a sub-directory of your project tree, or if
          you define <code>NDK_PROJECT_PATH</code> to point to a specific directory.</li>
        </ul>
      </dd>

      <dt>Experimental features</dt>

      <dd>
        You can now build your NDK source files on Windows <em>without</em> Cygwin by calling the
        <code>ndk-build.cmd</code> script from the command line from your project path. The
        script takes exactly the same arguments as the original <code>ndk-build</code> script.
        The Windows NDK package comes with its own prebuilt binaries for GNU Make, Awk and other
        tools required by the build. You should not need to install anything else to get a
        working build system.

        <p class="caution"><strong>Important:</strong> <code>ndk-gdb</code> does not work on
        Windows, so you still need Cygwin to debug.</p>

        <p>This feature is still experimental, so feel free to try it and report issues on the
        <a href="http://b.android.com">public bug database</a> or <a href=
        "http://groups.google.com/group/android-ndk">public forum</a>. All samples and unit tests
        shipped with the NDK succesfully compile with this feature.</p>
      </dd>

      <dt>Important bug fixes</dt>

      <dd>
        <ul>
          <li>Imported shared libraries are now installed by default to the target installation
          location (<code>libs/&lt;abi&gt;</code>) if <code>APP_MODULES</code> is not defined in
          your <code>Application.mk</code>. For example, if a top-level module <code>foo</code>
          imports a module <code>bar</code>, then both <code>libfoo.so</code> and
          <code>libbar.so</code> are copied to the install location. Previously, only
          <code>libfoo.so</code> was copied, unless you listed <code>bar</code> in your
          <code>APP_MODULES</code> too. If you define <code>APP_MODULES</code> explicitly, the
          behavior is unchanged.</li>

          <li><code>ndk-gdb</code> now works correctly for activities with multiple categories in
          their MAIN intent filters.</li>

          <li>Static library imports are now properly transitive. For example, if a top-level
          module <code>foo</code> imports static library <code>bar</code> that imports static
          library <code>zoo</code>, the <code>libfoo.so</code> will now be linked against both
          <code>libbar.a</code> and <code>libzoo.a</code>.</li>
        </ul>
      </dd>

      <dt>Other changes</dt>

      <dd>
        <ul>
          <li><code>docs/NATIVE-ACTIVITY.HTML</code>: Fixed typo. The minimum API level should be
          9, not 8 for native activities.</li>

          <li><code>docs/STABLE-APIS.html</code>: Added missing documentation listing EGL as a
          supported stable API, starting from API level 9.</li>

          <li><code>download-toolchain-sources.sh</code>: Updated to download the toolchain
          sources from <a href="http://android.googlesource.com">android.googlesource.com</a>,
          which is the new location for the AOSP servers.</li>

          <li>Added a new C++ support runtime named <code>gabi++</code>. More details about it
          are available in the updated <code>docs/CPLUSPLUS-SUPPORT.html</code>.</li>

          <li>Added a new C++ support runtime named <code>gnustl_shared</code> that corresponds
          to the shared library version of GNU libstdc++ v3 (GPLv3 license). See more info at
          <code>docs/CPLUSPLUS-SUPPORT.html</code></li>

          <li>Added support for RTTI in the STLport C++ runtimes (no support for
          exceptions).</li>

          <li>Added support for multiple file extensions in <code>LOCAL_CPP_EXTENSION</code>. For
          example, to compile both <code>foo.cpp</code> and <code>bar.cxx</code> as C++ sources,
          declare the following:
            <pre>
LOCAL_CPP_EXTENSION := .cpp .cxx
</pre>
          </li>

          <li>Removed many unwanted exported symbols from the link-time shared system libraries
          provided by the NDK. This ensures that code generated with the standalone toolchain
          doesn't risk to accidentally depend on a non-stable ABI symbol (e.g. any libgcc.a
          symbol that changes each time the toolchain used to build the platform is changed)</li>

          <li>Refreshed the EGL and OpenGLES Khronos headers to support more extensions. Note
          that this does <em>not</em> change the NDK ABIs for the corresponding libraries,
          because each extension must be probed at runtime by the client application.

            <p>The extensions that are available depend on your actual device and GPU drivers,
            not the platform version the device runs on. The header changes simply add new
            constants and types to make it easier to use the extensions when they have been
            probed with <code>eglGetProcAddress()</code> or <code>glGetProcAddress()</code>. The
            following list describes the newly supported extensions:</p>

            <dl>
              <dt>GLES 1.x</dt>

              <dd>
                <ul>
                  <li><code>GL_OES_vertex_array_object</code></li>

                  <li><code>GL_OES_EGL_image_external</code></li>

                  <li><code>GL_APPLE_texture_2D_limited_npot</code></li>

                  <li><code>GL_EXT_blend_minmax</code></li>

                  <li><code>GL_EXT_discard_framebuffer</code></li>

                  <li><code>GL_EXT_multi_draw_arrays</code></li>

                  <li><code>GL_EXT_read_format_bgra</code></li>

                  <li><code>GL_EXT_texture_filter_anisotropic</code></li>

                  <li><code>GL_EXT_texture_format_BGRA8888</code></li>

                  <li><code>GL_EXT_texture_lod_bias</code></li>

                  <li><code>GL_IMG_read_format</code></li>

                  <li><code>GL_IMG_texture_compression_pvrtc</code></li>

                  <li><code>GL_IMG_texture_env_enhanced_fixed_function</code></li>

                  <li><code>GL_IMG_user_clip_plane</code></li>

                  <li><code>GL_IMG_multisampled_render_to_texture</code></li>

                  <li><code>GL_NV_fence</code></li>

                  <li><code>GL_QCOM_driver_control</code></li>

                  <li><code>GL_QCOM_extended_get</code></li>

                  <li><code>GL_QCOM_extended_get2</code></li>

                  <li><code>GL_QCOM_perfmon_global_mode</code></li>

                  <li><code>GL_QCOM_writeonly_rendering</code></li>

                  <li><code>GL_QCOM_tiled_rendering</code></li>
                </ul>
              </dd>

              <dt>GLES 2.0</dt>

              <dd>
                <ul>
                  <li><code>GL_OES_element_index_uint</code></li>

                  <li><code>GL_OES_get_program_binary</code></li>

                  <li><code>GL_OES_mapbuffer</code></li>

                  <li><code>GL_OES_packed_depth_stencil</code></li>

                  <li><code>GL_OES_texture_3D</code></li>

                  <li><code>GL_OES_texture_float</code></li>

                  <li><code>GL_OES_texture_float_linear</code></li>

                  <li><code>GL_OES_texture_half_float_linear</code></li>

                  <li><code>GL_OES_texture_npot</code></li>

                  <li><code>GL_OES_vertex_array_object</code></li>

                  <li><code>GL_OES_EGL_image_external</code></li>

                  <li><code>GL_AMD_program_binary_Z400</code></li>

                  <li><code>GL_EXT_blend_minmax</code></li>

                  <li><code>GL_EXT_discard_framebuffer</code></li>

                  <li><code>GL_EXT_multi_draw_arrays</code></li>

                  <li><code>GL_EXT_read_format_bgra</code></li>

                  <li><code>GL_EXT_texture_format_BGRA8888</code></li>

                  <li><code>GL_EXT_texture_compression_dxt1</code></li>

                  <li><code>GL_IMG_program_binary</code></li>

                  <li><code>GL_IMG_read_format</code></li>

                  <li><code>GL_IMG_shader_binary</code></li>

                  <li><code>GL_IMG_texture_compression_pvrtc</code></li>

                  <li><code>GL_IMG_multisampled_render_to_texture</code></li>

                  <li><code>GL_NV_coverage_sample</code></li>

                  <li><code>GL_NV_depth_nonlinear</code></li>

                  <li><code>GL_QCOM_extended_get</code></li>

                  <li><code>GL_QCOM_extended_get2</code></li>

                  <li><code>GL_QCOM_writeonly_rendering</code></li>

                  <li><code>GL_QCOM_tiled_rendering</code></li>
                </ul>
              </dd>

              <dt>EGL</dt>

              <dd>
                <ul>
                  <li><code>EGL_ANDROID_recordable</code></li>

                  <li><code>EGL_NV_system_time</code></li>
                </ul>
              </dd>
            </dl>
          </li>
        </ul>
      </dd>
    </dl>
  </div>
</div>


<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt="">Android NDK, Revision 6b</a> <em>(August 2011)</em>
  </p>

  <div class="toggle-content-toggleme">
      <p>This release of the NDK does not include any new features compared to r6. The r6b release
      addresses the following issues in the r6 release:</p>
      <dl>
        <dt>Important bug fixes</dt>
        <dd>
          <ul>
            <li>Fixed the build when <code>APP_ABI="armeabi x86"</code> is used for
            multi-architecture builds.</li>
            <li>Fixed the location of prebuilt STLport binaries in the NDK release package.
            A bug in the packaging script placed them in the wrong location.</li>
            <li>Fixed <code>atexit()</code> usage in shared libraries with the x86standalone
            toolchain.</li>
            <li>Fixed <code>make-standalone-toolchain.sh --arch=x86</code>. It used to fail
            to copy the proper GNU libstdc++ binaries to the right location.</li>
            <li>Fixed the standalone toolchain linker warnings about missing the definition and
            size for the <code>__dso_handle</code> symbol (ARM only).</li>
            <li>Fixed the inclusion order of <code>$(SYSROOT)/usr/include</code> for x86 builds.
            See the <a href="http://code.google.com/p/android/issues/detail?id=18540">bug</a> for
            more information.</li>
            <li>Fixed the definitions of <code>ptrdiff_t</code> and <code>size_t</code> in
            x86-specific systems when they are used with the x86 standalone toolchain.</li>
          </ul>
        </dd>
      </dl>
  </div>
</div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt="">Android NDK, Revision 6</a> <em>(July 2011)</em>
  </p>

  <div class="toggle-content-toggleme">
      <p>This release of the NDK includes support for the x86 ABI and other minor changes.
      For detailed information describing the changes in this release, read the
      <code>CHANGES.HTML</code> document included in the NDK package.
      </p>
      <dl>
        <dt>General notes:</dt>
        <dd>
          <ul>
            <li>Adds support for the x86 ABI, which allows you to generate machine code
            that runs on compatible x86-based Android devices. Major features for x86
            include x86-specific toolchains, system headers, libraries and
            debugging support. For all of the details regarding x86 support,
            see <code>docs/CPU-X86.html</code> in the NDK package.

              <p>By default, code is generated for ARM-based devices, but you can add x86 to your
              <code>APP_ABI</code> definition in your <code>Application.mk</code> file to build
              for x86 platforms. For example, the following line instructs <code>ndk-build</code>
              to build your code for three distinct ABIs:</p>

              <pre>APP_ABI := armeabi armeabi-v7a x86</pre>

              <p>Unless you rely on ARM-based assembly sources, you shouldn't need to touch
              your <code>Android.mk</code> files to build x86 machine code.</p>

            </li>

            <li>You can build a standalone x86 toolchain using the <code>--toolchain=x86-4.4.3</code>
            option when calling <code>make-standalone-toolchain.sh</code>. See
            <code>docs/STANDALONE-TOOLCHAIN.html</code> for more details.
            </li>
            <li>The new <code>ndk-stack</code> tool lets you translate stack traces in
            <code>logcat</code> that are generated by native code. The tool translates
            instruction addresses into a readable format that contains things such
            as the function, source file, and line number corresponding to each stack frame.
            For more information and a usage example, see <code>docs/NDK-STACK.html</code>.
            </li>
          </ul>
        </dd>
        <dt>Other changes:</dt>
        <dd><code>arm-eabi-4.4.0</code>, which had been deprecated since NDK r5, has been
        removed from the NDK distribution.</dd>

      </dl>
    </div>
  </div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt="">Android NDK, Revision 5c</a> <em>(June 2011)</em>
  </p>

  <div class="toggle-content-toggleme">
    <p>This release of the NDK does not include any new features compared to r5b. The r5c release
    addresses the following problems in the r5b release:</p>
    <dl>
      <dt>Important bug fixes:</dt>
      <dd>
        <ul>
          <li><code>ndk-build</code>: Fixed a rare bug that appeared when trying to perform parallel
          builds of debuggable projects.</li>

          <li>Fixed a typo that prevented <code>LOCAL_WHOLE_STATIC_LIBRARIES</code> to work
          correctly with the new toolchain and added documentation for this in
          <code>docs/ANDROID-MK.html</code>.</li>

          <li>Fixed a bug where code linked against <code>gnustl_static</code> crashed when run on
          platform releases older than API level 8 (Android 2.2).</li>

          <li><code>ndk-gdb</code>: Fixed a bug that caused a segmentation fault when debugging Android 3.0
          or newer devices.</li>

          <li><code>&lt;android/input.h&gt;</code>: Two functions that were introduced in API level
          9 (Android 2.3) were incorrect and are fixed. While this breaks the source API, the
          binary interface to the system is unchanged. The incorrect functions were missing a
          <code>history_index</code> parameter, and the correct definitions are shown below:
<pre>
float AMotionEvent_getHistoricalRawX(const AInputEvent* motion_event,
                                           size_t pointer_index,
                                           size_t history_index);

float AMotionEvent_getHistoricalRawY(const AInputEvent* motion_event,
                                           size_t pointer_index,
                                           size_t history_index);
</pre>
          </li>

          <li>Updated the C library ARM binary for API level 9 (Android 2.3) to correctly expose at
          link time new functions that were added in that API level (for example,
          <code>pthread_rwlock_init</code>).</li>

        </ul>
      </dd>

      <dt>Minor improvements and fixes:</dt>
      <dd>
        <ul>
          <li>Object files are now always linked in the order they appear in
          <code>LOCAL_SRC_FILES</code>. This was not the case previously because the files were
          grouped by source extensions instead.</li>

          <li>When <code>import-module</code> fails, it now prints the list of directories that
          were searched. This is useful to check that the <code>NDK_MODULE_PATH</code> definition
          used by the build system is correct.</li>

          <li>When <code>import-module</code> succeeds, it now prints the directory where the
          module was found to the log (visible with <code>NDK_LOG=1</code>).</li>

          <li>Increased the build speed of debuggable applications when there is a very large number
          of include directories in the project.</li>

          <li><code>ndk-gdb</code>: Better detection of <code>adb shell</code> failures and improved
          error messages.</li>

          <li><code>&lt;pthread.h&gt;</code>: Fixed the definition of
          <code>PTHREAD_RWLOCK_INITIALIZER</code> for API level 9 (Android 2.3) and higher.</li>

          <li>Fixed an issue where a module could import itself, resulting in an infinite loop in
          GNU Make.</li>

          <li>Fixed a bug that caused the build to fail if <code>LOCAL_ARM_NEON</code> was set to
          true (typo in <code>build/core/build-binary.mk</code>).</li>

          <li>Fixed a bug that prevented the compilation of </code>.s</code> assembly files
          (<code>.S</code> files were okay).</li>
        </ul>
      </dd>
  </div>
</div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt="">Android NDK, Revision 5b</a> <em>(January 2011)</em>
  </p>

  <div class="toggle-content-toggleme">
      <p>This release of the NDK does not include any new features compared to r5. The r5b release addresses the
      following problems in the r5 release:
      </p>
      <ul>
    <li>The r5 binaries required glibc 2.11, but the r5b binaries are generated with a special
    toolchain that targets glibc 2.7 or higher instead. The Linux toolchain binaries now run on Ubuntu 8.04 or higher. </li>
    <li>Fixes a compiler bug in the arm-linux-androideabi-4.4.3 toolchain.
    The previous binary generated invalid thumb instruction sequences when
    dealing with signed chars.</li>
    <li>Adds missing documentation for the
    "gnustl_static" value for APP_STL, that allows you to link against
    a static library version of GNU libstdc++. </li>
    <li>The following <code>ndk-build</code> issues are fixed:
      <ul>
        <li>A bug that created inconsistent dependency files when a
        compilation error occured on Windows. This prevented a proper build after
        the error was fixed in the source code.</li>
        <li>A Cygwin-specific bug where using very short paths for
        the Android NDK installation or the project path led to the
        generation of invalid dependency files. This made incremental builds
        impossible.</li>
        <li>A typo that prevented the cpufeatures library from working correctly
        with the new NDK toolchain.</li>
        <li>Builds in Cygwin are faster by avoiding calls to <code>cygpath -m</code>
        from GNU Make for every source or object file, which caused problems
        with very large source trees. In case this doesn't work properly, define <code>NDK_USE_CYGPATH=1</code> in your
        environment to use <code>cygpath -m</code> again.</li>
        <li>The Cygwin installation now notifies the user of invalid installation paths that contain spaces. Previously, an invalid path
        would output an error that complained about an incorrect version of GNU Make, even if the right one was installed.
      </ul>
    </li>
  <li>Fixed a typo that prevented the <code>NDK_MODULE_PATH</code> environment variable from working properly when
  it contained multiple directories separated with a colon. </li>
  <li>The <code>prebuilt-common.sh</code> script contains fixes to check the compiler for 64-bit
  generated machine code, instead of relying on the host tag, which
  allows the 32-bit toolchain to rebuild properly on Snow Leopard. The toolchain rebuild scripts now also support
  using a 32-bit host toolchain.</li>
  <li>A missing declaration for <code>INET_ADDRSTRLEN</code> was added to <code>&lt;netinet/in.h&gt;</code>.</li>
  <li>Missing declarations for <code>IN6_IS_ADDR_MC_NODELOCAL</code> and <code>IN6_IS_ADDR_MC_GLOBAL</code> were added to <code>&lt;netinet/in6.h&gt;</code>.</li>
  <li>'asm' was replaced with '__asm__' in <code>&lt;asm/byteorder.h&gt;</code> to allow compilation with <code>-std=c99</code>.</li>
  </ul>
  </div>
  </div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt="">Android NDK, Revision 5</a> <em>(December 2010)</em>
  </p>

  <div class="toggle-content-toggleme">
      <p>This release of the NDK includes many new APIs, most of which are introduced to
         support the development of games and similar applications that make extensive use
         of native code. Using the APIs, developers have direct native access to events, audio,
         graphics and window management, assets, and storage. Developers can also implement the
         Android application lifecycle in native code with help from the new
         {@link android.app.NativeActivity} class. For detailed information describing the changes in this
         release, read the <code>CHANGES.HTML</code> document included in the downloaded NDK package.
      </p>
      <dl>
        <dt>General notes:</dt>
        <dd>
          <ul>
            <li>Adds support for native activities, which allows you to implement the
            Android application lifecycle in native code.</li>

            <li>Adds native support for the following:

              <ul>

                <li>Input subsystem (such as the keyboard and touch screen)</li>

                <li>Access to sensor data (accelerometer, compass, gyroscope, etc).</li>

                <li>Event loop APIs to wait for things such as input and sensor events.</li>

                <li>Window and surface subsystem</li>

                <li>Audio APIs based on the OpenSL ES standard that support playback and recording
                as well as control over platform audio effects</li>

                <li>Access to assets packaged in an <code>.apk</code> file.</li>

              </ul>
            </li>

            <li>Includes a new toolchain (based on GCC 4.4.3), which generates better code, and can also now
            be used as a standalone cross-compiler, for people who want to build their stuff with
            <code>./configure &amp;&amp; make</code>. See
            docs/STANDALONE-TOOLCHAIN.html for the details. The binaries for GCC 4.4.0 are still provided,
            but the 4.2.1 binaries were removed.</li>

            <li>Adds support for prebuilt static and shared libraries (docs/PREBUILTS.html) and module
            exports and imports to make sharing and reuse of third-party modules much easier
            (docs/IMPORT-MODULE.html explains why).</li>

            <li>Provides a default C++ STL implementation (based on STLport) as a helper module. It can be used either
            as a static or shared library (details and usage examples are in sources/android/stlport/README). Prebuilt
            binaries for STLport (static or shared) and GNU libstdc++ (static only) are also provided if you choose to
            compile against those libraries instead of the default C++ STL implementation.
            C++ Exceptions and RTTI are not supported in the default STL implementation. For more information, see
            docs/CPLUSPLUS-SUPPORT.HTML.</li>

            <li>Includes improvements to the <code>cpufeatures</code> helper library that improves reporting
            of the CPU type (some devices previously reported ARMv7 CPU when the device really was an ARMv6). We
            recommend developers that use this library to rebuild their applications then
            upload to Google Play to benefit from the improvements.</li>

            <li>Adds an EGL library that lets you create and manage OpenGL ES textures and
              services.</li>

            <li>Adds new sample applications, <code>native-plasma</code> and <code>native-activity</code>,
            to demonstrate how to write a native activity.</li>

            <li>Includes many bugfixes and other small improvements; see docs/CHANGES.html for a more
              detailed list of changes.</li>
          </ul>
        </dd>
      </dl>
    </div>
  </div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt="">Android NDK, Revision 4b</a> <em>(June 2010)</em>
  </p>

  <div class="toggle-content-toggleme">
      <dl>
        <dt>NDK r4b notes:</dt>

        <dd>
          <p>Includes fixes for several issues in the NDK build and debugging scripts &mdash; if
          you are using NDK r4, we recommend downloading the NDK r4b build. For detailed
          information describing the changes in this release, read the CHANGES.TXT document
          included in the downloaded NDK package.</p>
        </dd>
      </dl>

      <dl>
        <dt>General notes:</dt>

        <dd>
          <ul>
            <li>Provides a simplified build system through the new <code>ndk-build</code> build
            command.</li>

            <li>Adds support for easy native debugging of generated machine code on production
            devices through the new <code>ndk-gdb</code> command.</li>

            <li>Adds a new Android-specific ABI for ARM-based CPU architectures,
            <code>armeabi-v7a</code>. The new ABI extends the existing <code>armeabi</code> ABI to
            include these CPU instruction set extensions:

              <ul>
                <li>Thumb-2 instructions</li>

                <li>VFP hardware FPU instructions (VFPv3-D16)</li>

                <li>Optional support for ARM Advanced SIMD (NEON) GCC intrinsics and VFPv3-D32.
                Supported by devices such as Verizon Droid by Motorola, Google Nexus One, and
                others.</li>
              </ul>
            </li>

            <li>Adds a new <code>cpufeatures</code> static library (with sources) that lets your
            app detect the host device's CPU features at runtime. Specifically, applications can
            check for ARMv7-A support, as well as VFPv3-D32 and NEON support, then provide separate
            code paths as needed.</li>

            <li>Adds a sample application, <code>hello-neon</code>, that illustrates how to use the
            <code>cpufeatures</code> library to check CPU features and then provide an optimized
            code path using NEON instrinsics, if supported by the CPU.</li>

            <li>Lets you generate machine code for either or both of the instruction sets supported
            by the NDK. For example, you can build for both ARMv5 and ARMv7-A architectures at the
            same time and have everything stored to your application's final
            <code>.apk</code>.</li>

            <li>To ensure that your applications are available to users only if their devices are
            capable of running them, Google Play now filters applications based on the
            instruction set information included in your application &mdash; no action is needed on
            your part to enable the filtering. Additionally, the Android system itself also checks
            your application at install time and allows the installation to continue only if the
            application provides a library that is compiled for the device's CPU architecture.</li>

            <li>Adds support for Android 2.2, including a new stable API for accessing the pixel
            buffers of {@link android.graphics.Bitmap} objects from native code.</li>
          </ul>
        </dd>
      </dl>
    </div>
  </div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt="">Android NDK, Revision 3</a> <em>(March 2010)</em>
  </p>

  <div class="toggle-content-toggleme">
      <dl>
        <dt>General notes:</dt>

        <dd>
          <ul>
            <li>Adds OpenGL ES 2.0 native library support.</li>

            <li>Adds a sample application,<code>hello-gl2</code>, that illustrates the use of
            OpenGL ES 2.0 vertex and fragment shaders.</li>

            <li>The toolchain binaries have been refreshed for this release with GCC 4.4.0, which
            should generate slightly more compact and efficient machine code than the previous one
            (4.2.1). The NDK also still provides the 4.2.1 binaries, which you can optionally use
            to build your machine code.</li>
          </ul>
        </dd>
      </dl>
    </div>
  </div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt="">Android NDK, Revision 2</a> <em>(September 2009)</em>
  </p>

  <div class="toggle-content-toggleme">
      <p>Originally released as "Android 1.6 NDK, Release 1".</p>

      <dl>
        <dt>General notes:</dt>

        <dd>
          <ul>
            <li>Adds OpenGL ES 1.1 native library support.</li>

            <li>Adds a sample application, <code>san-angeles</code>, that renders 3D graphics
            through the native OpenGL ES APIs, while managing activity lifecycle with a {@link
            android.opengl.GLSurfaceView} object.</li>
          </ul>
        </dd>
      </dl>
    </div>
  </div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt="">Android NDK, Revision 1</a> <em>(June 2009)</em>
  </p>

  <div class="toggle-content-toggleme">
      <p>Originally released as "Android 1.5 NDK, Release 1".</p>

      <dl>
        <dt>General notes:</dt>

        <dd>
          <ul>
            <li>Includes compiler support (GCC) for ARMv5TE instructions, including Thumb-1
            instructions.</li>

            <li>Includes system headers for stable native APIs, documentation, and sample
            applications.</li>
          </ul>
        </dd>
      </dl>
    </div>
  </div>





<!-- ####################### END OF RELEASE NOTES ####################### -->




























  <h2 id="Reqs">System and Software Requirements</h2>

  <p>The sections below describe the system and software requirements for using the Android NDK, as
  well as platform compatibility considerations that affect appplications using libraries produced
  with the NDK.</p>

  <h4>The Android SDK</h4>

  <ul>
    <li>A complete Android SDK installation (including all dependencies) is required.</li>

    <li>Android 1.5 SDK or later version is required.</li>
  </ul>

  <h4>Supported operating systems</h4>

  <ul>
    <li>Windows XP (32-bit) or Vista (32- or 64-bit)</li>

    <li>Mac OS X 10.4.8 or later (x86 only)</li>

    <li>Linux (32 or 64-bit; Ubuntu 8.04, or other Linux distributions using GLibc 2.7 or
later)</li>
  </ul>

  <h4>Required development tools</h4>

  <ul>
    <li>For all development platforms, GNU Make 3.81 or later is required. Earlier versions of GNU
    Make might work but have not been tested.</li>

    <li>A recent version of awk (either GNU Awk or Nawk) is also required.</li>

    <li>For Windows, <a href="http://www.cygwin.com">Cygwin</a> 1.7 or higher is required. The NDK
    will <em>not</em> work with Cygwin 1.5 installations.</li>
  </ul>

  <h4 id="platform-compat">Android platform compatibility</h4>

  <ul>
    <li>The native libraries created by the Android NDK can only be used on devices running
      specific minimum Android platform versions. The minimum required platform version depends on
      the CPU architecture of the devices you are targeting. The following table details which
      Android platform versions are compatible with native code developed for specific CPU
      architectures.

    <table style="margin:1em;">
      <tr>
        <th>Native Code CPU Architecture Used</th>
        <th>Compatible Android Platform(s)</th>
      </tr>

      <tr>
        <td>ARM, ARM-NEON</td>
        <td>Android 1.5 (API Level 3) and higher</td>
      </tr>

      <tr>
        <td>x86</td>
        <td>Android 2.3 (API Level 9) and higher</td>
      </tr>

      <tr>
        <td>MIPS</td>
        <td>Android 2.3 (API Level 9) and higher</td>
      </tr>
    </table>

      <p>These requirements mean you can use native libraries produced with the NDK in
      applications that are deployable to ARM-based devices running Android 1.5 or later. If you are
      deploying native libraries to x86 and MIPS-based devices, your application must target Android
      2.3 or later.</p>
    </li>

    <li>To ensure compatibility, an application using a native library produced with the NDK
    <em>must</em> declare a <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>
      &lt;uses-sdk&gt;</code></a> element in its manifest file, with an
      <code>android:minSdkVersion</code> attribute value of "3" or higher. For example:

<pre style="margin:1em;">
&lt;manifest&gt;
  &lt;uses-sdk android:minSdkVersion="3" /&gt;
  ...
&lt;/manifest&gt;
</pre>
    </li>

    <li>If you use this NDK to create a native library that uses the OpenGL ES APIs, the
    application containing the library can be deployed only to devices running the minimum platform
    versions described in the table below. To ensure compatibility, make sure that your application
    declares the proper <code>android:minSdkVersion</code> attribute value, as shown in the
    following table.</li>

    <li style="list-style: none; display: inline">
      <table style="margin:1em;">
        <tr>
          <th>OpenGL ES Version Used</th>

          <th>Compatible Android Platform(s)</th>

          <th>Required uses-sdk Attribute</th>
        </tr>

        <tr>
          <td>OpenGL ES 1.1</td>

          <td>Android 1.6 (API Level 4) and higher</td>

          <td><code>android:minSdkVersion="4"</code></td>
        </tr>

        <tr>
          <td>OpenGL ES 2.0</td>

          <td>Android 2.0 (API Level 5) and higher</td>

          <td><code>android:minSdkVersion="5"</code></td>
        </tr>
      </table>

      <p>For more information about API Level and its relationship to Android platform versions,
      see <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">Android API Levels</a>.</p>
    </li>

    <li>Additionally, an application using the OpenGL ES APIs should declare a
    <code>&lt;uses-feature&gt;</code> element in its manifest, with an
    <code>android:glEsVersion</code> attribute that specifies the minimum OpenGl ES version
    required by the application. This ensures that Google Play will show your application only
    to users whose devices are capable of supporting your application. For example:
      <pre style="margin:1em;">
&lt;manifest&gt;
<!-- Declare that the application uses the OpenGL ES 2.0 API and is designed
     to run only on devices that support OpenGL ES 2.0 or higher. -->
  &lt;uses-feature android:glEsVersion="0x00020000" /&gt;
  ...
&lt;/manifest&gt;
</pre>

      <p>For more information, see the <a href=
      "{@docRoot}guide/topics/manifest/uses-feature-element.html"><code>&lt;uses-feature&gt;</code></a>
      documentation.</p>
    </li>

    <li>If you use this NDK to create a native library that uses the API to access Android {@link
    android.graphics.Bitmap} pixel buffers or utilizes native activities, the application
    containing the library can be deployed only to devices running Android 2.2 (API level 8) or
    higher. To ensure compatibility, make sure that your application declares <code>&lt;uses-sdk
    android:minSdkVersion="8" /&gt;</code> attribute value in its manifest.</li>
  </ul>



























  <h2 id="Installing">Installing the NDK</h2>
  <p>Installing the NDK on your development computer is straightforward and involves extracting the
  NDK from its download package.</p>

  <p>Before you get started make sure that you have downloaded the latest <a href=
  "{@docRoot}sdk/index.html">Android SDK</a> and upgraded your applications and environment as
  needed. The NDK is compatible with older platform versions but not older versions of the SDK tools.
  Also, take a moment to review the <a href="{@docRoot}tools/sdk/ndk/overview.html#reqs">System and
Software Requirements</a>
  for the NDK, if you haven't already.</p>

  <p>To install the NDK, follow these steps:</p>

  <ol>
    <li>From the table at the top of this page, select the NDK package that is appropriate for your
    development computer and download the package.</li>

    <li>Uncompress the NDK download package using tools available on your computer. When
    uncompressed, the NDK files are contained in a directory called
    <code>android-ndk-&lt;version&gt;</code>. You can rename the NDK directory if necessary and you
    can move it to any location on your computer. This documentation refers to the NDK directory as
    <code>&lt;ndk&gt;</code>.</li>
  </ol>

  <p>You are now ready to start working with the NDK.</p>


<h2 id="GetStarted">Getting Started with the NDK</h2>

<p>Once you've installed the NDK successfully, take a few minutes to read the documentation
included in the NDK. You can find the documentation in the <code>&lt;ndk&gt;/docs/</code>
directory. In particular, please read the OVERVIEW.HTML document completely, so that you
understand the intent of the NDK and how to use it.</p>

<p>If you used a previous version of the NDK, take a moment to review the list of NDK changes in
the CHANGES.HTML document.</p>

<p>Here's the general outline of how you work with the NDK tools:</p>

<ol>
  <li>Place your native sources under <code>&lt;project&gt;/jni/...</code></li>

  <li>Create <code>&lt;project&gt;/jni/Android.mk</code> to describe your native sources to the
  NDK build system</li>

  <li>Optional: Create <code>&lt;project&gt;/jni/Application.mk</code>.</li>

  <li>Build your native code by running the 'ndk-build' script from your project's directory. It
  is located in the top-level NDK directory:
    <pre class="no-pretty-print">cd &lt;project&gt;
&lt;ndk&gt;/ndk-build
</pre>

    <p>The build tools copy the stripped, shared libraries needed by your application to the
    proper location in the application's project directory.</p>
  </li>

  <li>Finally, compile your application using the SDK tools in the usual way. The SDK build tools
  will package the shared libraries in the application's deployable <code>.apk</code> file.</li>
</ol>

<p>For complete information on all of the steps listed above, please see the documentation
included with the NDK package.</p>


<h3 id="Using">Using the NDK</h3>

<p>The Android framework provides two ways to use native code:</p>

<ul>
  <li>Write your application using the Android framework and use JNI to access the APIs provided
  by the Android NDK. This technique allows you to take advantage of the convenience of the
  Android framework, but still allows you to write native code when necessary. If you use this
  approach, your application must target specific, minimum Android platform levels, see <a
  href="#platform-compat">Android platform compatibility</a> for more information.</li>

  <li>
    <p>Write a native activity, which allows you to implement the lifecycle callbacks in native
    code. The Android SDK provides the {@link android.app.NativeActivity} class, which is a
    convenience class that notifies your
    native code of any activity lifecycle callbacks (<code>onCreate()</code>, <code>onPause()</code>,
    <code>onResume()</code>, etc). You can implement the callbacks in your native code to handle
    these events when they occur. Applications that use native activities must be run on Android
    2.3 (API Level 9) or later.</p>

    <p>You cannot access features such as Services and Content Providers natively, so if you want
    to use them or any other framework API, you can still write JNI code to do so.</p>
  </li>
</ul>





  <h2 id="Contents">Contents of the NDK</h2>

  <p>The NDK contains the APIs, documentation, and sample
  applications that help you write your native code. Specifically:</p>

  <ul>
    <li>A set of tools and build files used to generate native code libraries from C and C++
    sources</li>

    <li>A way to embed the corresponding native libraries into an application package file
    (<code>.apk</code>) that can be deployed on Android devices</li>

    <li>A set of native system headers and libraries that will be supported in all future versions
    of the Android platform, starting from Android 1.5. Applications that use native activities
    must be run on Android 2.3 or later.</li>

    <li>Documentation, samples, and tutorials</li>
  </ul>

  <p>The latest release of the NDK supports the following instruction sets:</p>

  <ul>
    <li>ARMv5TE, including Thumb-1 instructions (see {@code docs/CPU-ARCH-ABIS.html} for more
information)</li>

    <li>ARMv7-A, including Thumb-2 and VFPv3-D16 instructions, with optional support for
    NEON/VFPv3-D32 instructions (see {@code docs/CPU-ARM-NEON.html} for more information)</li>

    <li>x86 instructions (see {@code docs/CPU-X86.html} for more information)</li>

    <li>MIPS instructions (see {@code docs/CPU-MIPS.html} for more information)</li>
  </ul>

  <p>ARMv5TE machine code will run on all ARM-based Android devices. ARMv7-A will run only on
  devices such as the Verizon Droid or Google Nexus One that have a compatible CPU. The main
  difference between the two instruction sets is that ARMv7-A supports hardware FPU, Thumb-2, and
  NEON instructions. You can target either or both of the instruction sets &mdash; ARMv5TE is the
  default, but switching to ARMv7-A is as easy as adding a single line to the application's
  <code>Application.mk</code> file, without needing to change anything else in the file. You can also build for
  both architectures at the same time and have everything stored in the final <code>.apk</code>.
  Complete information is provided in the CPU-ARCH-ABIS.HTML in the NDK package.</p>

  <p>The NDK provides stable headers for libc (the C library), libm (the Math library), OpenGL ES
  (3D graphics library), the JNI interface, and other libraries, as listed in the <a href=
  "#Tools">Development tools</a> section.</p>


  <h3 id="Tools">Development tools</h3>

  <p>The NDK includes a set of cross-toolchains (compilers, linkers, etc..) that can generate
  native ARM binaries on Linux, OS X, and Windows (with Cygwin) platforms.</p>

  <p>It provides a set of system headers for stable native APIs that are guaranteed to be supported
  in all later releases of the platform:</p>

  <ul>
    <li>libc (C library) headers</li>

    <li>libm (math library) headers</li>

    <li>JNI interface headers</li>

    <li>libz (Zlib compression) headers</li>

    <li>liblog (Android logging) header</li>

    <li>OpenGL ES 1.1 and OpenGL ES 2.0 (3D graphics libraries) headers</li>

    <li>libjnigraphics (Pixel buffer access) header (for Android 2.2 and above).</li>

    <li>A Minimal set of headers for C++ support</li>

    <li>OpenSL ES native audio libraries</li>

    <li>Android native application APIS</li>
  </ul>

  <p>The NDK also provides a build system that lets you work efficiently with your sources, without
  having to handle the toolchain/platform/CPU/ABI details. You create very short build files to
  describe which sources to compile and which Android application will use them &mdash; the build
  system compiles the sources and places the shared libraries directly in your application
  project.</p>

  <p class="caution"><strong>Important:</strong> With the exception of the libraries listed above,
  native system libraries in the Android platform are <em>not</em> stable and may change in future
  platform versions. Your applications should <em>only</em> make use of the stable native system
  libraries provided in this NDK.</p>



  <h3 id="Docs">Documentation</h3>

  <p>The NDK package includes a set of documentation that describes the capabilities of the NDK and
  how to use it to create shared libraries for your Android applications. In this release, the
  documentation is provided only in the downloadable NDK package. You can find the documentation in
  the <code>&lt;ndk&gt;/docs/</code> directory. Included are these files (partial listing):</p>

  <ul>
    <li>
    INSTALL.HTML &mdash; describes how to install the NDK and configure it for your host
    system</li>

    <li>OVERVIEW.HTML &mdash; provides an overview of the NDK capabilities and usage</li>

    <li>ANDROID-MK.HTML &mdash; describes the use of the Android.mk file, which defines the native
    sources you want to compile</li>

    <li>APPLICATION-MK.HTML &mdash; describes the use of the Application.mk file, which describes
    the native sources required by your Android application</li>
    <li>CPLUSPLUS-SUPPORT.HTML &mdash; describes the C++ support provided in the Android NDK</li>
    <li>CPU-ARCH-ABIS.HTML &mdash; a description of supported CPU architectures and how to target
    them.</li>

    <li>CPU-FEATURES.HTML &mdash; a description of the <code>cpufeatures</code> static library that
    lets your application code detect the target device's CPU family and the optional features at
    runtime.</li>

    <li>CHANGES.HTML &mdash; a complete list of changes to the NDK across all releases.</li>

    <li>DEVELOPMENT.HTML &mdash; describes how to modify the NDK and generate release packages for it</li>

    <li>HOWTO.HTML &mdash; information about common tasks associated with NDK development</li>

    <li>IMPORT-MODULE.HTML &mdash; describes how to share and reuse modules</li>

    <li>LICENSES.HTML  &mdash; information about the various open source licenses that govern the Android NDK</li>

    <li>NATIVE-ACTIVITY.HTML &mdash; describes how to implement native activities</li>

    <li>NDK-BUILD.HTML &mdash; describes the usage of the ndk-build script</li>

    <li>NDK-GDB.HTML &mdash; describes how to use the native code debugger</li>

    <li>PREBUILTS.HTML &mdash; information about how shared and static prebuilt libraries work </li>

    <li>STANDALONE-TOOLCHAIN.HTML &mdash; describes how to use Android NDK toolchain as a standalone
    compiler (still in beta).</li>

    <li>SYSTEM-ISSUES.HTML &mdash; known issues in the Android system images that you should be
    aware of, if you are developing using the NDK.</li>

    <li>STABLE-APIS.HTML &mdash; a complete list of the stable APIs exposed by headers in the
    NDK.</li>

  </ul>

  <p>Additionally, the package includes detailed information about the "bionic" C library provided
  with the Android platform that you should be aware of, if you are developing using the NDK. You
  can find the documentation in the <code>&lt;ndk&gt;/docs/system/libc/</code> directory:</p>

  <ul>
    <li>OVERVIEW.HTML &mdash; provides an overview of the "bionic" C library and the features it
    offers.</li>
  </ul>





<h3 id="Samples">Sample apps</h3>

<p>The NDK includes sample applications that illustrate how to use native code in your Android
  applications:</p>

  <ul>
    <li><code>hello-jni</code> &mdash; a simple application that loads a string from a native
    method implemented in a shared library and then displays it in the application UI.</li>

    <li><code>two-libs</code> &mdash; a simple application that loads a shared library dynamically
    and calls a native method provided by the library. In this case, the method is implemented in a
    static library imported by the shared library.</li>

    <li><code>san-angeles</code> &mdash; a simple application that renders 3D graphics through the
    native OpenGL ES APIs, while managing activity lifecycle with a {@link
    android.opengl.GLSurfaceView} object.</li>

    <li><code>hello-gl2</code> &mdash; a simple application that renders a triangle using OpenGL ES
    2.0 vertex and fragment shaders.</li>

    <li><code>hello-neon</code> &mdash; a simple application that shows how to use the
    <code>cpufeatures</code> library to check CPU capabilities at runtime, then use NEON intrinsics
    if supported by the CPU. Specifically, the application implements two versions of a tiny
    benchmark for a FIR filter loop, a C version and a NEON-optimized version for devices that
    support it.</li>

    <li><code>bitmap-plasma</code> &mdash; a simple application that demonstrates how to access the
    pixel buffers of Android {@link android.graphics.Bitmap} objects from native code, and uses
    this to generate an old-school "plasma" effect.</li>

    <li><code>native-activity</code> &mdash; a simple application that demonstrates how to use the
    native-app-glue static library to create a native activity</li>

    <li><code>native-plasma</code> &mdash; a version of bitmap-plasma implemented with a native
    activity.</li>
  </ul>

  <p>For each sample, the NDK includes the corresponding C source code and the necessary Android.mk
  and Application.mk files. There are located under <code>&lt;ndk&gt;/samples/&lt;name&gt;/</code>
  and their source code can be found under <code>&lt;ndk&gt;/samples/&lt;name&gt;/jni/</code>.</p>

  <p>You can build the shared libraries for the sample apps by going into
  <code>&lt;ndk&gt;/samples/&lt;name&gt;/</code> then calling the <code>ndk-build</code> command.
  The generated shared libraries will be located under
  <code>&lt;ndk&gt;/samples/&lt;name&gt;/libs/armeabi/</code> for (ARMv5TE machine code) and/or
  <code>&lt;ndk&gt;/samples/&lt;name&gt;/libs/armeabi-v7a/</code> for (ARMv7 machine code).</p>

  <p>Next, build the sample Android applications that use the shared libraries:</p>

  <ul>
    <li>If you are developing in Eclipse with ADT, use the New Project Wizard to create a new
    Android project for each sample, using the "Import from Existing Source" option and importing
    the source from <code>&lt;ndk&gt;/samples/&lt;name&gt;/</code>. Then, set up an AVD,
    if necessary, and build/run the application in the emulator.</li>

    <li>If you are developing with Ant, use the <code>android</code> tool to create the build file
    for each of the sample projects at <code>&lt;ndk&gt;/samples/&lt;name&gt;/</code>.
    Then set up an AVD, if necessary, build your project in the usual way, and run it in the
    emulator.</li>

  </ul>

  <p>For more information about developing with the Android SDK tools and what
  you need to do to create, build, and run your applications, see
  the <a href="{@docRoot}tools/workflow/index.html">Overview</a>
  section for developing on Android.</p>



  <h4 id="hello-jni">Exploring the hello-jni Sample</h4>

  <p>The hello-jni sample is a simple demonstration on how to use JNI from an Android application.
  The HelloJni activity receives a string from a simple C function and displays it in a
  TextView.</p>

  <p>The main components of the sample include:</p>

  <ul>
    <li>The familiar basic structure of an Android application (an <code>AndroidManifest.xml</code>
    file, a <code>src/</code> and <code>res</code> directories, and a main activity)</li>

    <li>A <code>jni/</code> directory that includes the implemented source file for the native code
    as well as the Android.mk file</li>

    <li>A <code>tests/</code> directory that contains unit test code.</li>
  </ul>

  <ol>
    <li>Create a new project in Eclipse from the existing sample source or use the
    <code>android</code> tool to update the project so it generates a build.xml file that you can
    use to build the sample.

      <ul>
        <li>In Eclipse:

          <ol type="a">
            <li>Click <strong>File &gt; New Android Project...</strong></li>

            <li>Select the <strong>Create project from existing source</strong> radio button.</li>

            <li>Select any API level above Android 1.5.</li>

            <li>In the <strong>Location</strong> field, click <strong>Browse...</strong> and select
            the <code>&lt;ndk-root&gt;/samples/hello-jni</code> directory.</li>

            <li>Click <strong>Finish</strong>.</li>
          </ol>
        </li>

        <li>On the command line:

          <ol type="a">
            <li>Change to the <code>&lt;ndk-root&gt;/samples/hello-jni</code> directory.</li>

            <li>Run the following command to generate a build.xml file:
              <pre class="no-pretty-print">android update project -p . -s</pre>
            </li>
          </ol>
        </li>
      </ul>
    </li>

    <li>Compile the native code using the <code>ndk-build</code> command.
      <pre class="no-pretty-print">
cd &lt;ndk-root&gt;/samples/hello-jni
&lt;ndk_root&gt;/ndk-build
</pre>
    </li>

    <li>Build and install the application as you would a normal Android application. If you are
    using Eclipse, run the application to build and install it on a device. If you are using Ant,
    run the following commands from the project directory:
      <pre class="no-pretty-print">
ant debug
adb install bin/HelloJni-debug.apk
</pre>
    </li>
  </ol>

  <p>When you run the application on the device, the string <code>Hello JNI</code> should appear on
  your device. You can explore the rest of the samples that are located in the
  <code>&lt;ndk-root&gt;/samples</code> directory for more examples on how to use the JNI.</p>



  <h4 id="native-activity">Exploring the native-activity Sample Application</h4>

  <p>The native-activity sample provided with the Android NDK demonstrates how to use the
  android_native_app_glue static library. This static library makes creating a native activity
  easier by providing you with an implementation that handles your callbacks in another thread, so
  you do not have to worry about them blocking your main UI thread. The main parts of the sample
  are described below:</p>

  <ul>
    <li>The familiar basic structure of an Android application (an <code>AndroidManifest.xml</code>
    file, a <code>src/</code> and <code>res</code> directories). The AndroidManifest.xml declares
    that the application is native and specifies the .so file of the native activity. See {@link
    android.app.NativeActivity} for the source or see the
    <code>&lt;ndk_root&gt;/platforms/samples/native-activity/AndroidManifest.xml</code> file.</li>

    <li>A <code>jni/</code> directory contains the native activity, main.c, which uses the
    <code>android_native_app_glue.h</code> interface to implement the activity. The Android.mk that
    describes the native module to the build system also exists here.</li>
  </ul>

  <p>To build this sample application:</p>

  <ol>
    <li>Create a new project in Eclipse from the existing sample source or use the
    <code>android</code> tool to update the project so it generates a build.xml file that you can
    use to build the sample.

      <ul>
        <li>In Eclipse:

          <ol type="a">
            <li>Click <strong>File &gt; New Android Project...</strong></li>

            <li>Select the <strong>Create project from existing source</strong> radio button.</li>

            <li>Select any API level above Android 2.3.</li>

            <li>In the <strong>Location</strong> field, click <strong>Browse...</strong> and select
            the <code>&lt;ndk-root&gt;/samples/native-activity</code> directory.</li>

            <li>Click <strong>Finish</strong>.</li>
          </ol>
        </li>

        <li>On the command line:

          <ol type="a">
            <li>Change to the <code>&lt;ndk-root&gt;/samples/native-activity</code> directory.</li>

            <li>Run the following command to generate a build.xml file:
              <pre class="no-pretty-print">
android update project -p . -s
</pre>
            </li>
          </ol>
        </li>
      </ul>
    </li>

    <li>Compile the native code using the <code>ndk-build</code> command.
      <pre class="no-pretty-print">
cd &lt;ndk-root&gt;/platforms/samples/android-9/samples/native-activity
&lt;ndk_root&gt;/ndk-build
</pre>
    </li>

    <li>Build and install the application as you would a normal Android application. If you are
    using Eclipse, run the application to build and install it on a device. If you are using Ant,
    run the following commands in the project directory, then run the application on the device:
      <pre class="no-pretty-print">
ant debug
adb install bin/NativeActivity-debug.apk
</pre>
    </li>
  </ol>
