1789 lines
74 KiB
Plaintext
1789 lines
74 KiB
Plaintext
ndk=true
|
|
|
|
ndk.win_download=android-ndk-r8-windows.zip
|
|
ndk.win_bytes=109928336
|
|
ndk.win_checksum=37b1a2576f28752fcc09e1b9c07e3f14
|
|
|
|
ndk.mac_download=android-ndk-r8-darwin-x86.tar.bz2
|
|
ndk.mac_bytes=96650992
|
|
ndk.mac_checksum=81ce5de731f945692123b377afe0bad9
|
|
|
|
ndk.linux_download=android-ndk-r8-linux-x86.tar.bz2
|
|
ndk.linux_bytes=88310791
|
|
ndk.linux_checksum=5c9afc9695ad67c61f82fbf896803c05
|
|
|
|
page.title=Android NDK
|
|
|
|
@jd:body
|
|
|
|
|
|
<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 that you may reuse existing code libraries written in these
|
|
languages and possibly increased performance.</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—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>
|
|
|
|
<script type="text/javascript">
|
|
function toggleDiv(link) {
|
|
var toggleable = $(link).parent();
|
|
if (toggleable.hasClass("closed")) {
|
|
//$(".toggleme", toggleable).slideDown("fast");
|
|
toggleable.removeClass("closed");
|
|
toggleable.addClass("open");
|
|
$(".toggle-img", toggleable).attr("title", "hide").attr("src", "{@docRoot}assets/images/triangle-opened.png");
|
|
} else {
|
|
//$(".toggleme", toggleable).slideUp("fast");
|
|
toggleable.removeClass("open");
|
|
toggleable.addClass("closed");
|
|
$(".toggle-img", toggleable).attr("title", "show").attr("src", "/assets/images/triangle-closed.png");
|
|
}
|
|
return false;
|
|
}
|
|
</script>
|
|
|
|
<style>
|
|
.toggleable {
|
|
padding: 5px 0 0;
|
|
}
|
|
.toggleme {
|
|
padding: 10px 0 0 20px;
|
|
}
|
|
.toggleable a {
|
|
text-decoration:none;
|
|
}
|
|
.toggleme a {
|
|
text-decoration:underline;
|
|
}
|
|
.toggleable.closed .toggleme {
|
|
display:none;
|
|
}
|
|
#jd-content .toggle-img {
|
|
margin:0 5px 3px 0;
|
|
}
|
|
</style>
|
|
|
|
<div class="toggleable open">
|
|
<a href="#" onclick="return toggleDiv(this)"><img src=
|
|
"{@docRoot}assets/images/triangle-opened.png" class="toggle-img" height="9px" width="9px">
|
|
Android NDK, Revision 8</a> <em>(May 2012)</em>
|
|
|
|
<div class="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<D>(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="toggleable closed">
|
|
<a href="#" onclick="return toggleDiv(this)"><img src=
|
|
"{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px">
|
|
Android NDK, Revision 7c</a> <em>(April 2012)</em>
|
|
|
|
<div class="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="toggleable closed">
|
|
<a href="#" onclick="return toggleDiv(this)"><img src=
|
|
"{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px">
|
|
Android NDK, Revision 7b</a> <em>(February 2012)</em>
|
|
|
|
<div class="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="toggleable closed">
|
|
<a href="#" onclick="return toggleDiv(this)"><img src=
|
|
"{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px">
|
|
Android NDK, Revision 7</a> <em>(November 2011)</em>
|
|
|
|
<div class="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><OMXAL/OpenMAXAL.h></code> and
|
|
<code><OMXAL/OpenMAXAL_Android.h></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/<abi></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="toggleable closed">
|
|
<a href="#" onclick="return toggleDiv(this)"><img src=
|
|
"{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px">
|
|
Android NDK, Revision 6b</a> <em>(August 2011)</em>
|
|
|
|
<div class="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="toggleable closed">
|
|
<a href="#" onclick="return toggleDiv(this)"><img src=
|
|
"{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px">
|
|
Android NDK, Revision 6</a> <em>(July 2011)</em>
|
|
|
|
<div class="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="toggleable closed">
|
|
<a href="#" onclick="return toggleDiv(this)"><img src=
|
|
"{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px">
|
|
Android NDK, Revision 5c</a> <em>(June 2011)</em>
|
|
|
|
<div class="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><android/input.h></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><pthread.h></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="toggleable closed">
|
|
<a href="#"
|
|
onclick="return toggleDiv(this)"><img src="{@docRoot}assets/images/triangle-closed.png"
|
|
class="toggle-img"
|
|
height="9px"
|
|
width="9px" /> Android NDK, Revision 5b</a> <em>(January 2011)</em>
|
|
|
|
<div class="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><netinet/in.h></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><netinet/in6.h></code>.</li>
|
|
<li>'asm' was replaced with '__asm__' in <code><asm/byteorder.h></code> to allow compilation with <code>-std=c99</code>.</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="toggleable closed">
|
|
<a href="#"
|
|
onclick="return toggleDiv(this)"><img src="{@docRoot}assets/images/triangle-closed.png"
|
|
class="toggle-img"
|
|
height="9px"
|
|
width="9px" /> Android NDK, Revision 5</a> <em>(December 2010)</em>
|
|
|
|
<div class="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 && 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="toggleable closed">
|
|
<a href="#"
|
|
onclick="return toggleDiv(this)"><img src="{@docRoot}assets/images/triangle-closed.png"
|
|
class="toggle-img"
|
|
height="9px"
|
|
width="9px" /> Android NDK, Revision 4b</a> <em>(June 2010)</em>
|
|
|
|
<div class="toggleme">
|
|
<dl>
|
|
<dt>NDK r4b notes:</dt>
|
|
|
|
<dd>
|
|
<p>Includes fixes for several issues in the NDK build and debugging scripts — 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 — 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="toggleable closed">
|
|
<a href="#"
|
|
onclick="return toggleDiv(this)"><img src="{@docRoot}assets/images/triangle-closed.png"
|
|
class="toggle-img"
|
|
height="9px"
|
|
width="9px" /> Android NDK, Revision 3</a> <em>(March 2010)</em>
|
|
|
|
<div class="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="toggleable closed">
|
|
<a href="#"
|
|
onclick="return toggleDiv(this)"><img src="{@docRoot}assets/images/triangle-closed.png"
|
|
class="toggle-img"
|
|
height="9px"
|
|
width="9px" /> Android NDK, Revision 2</a> <em>(September 2009)</em>
|
|
|
|
<div class="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="toggleable closed">
|
|
<a href="#"
|
|
onclick="return toggleDiv(this)"><img src="{@docRoot}assets/images/triangle-closed.png"
|
|
class="toggle-img"
|
|
height="9px"
|
|
width="9px" /> Android NDK, Revision 1</a> <em>(June 2009)</em>
|
|
|
|
<div class="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>
|
|
<uses-sdk></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;">
|
|
<manifest>
|
|
<uses-sdk android:minSdkVersion="3" />
|
|
...
|
|
</manifest>
|
|
</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><uses-feature></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;">
|
|
<manifest>
|
|
<!-- 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. -->
|
|
<uses-feature android:glEsVersion="0x00020000" />
|
|
...
|
|
</manifest>
|
|
</pre>
|
|
|
|
<p>For more information, see the <a href=
|
|
"{@docRoot}guide/topics/manifest/uses-feature-element.html"><code><uses-feature></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><uses-sdk
|
|
android:minSdkVersion="8" /></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-<version></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><ndk></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><ndk>/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><project>/jni/...</code></li>
|
|
|
|
<li>Create <code><project>/jni/Android.mk</code> to describe your native sources to the
|
|
NDK build system</li>
|
|
|
|
<li>Optional: Create <code><project>/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 <project>
|
|
<ndk>/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 — 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 — 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><ndk>/docs/</code> directory. Included are these files (partial listing):</p>
|
|
|
|
<ul>
|
|
<li>
|
|
INSTALL.HTML — describes how to install the NDK and configure it for your host
|
|
system</li>
|
|
|
|
<li>OVERVIEW.HTML — provides an overview of the NDK capabilities and usage</li>
|
|
|
|
<li>ANDROID-MK.HTML — describes the use of the Android.mk file, which defines the native
|
|
sources you want to compile</li>
|
|
|
|
<li>APPLICATION-MK.HTML — describes the use of the Application.mk file, which describes
|
|
the native sources required by your Android application</li>
|
|
<li>CPLUSPLUS-SUPPORT.HTML — describes the C++ support provided in the Android NDK</li>
|
|
<li>CPU-ARCH-ABIS.HTML — a description of supported CPU architectures and how to target
|
|
them.</li>
|
|
|
|
<li>CPU-FEATURES.HTML — 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 — a complete list of changes to the NDK across all releases.</li>
|
|
|
|
<li>DEVELOPMENT.HTML — describes how to modify the NDK and generate release packages for it</li>
|
|
|
|
<li>HOWTO.HTML — information about common tasks associated with NDK development</li>
|
|
|
|
<li>IMPORT-MODULE.HTML — describes how to share and reuse modules</li>
|
|
|
|
<li>LICENSES.HTML — information about the various open source licenses that govern the Android NDK</li>
|
|
|
|
<li>NATIVE-ACTIVITY.HTML — describes how to implement native activities</li>
|
|
|
|
<li>NDK-BUILD.HTML — describes the usage of the ndk-build script</li>
|
|
|
|
<li>NDK-GDB.HTML — describes how to use the native code debugger</li>
|
|
|
|
<li>PREBUILTS.HTML — information about how shared and static prebuilt libraries work </li>
|
|
|
|
<li>STANDALONE-TOOLCHAIN.HTML — describes how to use Android NDK toolchain as a standalone
|
|
compiler (still in beta).</li>
|
|
|
|
<li>SYSTEM-ISSUES.HTML — 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 — 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><ndk>/docs/system/libc/</code> directory:</p>
|
|
|
|
<ul>
|
|
<li>OVERVIEW.HTML — 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> — 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> — 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> — 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> — a simple application that renders a triangle using OpenGL ES
|
|
2.0 vertex and fragment shaders.</li>
|
|
|
|
<li><code>hello-neon</code> — 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> — 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> — 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> — 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><ndk>/samples/<name>/</code>
|
|
and their source code can be found under <code><ndk>/samples/<name>/jni/</code>.</p>
|
|
|
|
<p>You can build the shared libraries for the sample apps by going into
|
|
<code><ndk>/samples/<name>/</code> then calling the <code>ndk-build</code> command.
|
|
The generated shared libraries will be located under
|
|
<code><ndk>/samples/<name>/libs/armeabi/</code> for (ARMv5TE machine code) and/or
|
|
<code><ndk>/samples/<name>/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><ndk>/samples/<name>/</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><ndk>/samples/<name>/</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 > 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><ndk-root>/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><ndk-root>/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 <ndk-root>/samples/hello-jni
|
|
<ndk_root>/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><ndk-root>/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><ndk_root>/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 > 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><ndk-root>/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><ndk-root>/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 <ndk-root>/platforms/samples/android-9/samples/native-activity
|
|
<ndk_root>/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>
|