502 lines
21 KiB
Plaintext
502 lines
21 KiB
Plaintext
page.title=Android NDK Native APIs
|
|
@jd:body
|
|
|
|
<div id="qv-wrapper">
|
|
<div id="qv">
|
|
<h2>On this page</h2>
|
|
|
|
<ol>
|
|
<li><a href="#purpose">Overview</a></li>
|
|
<li><a href="#mnu">Major Native API Updates</a><li>
|
|
<ol>
|
|
<li><a href="#a3">Android API level 3</a></li>
|
|
<li><a href="#a4">Android API level 4</a></li>
|
|
<li><a href="#a5">Android API level 5</a></li>
|
|
<li><a href="#a8">Android API level 8</a></li>
|
|
<li><a href="#a9">Android API level 9</a></li>
|
|
<li><a href="#a14">Android API level 14</a></li>
|
|
<li><a href="#a18">Android API level 18</a></li>
|
|
</ol>
|
|
</ol>
|
|
</div>
|
|
</div>
|
|
|
|
<p>The Android NDK provides a set of native headers and shared library files that has gradually
|
|
increased with successive releases of new Android API levels. This page explains these headers and
|
|
files, and maps them to specific
|
|
<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels"> Android API levels</a>.
|
|
</p>
|
|
|
|
<h2 id="purpose">Overview</h2>
|
|
<p>There are two basic steps to enable your app to use the libraries that the NDK provides:
|
|
</p>
|
|
|
|
<ol type ="1">
|
|
<li>Include in your code the headers associated with the libraries you wish to use.</li>
|
|
|
|
<li>Tell the build system that your native module needs to link against the libraries at load time.
|
|
For example, to link against {@code /system/lib/libfoo.so}, add the following line to your
|
|
<a href="{@docRoot}ndk/guides/android_mk.html">Android.mk</a> file:</li>
|
|
|
|
<pre>
|
|
LOCAL_LDLIBS := -lfoo
|
|
</pre>
|
|
|
|
<p>To list multiple libraries, use a space as a delimiter. For more information about using the
|
|
{@code LOCAL_LDLIBS} variable, see <a href="{@docRoot}ndk/guides/android_mk.html">Android.mk</a>.
|
|
</p>
|
|
|
|
</ol>
|
|
|
|
<p>For all API levels, the build system automatically links the standard C libraries, the
|
|
standard C++ libraries, real-time extensions, and {@code pthread}; you do not need
|
|
to include them when defining your {@code LOCAL_LDLIBS} variable. For more information about
|
|
the C and C++ libraries, see <a href="#a3">Android API level 3</a>.</p>
|
|
|
|
<p>The NDK often provides new headers and libraries for new Android releases. These files reside
|
|
under {@code $NDK/platforms/android-<level>/<abi>/usr/include}. When the NDK does not
|
|
have a specific new group of headers and libraries for an Android API level, it means that
|
|
an app targeting that level should use the most recently released NDK assets. For example,
|
|
there was no new release of NDK headers or libraries for Android API levels 6 and 7. Therefore,
|
|
when developing an app targeting Android API level 7, you should use the headers and libraries
|
|
located under {@code android-5/}.</p>
|
|
|
|
<p>Table 1 shows the correspondence between NDK-supported API levels and Android releases.</p>
|
|
|
|
<p class="table-caption" id="table1">
|
|
<strong>Table 1.</strong> NDK-supported API levels and corresponding Android releases.</p>
|
|
<table>
|
|
<tr>
|
|
<th scope="col">NDK-supported API level</th>
|
|
<th scope="col">Android release</th>
|
|
</tr>
|
|
<tr>
|
|
<td>3</td>
|
|
<td>1.5</td>
|
|
</tr>
|
|
<tr>
|
|
<td>4</td>
|
|
<td>1.6</td>
|
|
</tr>
|
|
<tr>
|
|
<td>5</td>
|
|
<td>2.0</td>
|
|
</tr>
|
|
<tr>
|
|
<td>8</td>
|
|
<td>2.2</td>
|
|
</tr>
|
|
<tr>
|
|
<td>9</td>
|
|
<td>2.3 through 3.0.x</td>
|
|
</tr>
|
|
<tr>
|
|
<td>12</td>
|
|
<td>3.1.x</td>
|
|
</tr>
|
|
<tr>
|
|
<td>13</td>
|
|
<td>3.2</td>
|
|
</tr>
|
|
<tr>
|
|
<td>14</td>
|
|
<td>4.0 through 4.0.2</td>
|
|
</tr>
|
|
<tr>
|
|
<td>15</td>
|
|
<td>4.0.3 and 4.0.4</td>
|
|
</tr>
|
|
<tr>
|
|
<td>16</td>
|
|
<td>4.1 and 4.1.1</td>
|
|
</tr>
|
|
<tr>
|
|
<td>17</td>
|
|
<td>4.2 and 4.2.2</td>
|
|
</tr>
|
|
<tr>
|
|
<td>18</td>
|
|
<td>4.3</td>
|
|
</tr>
|
|
<tr>
|
|
<td>19</td>
|
|
<td>4.4</td>
|
|
</tr>
|
|
<tr>
|
|
<td>21</td>
|
|
<td>4.4W and 5.0</td>
|
|
</table>
|
|
|
|
<p>Each new release of NDK headers and libraries for a given Android API level is cumulative; you
|
|
are nearly always safe if you use the most recently released headers when building your app. For
|
|
example, you can use the NDK headers for Android API level 21 for an app targeting API level 16. By doing so, however, you increase your APK's footprint.</p>
|
|
|
|
<p>
|
|
For more information about Android API levels, see
|
|
<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">What is API Level?</a>.
|
|
</p>
|
|
|
|
<h2 id="mnu">Major Native API Updates</h2>
|
|
|
|
<h3 id="a3">Android API level 3</h3>
|
|
<p>The NDK provides the following APIs for developing native code that runs on Android 1.5 system
|
|
images and above.</p>
|
|
|
|
<h4>C library</h4>
|
|
<p>The C library headers for Android 1.5 are available through their standard names, such as
|
|
{@code stdlib.h} and {@code stdio.h}. If a header is missing at build time, it's because the
|
|
header is not available on the 1.5 system image.</p>
|
|
|
|
<h4>C++ library</h4>
|
|
<p>An <em>extremely</em> minimal C++ support API is available. For more
|
|
information on C++ library support, see
|
|
<a href="{@docRoot}ndk/guides/cpp-support.html">C++ Library Support</a>.</p>
|
|
|
|
<h4>Android-specific log support</h4>
|
|
|
|
<p>{@code <android/log.h>} contains various definitions that an app can use to send log
|
|
messages to the kernel from native code. For more information about these definitions, see the
|
|
comments in {@code $NDK/platforms/android-3/arch-arm/usr/include/android/log.h}, where {@code $NDK}
|
|
is the root of your NDK installation.</p>
|
|
|
|
<p>You can write your own wrapper macros to access this functionality. If you wish to perform
|
|
logging, your native module should link to {@code /system/lib/liblog.so}. Implement this
|
|
linking by including the following line in your <a href="{@docRoot}ndk/guides/android_mk.html">
|
|
{@code Android.mk}</a> file:</p>
|
|
|
|
<pre>
|
|
LOCAL_LDLIBS := -llog
|
|
</pre>
|
|
|
|
<h4>ZLib compression library</h4>
|
|
<p>You can use the <a href="http://www.zlib.net/manual.html">Zlib compression library</a>
|
|
by including {@code zlib.h} and {@code zconf.h}. You must also link your native
|
|
module against {@code /system/lib/libz.so} by including the following line in your
|
|
<a href="{@docRoot}ndk/guides/android_mk.html">{@code Android.mk}</a> file:</p>
|
|
|
|
<pre>
|
|
LOCAL_LDLIBS := -lz
|
|
</pre>
|
|
|
|
<h4>Dynamic linker library</h4>
|
|
<p>You can access the Android dynamic linker's {@code dlopen()}, {@code dlsym()}, and
|
|
{@code dlclose()} functions by including {@code dlfcn.h}. You must also link against
|
|
{@code /system/lib/libdl.so} by including the following line in your
|
|
<a href="{@docRoot}ndk/guides/android_mk.html">{@code Android.mk}</a> file:</p>
|
|
|
|
<pre>
|
|
LOCAL_LDLIBS := -ldl
|
|
</pre>
|
|
|
|
<h3 id="a4">Android API level 4</h3>
|
|
<p>The NDK provides the following APIs for developing native code that runs on Android 1.6 system
|
|
images and above.</p>
|
|
|
|
<h4>OpenGL ES 1.x Library</h4>
|
|
<p>The standard OpenGL ES headers {@code gl.h} and {@code glext.h} contain
|
|
the declarations necessary for performing OpenGL ES 1.x rendering calls from native code.</p>
|
|
|
|
<p>To use these headers, link your native module to {@code /system/lib/libGLESv1_CM.so} by
|
|
including the following line in your <a href="{@docRoot}ndk/guides/android_mk.html">
|
|
{@code Android.mk}</a> file:</p>
|
|
</p>
|
|
|
|
<pre>
|
|
LOCAL_LDLIBS := -lGLESv1_CM
|
|
</pre>
|
|
<p>All Android-based devices support OpenGL ES 1.0, because Android provides an Open GL 1.0-capable
|
|
software renderer that can be used on devices without GPUs.</p>
|
|
<p>Only Android devices that have the necessary GPU fully support OpenGL ES 1.1. An app can
|
|
query the OpenGL ES version string and extension string to determine whether the current device
|
|
supports the features it needs. For information on how to perform this query, see the description of
|
|
<a href="http://www.khronos.org/opengles/sdk/1.1/docs/man/glGetString.xml">{@code glGetString()}</a>
|
|
in the OpenGL specification.</p>
|
|
|
|
<p>Additionally, you must put a
|
|
<a href="http://developer.android.com/guide/topics/manifest/uses-feature-element.html">{@code
|
|
<uses-feature>}</a> tag in your manifest file to indicate the version of
|
|
<a href="http://developer.android.com/guide/topics/graphics/opengl.html#manifest">OpenGL ES</a>
|
|
that your application requires.</p>
|
|
|
|
<p>The <a href="#egl">EGL APIs</a> are only available starting from API level 9. You can, however,
|
|
use the VM to perform some of the operations that you would get from those APIS. These operations
|
|
include surface creation and flipping. For an example of how to use {@code GLSurfaceView}, see
|
|
<a href="http://android-developers.blogspot.com/2009/04/introducing-glsurfaceview.html">
|
|
Introducing GLSurfaceView</a>.</p>
|
|
|
|
<p>The san-angeles sample application provides an example of how to perform these operations,
|
|
rendering each frame in native code. This sample is a small Android port of the excellent
|
|
<a href="http://jet.ro/visuals/san-angeles-observation/">San Angeles Observation</a> demo
|
|
program.</p>
|
|
|
|
<h3 id="a5">Android API level 5</h3>
|
|
<p>The NDK provides the following APIs for developing native code that runs on Android 2.0 system
|
|
images and above.</p>
|
|
|
|
<h4>OpenGL ES 2.0 library:</h4>
|
|
<p>The standard OpenGL ES 2.0 headers {@code <GLES2/gl2.h>} and {@code <GLES2/gl2ext.h>}
|
|
contain the declarations needed for performing OpenGL ES 2.0 rendering calls from native code.
|
|
These rendering calls provide the ability to use the GLSL language to define and use vertex and
|
|
fragment shaders.</p>
|
|
|
|
<p>To use OpenGL ES 2.0, link your native module to {@code /system/lib/libGLESv2.so} by
|
|
including the following line in your <a href="{@docRoot}ndk/guides/android_mk.html">
|
|
{@code Android.mk}</a> file:</p>
|
|
|
|
<pre>
|
|
LOCAL_LDLIBS := -lGLESv2
|
|
</pre>
|
|
|
|
<p>Not all devices support OpenGL ES 2.0. An app can query the OpenGL
|
|
ES version string and extension string to determine whether the current device
|
|
supports the features it needs. For information on how to perform this query, see the description of
|
|
<a href="https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetString.xml">
|
|
{@code glGetString()}</a> in the OpenGL specification.</p>
|
|
|
|
<p>Additionally, you must put a
|
|
<a href="http://developer.android.com/guide/topics/manifest/uses-feature-element.html">{@code
|
|
<uses-feature>}</a> tag in your manifest file to indicate which version of OpenGL ES your
|
|
application requires. For more information about the OpenGL ES settings for
|
|
{@code <uses-feature>}, see
|
|
<a href="http://developer.android.com/guide/topics/graphics/opengl.html#manifest">OpenGL ES</a>.</p>
|
|
|
|
<p>The hello-gl2 sample application provies a basic example of how to use OpenGL ES 2.0 with the
|
|
NDK.</p>
|
|
|
|
<p>The <a href="#egl">EGL APIs</a> are only available starting from API level 9. You can, however,
|
|
use the VM to perform some of the operations that you would get from those APIs. These operations
|
|
include surface creation and flipping. For an example of how to use {@code GLSurfaceView}, see
|
|
<a href="http://android-developers.blogspot.com/2009/04/introducing-glsurfaceview.html">
|
|
Introducing GLSurfaceView</a>.</p>
|
|
|
|
<p class="note"><strong>Note:</strong> The Android emulator does not support OpenGL ES 2.0 hardware
|
|
emulation. Running and testing code that uses this API requires a real device with hardware that can
|
|
support OpenGL ES 2.0.</p>
|
|
|
|
<h3 id="a8">Android API level 8</h3>
|
|
<p>The NDK provides the following APIs for developing native code that runs on Android 2.2 system
|
|
images and above.</p>
|
|
|
|
<h4>jnigraphics</h4>
|
|
<p>The {@code jnigraphics} library exposes a C-based interface that allows native code to reliably access
|
|
the pixel buffers of Java bitmap objects. The workflow for using {@code jnigraphics} is as follows:
|
|
</p>
|
|
|
|
<ol type="1">
|
|
<li>Use {@code AndroidBitmap_getInfo()} to retrieve information from JNI, such as width and height,
|
|
about a given bitmap handle.</li>
|
|
|
|
<li>Use {@code AndroidBitmap_lockPixels()} to lock the pixel buffer and retrieve a pointer to it.
|
|
Doing so ensures that the pixels do not move until the app calls
|
|
{@code AndroidBitmap_unlockPixels()}.</li>
|
|
|
|
<li>In native code, modify the pixel buffer as appropriate for its pixel format, width, and other
|
|
characteristics.</li>
|
|
|
|
<li>Call {@code AndroidBitmap_unlockPixels()} to unlock the buffer.</li>
|
|
</ol>
|
|
|
|
<p>To use {@code jnigraphics}, include the {@code <bitmap.h>} header in your source code, and
|
|
link against {@code jnigraphics} by including the following line in your
|
|
<a href="{@docRoot}ndk/guides/android_mk.html">{@code Android.mk}</a> file:</p>
|
|
|
|
<pre>
|
|
LOCAL_LDLIBS += -ljnigraphics
|
|
</pre>
|
|
|
|
<p>Additional details about this feature are in the comments of the {@code bitmap.h} file.
|
|
|
|
<h3 id="a9">Android API level 9</h3>
|
|
<p>The NDK provides the following APIs for developing native code that runs on Android 2.3 system
|
|
images and above.</p>
|
|
|
|
<h4 id="egl"> EGL</h4>
|
|
<p>EGL provides a native platform interface for allocating and managing OpenGLES surfaces.
|
|
For more information about its features, see <a href="http://www.khronos.org/egl">
|
|
EGL Native Platform Interface</a>.</p>
|
|
|
|
<p>EGL allows you to perform the following operations from native code:</p>
|
|
|
|
<ul>
|
|
<li>List supported EGL configurations.</li>
|
|
<li>Allocate and release OpenGLES surfaces.</li>
|
|
<li>Swap or flip surfaces.</li>
|
|
</ul>
|
|
|
|
<p>The following headers provide EGL functionality:</p>
|
|
<ul>
|
|
<li>{@code EGL/egl.h}: the main EGL API definitions.</li>
|
|
<li>{@code EGL/eglext.h}: EGL extension-related definitions.</li>
|
|
</ul>
|
|
|
|
<p>To link against the system's EGL library, add the following line to your
|
|
<a href="{@docRoot}ndk/guides/android_mk.html">{@code Android.mk}</a> file:</p>
|
|
|
|
<pre>
|
|
LOCAL_LDLIBS += -lEGL
|
|
</pre>
|
|
|
|
<h4 id="osl">OpenSL ES</h4>
|
|
<p>Android native audio handling is based on the Khronos Group OpenSL ES 1.0.1 API.</p>
|
|
|
|
<p>The standard OpenSL ES headers {@code OpenSLES.h} and {@code OpenSLES_Platform.h} contain
|
|
the declarations necessary for performing audio input and output from the native side of Android.
|
|
The NDK distribution of the OpenSL ES also provides Android-specific extensions. For information
|
|
about these extensions, see the comments in {@code OpenSLES_Android.h} and
|
|
{@code OpenSLES_AndroidConfiguration.h}.</p>
|
|
|
|
|
|
<p>The system library {@code libOpenSLES.so} implements the public native audio functions. Link
|
|
against it by adding the following line to your <a href="{@docRoot}ndk/guides/android_mk.html">
|
|
{@code Android.mk}</a> file:</p>
|
|
|
|
<pre>
|
|
LOCAL_LDLIBS += -lOpenSLES
|
|
</pre>
|
|
|
|
<p>For more information about the OpenSL ES API, refer to
|
|
{@code $NDK/docs/Additional_library_docs/opensles/index.html}, where {@code $NDK} is your NDK
|
|
installation root directory.</p>
|
|
|
|
<h4>Android native application APIs</h4>
|
|
<p>Starting from API level 9, you can write an entire Android app with native code, without using
|
|
any Java.</p>
|
|
|
|
<p class="note"><strong>Note: </strong>Writing your app in native code is not, in itself, enough
|
|
for your app to run in the VM. Moreover, your app must still access most features of the Android
|
|
platform via JNI.</p>
|
|
|
|
<p>This release provides the following native headers:</p>
|
|
<ul>
|
|
<li>{@code <native_activity.h>}</li>
|
|
<li>{@code <looper.h>}</li>
|
|
<li>{@code <input.h>}</li>
|
|
<li>{@code <keycodes.h>}</li>
|
|
<li>{@code <sensor.h>}</li>
|
|
<li>{@code <rect.h>}</li>
|
|
<li>{@code <window.h>}</li>
|
|
<li>{@code <native_window.h>}</li>
|
|
<li>{@code <native_window_jni.h>}</li>
|
|
<li>{@code <configuration.h>}</li>
|
|
<li>{@code <asset_manager.h>}</li>
|
|
<li>{@code <storage_manager.h>}</li>
|
|
<li>{@code <obb.h>}</li>
|
|
</ul>
|
|
|
|
<p>For more information about these headers, see the
|
|
<a href="{@docRoot}ndk/reference/index.html">NDK API Reference documentation</a>, as well as
|
|
the comments in the headers, themselves. Also, for more information about the larger topic of
|
|
writing native apps, see <a href="{@docRoot}ndk/guides/concepts.html#naa">
|
|
Native Activities and Applications</a>.
|
|
|
|
<p>When you include one or more of these headers, you must also link against the
|
|
{@code libandroid.so} library. To link against {@code libandroid.so}, include the following line in
|
|
your <a href="{@docRoot}ndk/guides/android_mk.html"> {@code Android.mk}</a> file:</p>
|
|
|
|
<pre>
|
|
LOCAL_LDLIBS += -landroid
|
|
</pre>
|
|
|
|
<h3 id="a14">Android API level 14</h3>
|
|
<p>The NDK provides the following APIs for developing native code that runs on Android 4.0 system
|
|
images and above.</p>
|
|
|
|
<h4>OpenMAX AL</h4>
|
|
<p>Android native multimedia handling is based on Khronos Group OpenMAX AL 1.0.1 API.</p>
|
|
<p>The standard OpenMAX AL headers {@code <OMXAL/OpenMAXAL.h>} and
|
|
{@code <OMXAL/OpenMAXAL_Platform.h>} contain the declarations necessary for performing
|
|
multimedia output from the native side of Android.</p>
|
|
|
|
<p>The NDK distribution of OpenMAX AL also provides Android-specific extensions. For information
|
|
about these extensions, see the comments in {@code OpenMAXAL_Android.h}.</p>
|
|
|
|
<p>The system library {@code libOpenMAXAL.so} implements the public native multimedia functions.
|
|
To link against this library, include the following line in your
|
|
<a href="{@docRoot}ndk/guides/android_mk.html"> {@code Android.mk}</a> file:</p>
|
|
|
|
<pre class="fragment"> LOCAL_LDLIBS += -lOpenMAXAL
|
|
</pre><p>For more information about this topic, see {@code $NDK/docs/openmaxal/index.html},
|
|
where {@code $NDK} is the root directory of your NDK installation.</p>
|
|
|
|
<h4>OpenSL ES</h4>
|
|
<p>OpenSL ES support for this Android API level adds PCM support. For more information about
|
|
OpenSL ES support in the NDK, see <a href="#osl">OpenSL ES</a>.</p>
|
|
|
|
<h3 id="a18">Android API level 18</h3>
|
|
<p>The NDK provides the following APIs for developing native code that runs on Android 4.3 system
|
|
images and above.</p>
|
|
|
|
<h4>OpenGL ES 3.0</h4>
|
|
|
|
<p>The standard OpenGL ES 3.0 headers {@code gl3.h} and {@code gl3ext.h} contain the declarations
|
|
needed for performing OpenGL ES 3.0 rendering calls from native code. These rendering calls provide
|
|
the ability to use the GLSL language to define and use vertex and fragment shaders.
|
|
|
|
<p>To use OpenGL ES 3.0, link your native module against {@code /system/lib/libGLESv3.so} by
|
|
including the following line in your <a href="{@docRoot}ndk/guides/android_mk.html">
|
|
{@code Android.mk}</a> file:</p>
|
|
|
|
<pre>
|
|
LOCAL_LDLIBS := -lGLESv3
|
|
</pre>
|
|
|
|
<p>Not all devices support OpenGL ES 3.0. An app can query the OpenGL
|
|
ES version string and extension string to determine whether the current device
|
|
supports the features it needs. For information on how to perform this query, see the description of
|
|
<a href="https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetString.xml">
|
|
{@code glGetString()}</a> in the OpenGL specification.</p>
|
|
|
|
<p>Additionally, you must put a
|
|
<a href="http://developer.android.com/guide/topics/manifest/uses-feature-element.html">{@code
|
|
<uses-feature>}</a> tag in your manifest file to indicate which version of OpenGL ES your
|
|
application requires. For more information about the OpenGL ES settings for
|
|
{@code <uses-feature>}, see
|
|
<a href="http://developer.android.com/guide/topics/graphics/opengl.html#manifest">OpenGL ES</a>.</p>
|
|
|
|
<p>The gles3jni sample application provides a basic example of how to use OpenGL ES 3.0 with the
|
|
NDK.</p>
|
|
|
|
<p class="note"><strong>Note:</strong> The Android emulator does not support OpenGL ES 3.0 hardware
|
|
emulation. Running and testing code that uses this API requires a real device with hardware that can
|
|
support OpenGL ES 3.0.</p>
|
|
|
|
|
|
<h3 id="a18">Android API level 21</h3>
|
|
<p>The NDK provides the following APIs for developing native code that runs on Android 4.3 system
|
|
images and above.</p>
|
|
|
|
<h4>OpenGL ES 3.1</h4>
|
|
|
|
<p>The standard OpenGL ES 3.1 headers {@code gl31.h} and {@code gl3ext.h} contain the declarations
|
|
needed for performing OpenGL ES 3.1 rendering calls from native code. These rendering calls provide
|
|
the ability to use the GLSL language to define and use vertex and fragment shaders.
|
|
|
|
<p>To use OpenGL ES 3.1, link your native module against {@code /system/lib/libGLESv3.so} by
|
|
including the following line in your <a href="{@docRoot}ndk/guides/android_mk.html">
|
|
{@code Android.mk}</a> file:</p>
|
|
|
|
<pre>
|
|
LOCAL_LDLIBS := -lGLESv3
|
|
</pre>
|
|
|
|
<p>Not all devices support OpenGL ES 3.1. An app can query the OpenGL
|
|
ES version string and extension string to determine whether the current device
|
|
supports the features it needs. For information on how to perform this query, see the description of
|
|
<a href="https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetString.xml">
|
|
{@code glGetString()}</a> in the OpenGL specification.</p>
|
|
|
|
<p>Additionally, you must put a
|
|
<a href="http://developer.android.com/guide/topics/manifest/uses-feature-element.html">{@code
|
|
<uses-feature>}</a> tag in your manifest file to indicate which version of OpenGL ES your
|
|
application requires. For more information about the OpenGL ES settings for
|
|
{@code <uses-feature>}, see
|
|
<a href="http://developer.android.com/guide/topics/graphics/opengl.html#manifest">OpenGL ES</a>.</p>
|
|
|
|
<p>The gles3jni sample application provides a basic example of how to use OpenGL ES 3.1 with the
|
|
NDK.</p>
|
|
|
|
<p class="note"><strong>Note:</strong> The Android emulator does not support OpenGL ES 3.1 hardware
|
|
emulation. Running and testing code that uses this API requires a real device with hardware that can
|
|
support OpenGL ES 3.1.</p>
|
|
|