该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
We released the first version of the Native Development Kit,
a development toolchain for building shared libraries in C or C++ that
can be used in conjunction with Android applications written in the Java
programming language, way back in July of 2009. Since that initial
release we’ve steadily improved support for native code; key features
such as OpenGL ES support, debugging capabilities, multiple ABI support,
and access to bitmaps in native code have arrived with each NDK
revision. The result has been pretty awesome: we’ve seen huge growth in
certain categories of performance-critical applications, particularly 3D
games.
These
types of applications are often impractical via Dalvik due to execution
speed requirements or, more commonly, because they are based on engines
already developed in C or C++. Early on we noted a strong relationship
between the awesomeness of the NDK and the awesomeness of the
applications that it made possible; at the limit of this function is
obviously infinite awesomeness (see graph, right).
With the latest version of the NDK we intend to
further increase the awesomeness of your applications, this time by a
pretty big margin. With NDK r5, we’re introducing new APIs that will
allow you to do more from native code. In fact, with
these new tools, applications targeted at Gingerbread or later can be
implemented entirely in C++; you can now build an entire Android
application without writing a single line of Java.
Of course, access to the regular Android API still
requires Dalvik, and the VM is still present in native applications,
operating behind the scenes. Should you need to do more than the NDK
interfaces provide, you can always invoke Dalvik methods via JNI. But if
you prefer to work exclusively in C++, the NDK r5 will let you build a
main loop like this:
void android_main(struct android_app* state) {
// Make sure glue isn't stripped.
app_dummy();
// loop waiting for stuff to do.
while (1) {
// Read all pending events.
int ident;
int events;
struct android_poll_source* source;
// Read events and draw a frame of animation.
if ((ident = ALooper_pollAll(0, NULL, &events,
(void**)&source)) >= 0) {
// Process this event.
if (source != NULL) {
source->process(state, source);
}
}
// draw a frame of animation
bringTheAwesome();
}
}(For a fully working example, see the native-activity sample in NDK/samples/native-activity and the NativeActivity documentation.)In addition to fully native applications, the latest NDK lets you play sound from native code (via the OpenSL ES API,
an open standard managed by Khronos, which also oversees OpenGL ES),
handle common application events (life cycle, touch and key events, as
well as sensors), control windows directly (including direct access to
the window’s pixel buffer), manage EGL contexts, and read assets
directly out of APK files. The latest NDK also comes with a prebuilt
version of STLport, making it easier to bring STL-reliant applications
to Android. Finally, r5 adds backwards-compatible support for RTTI, C++
exceptions, wchar_t, and includes improved debugging tools. Clearly,
this release represents a large positive ∆awesome.
We worked hard to increase the utility of the NDK
for this release because you guys, the developers who are actually out
there making the awesome applications, told us you needed it. This
release is specifically designed to help game developers continue to
rock; with Gingerbread and the NDK r5, it should now be very easy to
bring games written entirely in C and C++ to Android with minimal
modification. We expect the APIs exposed by r5 to also benefit a wide
range of media applications; access to a native sound buffer and the
ability to write directly to window surfaces makes it much easier for
applications implementing their own audio and video codecs to achieve
maximum performance. In short, this release addresses many of the
requests we’ve received over the last year since the first version of
the NDK was announced.
We think this is pretty awesome and hope you do too.