Home | History | Annotate | Download | only in docs
      1 <html><body><pre>Android NDK ChangeLog:
      2 
      3 -------------------------------------------------------------------------------
      4 android-ndk-r5b
      5 
      6 This release fixes a few bugs in r5. There are no new features.
      7 
      8 IMPORTANT BUG FIXES:
      9 
     10 - Fix a compiler bug in the arm-linux-androideabi-4.4.3 toolchain.
     11   The previous binary generated invalid thumb instruction sequences when
     12   dealing with signed chars. This problem was first reported on the
     13   android-ndk forum and fixed by the following change in the toolchain
     14   sources:
     15 
     16         https://review.source.android.com/#change,19474
     17 
     18 - docs/CPLUSPLUS-SUPPORT.html: Add missing documentation for the
     19   "gnustl_static" value for APP_STL, that allows you to link against
     20   a static library version of GNU libstdc++.
     21 
     22 - ndk-build: Fix a bug that created inconsistent dependency files when a
     23   compilation error occured on Windows, preventing building properly after
     24   the error was fixed in the source code.
     25 
     26 - ndk-build: Fix a Cygwin-specific bug where using very short paths for
     27   the Android NDK installation or the project path could lead to the
     28   generation of invalid dependency files, making incremental builds
     29   impossible.
     30 
     31 - Fix a typo that prevented the cpufeatures library to work correctly
     32   with the new NDK toolchain.
     33 
     34 - Linux toolchain binaries now run on Ubuntu 8.04 or higher.
     35   More specifically, the r5 binaries did require GLibc 2.11 on the host
     36   system, and refused to run with previous releases due to an ABI mismatch
     37   in the GNU C Library. The r5b binaries are generated with a special
     38   toolchain that instead targets GLibc 2.7 or higher.
     39 
     40 OTHER FIXES &amp; CHANGES:
     41 
     42 - ndk-build: Speed-up the Cygwin build by avoiding calling "cygpath -m"
     43   from GNU Make for each and every source or object file. This was a problem
     44   for users with very large source trees.
     45 
     46   In case this doesn't work properly, define NDK_USE_CYGPATH=1 in your
     47   environment to use 'cygpath -m' as usual.
     48 
     49   Also, if 'cygpath' is not in your path, completely ignore it
     50   (seems to be enough to run the NDK under MSys).
     51 
     52 - ndk-build: Handle installation paths containing spaces when checking
     53   cygwin installation. Before that, the script complained that the user
     54   was using an incorrect version of GNU Make (even if he had the right one).
     55 
     56 - Fixed a typo that prevented several NDK_MODULE_PATH to work properly when
     57   it contained multiple directories separated with ":"
     58 
     59 - prebuilt-common.sh: Make the script check the compiler directly for 64-bit
     60   generated machine code, instead of relying on the host tag. That should
     61   allow the 32-bit toolchain to rebuild properly on Snow Leopard.
     62 
     63 - prebuilt-common.sh: Fix the toolchain rebuild scripts to work when
     64   using a 32-bit host toolchain.
     65 
     66 - &lt;netinet/in.h&gt;: Add missing declaration for INET_ADDRSTRLEN
     67 - &lt;netinet/in6.h&gt;: Add missing declaration for IN6_IS_ADDR_MC_NODELOCAL
     68   and IN6_IS_ADDR_MC_GLOBAL.
     69 
     70 - &lt;asm/byteorder.&gt;: Replaced 'asm' with '__asm__' to allow compilation
     71   with -std=c99. See https://review.source.android.com/#change,20076
     72 
     73 - standalone toolchain: The -fpic flag is now the default for the
     74   arm-linux-androideabi toolchain, instead of -fPIC. This avoids a performance
     75   degradation when compared to the old android-eabi configuration.
     76 
     77   This only affects users of the standalone toolchain. The NDK build script
     78   always enforced -fpic implicitely.
     79 
     80 -------------------------------------------------------------------------------
     81 android-ndk-r5
     82 
     83 IMPORTANT BUG FIXES:
     84 
     85 - Allow dlclose() to properly call static C++ destructors when unloading
     86   a shared library. This requires changes in both the C library and the
     87   build system. IMPORTANT: This feature is only available for API level 9.
     88 
     89 - Fix packaging error for system libraries of level 5 and 8. The libraries
     90   bundled with the NDK and used at link time were not the correct version,
     91   and this prevented linking against certain symbols appropriately.
     92 
     93 - ndk-gdb: do not start activity unless --start or --launch is used.
     94   (the documentation was correct, the implementation wrong)
     95 
     96 - The system headers for all API levels have been cleaned up and will
     97   not provide the declarations of functions that are not available in
     98   the corresponding system libraries.
     99 
    100 IMPORTANT CHANGES:
    101 
    102 - Support for API level 9, (a.k.a. Android 2.3) which adds the following
    103   native features to the platform:
    104 
    105      - Native audio API based on the Khronos Group OpenSL ES&#0153; 1.0.1 Standard.
    106        New headers &lt;SLES/OpenSLES.h&gt; and &lt;SLES/OpenSLES_Android.h&gt;
    107        are provided to allow applications targetting this API level to perform
    108        audio input, output and processing directly from native code.
    109 
    110      - Native activity support, i.e. the ability to build applications that
    111        are coded entirely in C or C++. More precisely, such applications still
    112        run inside a VM, and will have to access most of the platform's features
    113        using JNI (i.e. native code calling VM methods). However, this also
    114        comes with a series of headers and libraries to implement the following
    115        directly from native code:
    116 
    117           - activity lifecycle management.
    118           - user input handling (touch, keyboard, trackball, ...).
    119           - window management (including accessing the pixel buffer).
    120           - sensor listeners (e.g. accelerometer, compass, ...).
    121           - hardware configuration management.
    122           - easily reading assets out of an APK from native code.
    123           - access to the storage manager, a new feature of Android X.X
    124             that allows one to provide Opaque Binary Objects containing
    125             large amounts of data outside of the APK.
    126 
    127        See the documentation in docs/STABLE-APIS.html for more details.
    128 
    129        Note that most of these new features are targetted at game developers.
    130 
    131 - Improved gdbserver binary to allow debugging _threaded_ programs properly
    132   with ndk-gdb (the previous binary could only set breakpoints on the main
    133   thread).
    134 
    135   IMPORTANT: THIS ONLY WORKS IF YOU RUN ON ANDROID 2.3 OR HIGHER.
    136 
    137   The root cause of the problem is a platform bug that was only fixed in
    138   2.3. If you try to debug on a previous platform, the gdbserver binary
    139   will only be able to set breakpoints on the main thread.
    140 
    141   For more information, see the specific section in docs/NDK-GDB.html.
    142 
    143 - Easier debuggable builds: just invoke ndk-build while defining the
    144   NDK_DEBUG variable to 1, as in:
    145 
    146       $NDK/ndk-build NDK_DEBUG=1
    147 
    148   This will have the same result that setting the android:debuggable="true"
    149   in the &lt;application&gt; element of your AndroidManifest.xml file. See the
    150   file docs/NDK-BUILD.html for more details.
    151 
    152   Note that you will need to use the SDKr8 build tools to use this feature
    153   properly!
    154 
    155 - Refresh of system C++ headers:
    156 
    157      - Headers have been moved out of the platform directory hierarchy.
    158        This is to prevent conflicts with other STLs like STLport or the
    159        GNU libstdc++ which provide their own version of the headers, but
    160        does not affect your builds.
    161 
    162      - The list of headers has grown to include the following:
    163 
    164             cassert, cctype, cerrno, cfloat, climits, cmath,
    165             csetjmp, csignal, cstddef, cstdint, cstdio, cstdlib,
    166             cstring, ctime, cwchar, new, typeinfo, utility
    167 
    168     Note that they still correspond to our minimal C++ runtime, no new feature
    169     was introduced here.
    170 
    171 - Support for C++ exceptions and RTTI. See docs/CPLUSPLUS-SUPPORT.html for
    172   all details (and limitations).
    173 
    174 - STLport implementation: Add sources and prebuilt binaries for a port of
    175   the STLport C++ Standard Library (www.stlport.org), and an easy way to use
    176   it at build time by defining APP_STL in your Application.mk. See
    177   docs/APPLICATION-MK.html and docs/CPLUSPLUS-SUPPORT.html for all details.
    178 
    179 - GNU libstdc++ implementation: Available as a static library that you can
    180   select for your application through APP_STL. See docs/CPLUSPLUS-SUPPORT.html
    181   for all details.
    182 
    183 - Add support for prebuilt libraries with the PREBUILT_SHARED_LIBRARY and
    184   PREBUILT_STATIC_LIBRARIES build scripts. See the new documentation
    185   file named docs/PREBUILTS.html for explanations and usage examples.
    186 
    187 - Support for module exports: A module can now define a set of compiler or
    188   linker flags that will be automatically 'imported' by any other module that
    189   depends on it, through LOCAL_STATIC_LIBRARIES or LOCAL_SHARED_LIBRARIES.
    190 
    191   This is achieved with the help of new Android.mk variables named
    192   LOCAL_EXPORT_CFLAGS, LOCAL_EXPORT_CPPFLAGS, LOCAL_EXPORT_C_INCLUDES and
    193   LOCAL_EXPORT_LDLIBS. See docs/ANDROID-MK.html for mode documentation, and
    194   a 'samples/module-exports' for a sample project that uses this.
    195 
    196 - Add support to specify a different file name for generated files, through
    197   the new LOCAL_MODULE_FILENAME variable. See docs/ANDROID-MK.html for an
    198   example.
    199 
    200 - Add support for module imports, through the NDK_MODULE_PATH environment
    201   variable and the new 'import-module' function. This allows you to avoid
    202   hard-coding the path of third-party modules into your project files.
    203 
    204   See docs/IMPORT-MODULE.html for details.
    205 
    206 - Add the content of LOCAL_C_INCLUDES to gdb.setup to make native debugging
    207   easier. Also fixes an issue that prevented clean parallel builds of
    208   debuggable applications to work correctly. This fixes an error message that
    209   said:
    210 
    211       /bin/sh: &lt;project&gt;/libs/armeabi/gdb.setup: No such file or directory
    212 
    213   When doing a "ndk-build -j&lt;number&gt;", with &lt;number&gt; bigger than 1.
    214 
    215 - Add support for assembly-level source filtering. See the description of
    216   LOCAL_FILTER_ASM in docs/ANDROID-MK.html for more details. This can be useful
    217   for certain kinds of obfuscation tasks.
    218 
    219 - This NDK comes with a new toolchain (named arm-linux-androideabi-4.4.3)
    220   which provides many benefits, including:
    221 
    222      - Better code generation than the previous one (gcc-4.4.0)
    223      - On Windows, the binaries do not depend on Cygwin anymore.
    224      - The ability to use it as a stand-alone cross-compiler
    225        (see docs/STANDALONE-TOOLCHAIN.html for all details).
    226 
    227   The binaries for gcc-4.4.0 are still provided for backwards compatibility.
    228   Use NDK_TOOLCHAIN=arm-eabi-4.4.0 in your environment to force its usage.
    229   Note that it is now deprecated and will be removed in a future NDK release.
    230 
    231   IMPORTANT: The old toolchain doesn't properly support exceptions, RTTI,
    232              STLport and GNU libstdc++.
    233 
    234   The binaries for the already-deprecated gcc-4.2.1 have been removed.
    235 
    236 - The 'cpufeatures' library has been updated to provide better architecture
    237   and features detection (including a work-around for buggy ARMv6 kernels
    238   which report an architecture version of 7).
    239 
    240   The library is now also available as an import module, to simplify its
    241   usage in your build scripts. See the updated docs/CPU-FEATURES.html file
    242   for details.
    243 
    244   NOTE: Please update your Android.mk to use module imports as soon as
    245         possible. The location $NDK/source/cpufeatures/ is deprecated
    246         and will be removed in a future NDK release. Avoid referencing
    247         it directly in your build scritps!
    248 
    249 OTHER FIXES AND CHANGES:
    250 
    251 - Reduced the size of generated binaries by using --strip-unneeded
    252   instead of --strip-debug. This gets rid of mor symbol table entries
    253   in release shared libraries and executables, without impacting
    254   runtime execution.
    255 
    256 - Fix bad automatic dependency tracking when using multiple source
    257   sub-directories.
    258 
    259 - The path to system headers is now included last in the compilation command
    260   line. This prevents conflicts with source code that define their own headers
    261   with similar names (e.g. a custom "err.h" was ignored, because the system
    262   &lt;err.h&gt; was used instead).
    263 
    264 - Update documentation for 'my-dir' function to explain that, due to the
    265   way GNU Make works, it really returns the path of the last included
    266   Makefile (instead of the current one). Also provide examples on how
    267   to deal with it.
    268 
    269 - make-release.sh: Now has an --out-dir=&lt;path&gt; option to specify the
    270   output directory where the packages are going to be copied. Also
    271   ensure that generated packages have go+r permissions.
    272 
    273 - ndk-build will now properly escape arguments. This means that something
    274   like this:
    275 
    276      ndk-build  MY_CFLAGS="-DFOO -DBAR"
    277 
    278   will now work correctly.
    279 
    280 - Add --git-http option to download-toolchain-sources.sh and
    281   rebuild-all-prebuilt.sh in order to download sources from
    282   android.git.kernel.org through HTTP.
    283 
    284 - ndk-gdb: properly launch activities for which name does not contain any dot.
    285 
    286 - ndk-gdb: add --delay=&lt;timeout&gt; option to specify a delay in seconds
    287   between activity launch and gdbserver attach. This is needed because certain
    288   activities can take a long time to properly launch. The default delay is
    289   also increased to 2 seconds (instead of 1).
    290 
    291 - build/tools/build-gcc.sh: copy the sysroot to the build directory. This
    292   avoids the generated toolchain binaries from hard-coding host build paths.
    293 
    294 - Platform files are now under $NDK/platforms instead of $NDK/build/platforms
    295 
    296 - Toolchain files are now under $NDK/toolchains instead of
    297   $NDK/build/toolchains and $NDK/build/prebuilt.
    298 
    299 - Release and debug objects are stored under two different directories now
    300   (i.e. obj/local/&lt;abi&gt;/objs and obj/local/&lt;abi&gt;/objs-debug). This
    301   prevents rebuilding *everything* when you switch between these two modes,
    302   which can be a real time-saver for complex projects.
    303 
    304 - Fixed a bug that duplicated the LOCAL_LDFLAGS in the final link command
    305   when LOCAL_ALLOW_UNDEFINED_SYMBOLS was not set to 'true'
    306 
    307 -------------------------------------------------------------------------------
    308 android-ndk-r4b
    309 
    310 This release fixes a few bugs in r4 scripts. There are no new features.
    311 
    312 OTHER FIXES &amp; CHANGES:
    313 
    314 - build/tools/rebuild-all-prebuilt.sh: mktemp expects 'XXXXXX' instead of 'XXX'.
    315   Fix the script (and others in the same directory) to do that properly.
    316 
    317 - ndk-gdb: check the target device's API level, and dump an error message if
    318   it is not at least 8 (Android 2.2 a.k.a. Froyo). Fix script to properly
    319   remove control characters like '\r' from adb shell's output. Also fix
    320   script to work properly with OS X's BSD awk.
    321 
    322 - ndk-build: Make AndroidManifest.xml optional. Now the build scripts will try
    323   to look for jni/Android.mk if no manifest is found. If you don't use this,
    324   you can also define NDK_PROJECT_PATH to point to your tree.
    325 
    326   Also, on Windows, check that a Cygwin-compatible make executable is being
    327   used, and dump a readable help message to solve the issue if this is not
    328   the case.
    329 
    330 - Place generated binaries under $PROJECT_PATH/obj/ instead of
    331   $PROJECT_PATH/bin/ndk/. The 'bin' directory is sometimes cleaned
    332   by the JDT, resulting in the inability to properly load symbol versions
    333   of the shared libraries when running ndk-gdb.
    334 
    335 - Warn when sources with unsupported extensions are used in LOCAL_SRC_FILES.
    336   Previous behaviour was to silently ignore them.
    337 
    338 - Set the optimization mode to 'debug' automatically if the manifest sets
    339   android:debuggable to 'true'. You can override this by using
    340   'APP_OPTIM := release' in your Application.mk, or by adding '-O2' to
    341   your LOCAL_CFLAGS.
    342 
    343   Note that even in release mode, the NDK build scripts will produce
    344   binaries with symbols under obj/local/&lt;abi&gt;/ that will be used for
    345   debugging with gdb. However, the debugger will have a harder time to
    346   print proper local variable values that have been optimized out or
    347   even set breakpoints properly.
    348 
    349 -------------------------------------------------------------------------------
    350 android-ndk-r4
    351 
    352 IMPORTANT BUG FIXES:
    353 
    354 - The &lt;fenv.h&gt; header was not placed in the correct location and could not
    355   be found by normal builds.
    356 
    357 IMPORTANT CHANGES:
    358 
    359 - On Windows, Cygwin 1.7 or higher is now required. The NDK will not
    360   work properly with Cygwin 1.5 which is now officially obsolete
    361   anyway.
    362 
    363 - Simplified build system: You no longer need to run build/host-setup.sh
    364   or modify anything under $NDK_ROOT/apps/. Instead, just invoke the
    365   new 'ndk-build' script from your application's project directory, or
    366   one of its sub-directories.
    367 
    368   See docs/OVERVIEW.html and docs/NDK-BUILD.html for more details.
    369 
    370   NOTE: For compatibility purpose, you can still define projects
    371         through $NDK_ROOT/apps/&lt;name&gt; though.
    372 
    373         However, not that sample applications have moved from
    374         'apps/&lt;name&gt;/project' to 'samples/&lt;name&gt;' and now must
    375         be built with 'ndk-build'. The source code of pre-existing
    376         samples didn't change though.
    377 
    378 - Easy native debugging support when running debuggable applications
    379   on Android 2.2 or higher, through the new 'ndk-gdb' helper script.
    380   See docs/NDK-GDB.html for details.
    381 
    382 - Support for hardware FPU. This is through the new 'armeabi-v7a' ABI
    383   corresponding to ARMv7-a class devices.
    384 
    385   Note that by default, the NDK will still generate machine code for the old
    386   'armeabi' ABI (ARMv5TE based) which is supported by all official Android
    387   system images to date.
    388 
    389   You will need to define APP_ABI in your Application.mk file to change this.
    390   See docs/APPLICATION-MK.html
    391 
    392   More details about ABIs is now available in docs/CPU-ARCH-ABIS.html
    393 
    394 - A small static library named 'cpufeatures' is provided with source code
    395   and can be used at runtime to determine the CPU features supported by the
    396   target device. It should run on all Android platforms, starting from 1.5.
    397 
    398   For more information, see docs/CPU-FEATURES.html
    399 
    400 - Support for the optional ARM Advanced SIMD (a.k.a. NEON) instruction set
    401   extension through the use the LOCAL_ARM_NEON variable in Android.mk, or
    402   the '.neon' suffix when listing source files.
    403 
    404   Neon is an *optional* instruction set extension, and not all Android ARMv7
    405   devices will support it. You will need to use the 'cpufeatures' library to
    406   determine if such code can be used at runtime, and provide alternate code
    407   paths if this is not the case. This is similar to MMX/SSE/3DNow on x86
    408   platforms.
    409 
    410   For more information, see docs/CPU-ARM-NEON.html
    411 
    412 - Added a new sample (hello-neon) to demonstrate usage of 'cpufeatures'
    413   and NEON intrinsics and build support.
    414 
    415 - Added &lt;android/bitmap.h&gt;, a new stable API available from android-8
    416   (a.k.a. Android 2.2) to reliably access the pixel buffer of an
    417   android.graphics.Bitmap object from native code. See docs/STABLE-API.html
    418   and the new sample program under 'samples/bitmap-plasma' for details
    419   and usage example.
    420 
    421 - Support the NX (No Execute) security feature, where special sections
    422   are added to the generated shared libraries to instruct the kernel
    423   that code shall not be executed from the heap and stack by default.
    424 
    425   See docs/ANDROID-MK.html to see how to disable this, plus reference
    426   links for more information.
    427 
    428 OTHER FIXES AND CHANGES:
    429 
    430 - support the .s extension for raw assembly sources (.S is already supported
    431   but the input files are parsed by the C-preprocessor before being sent to
    432   the assembler).
    433 
    434 - build/host-setup.sh has been removed. There is no need for a 'setup' step
    435   when using the NDK for the first time. All host-specific autodetection and
    436   basic tool sanity checking have been moved to the build scripts themselves.
    437 
    438 - APP_MODULES in Application.mk is now optional. If not defined, the NDK
    439   will simply build _all_ the modules that are declared from your Android.mk.
    440 
    441   You can still use APP_MODULES to restrict the set of modules you want to
    442   build. Note that the NDK now computes the transitive dependencies of these
    443   modules for you now. See docs/APPLICATION-MK.html for details.
    444 
    445 - docs/STABLE-APIS.html: Add missing section for Dynamic Linker Library
    446   (libdl.so). It is actually supported by all API levels.
    447 
    448 - build/tools/download-toolchain-sources.sh: Use 'master' branch by default
    449   instead of the 'eclair' one.
    450 
    451 - build-toolchain.sh: Allow ad-hoc patching of toolchain sources when rebuilding
    452   them. This is primarily to ease development. All you need to do is put a patch
    453   under build/tools/toolchain-patches/&lt;foo&gt;/&lt;name&gt;.patch, and it will be applied
    454   with 'patch -p1' into the &lt;foo&gt; directory of the unpacked toolchain sources
    455   before the configure step.
    456 
    457 - docs/CPU-ARCH-ABIS.html: Mention the experimental 'x86' ABI.
    458 
    459 - build/core/mkdeps.sh: Removed obsolete script.
    460 
    461 - the NDK build script now only parses the Application.mk and Android.mk of
    462   the applications listed by APP. The error messages when APP is empty or
    463   malformed have also been improved.
    464 
    465 - removed the annoying 'the mangling of 'va_list' has changed in GCC 4.4'
    466   warning when building with GCC 4.4.0 for ARM.
    467 
    468 - C Library header fixes:
    469 
    470     For all platforms:
    471 
    472         - &lt;arpa/inet.h&gt;: no longer includes &lt;netinet/in6.h&gt;.
    473         - &lt;ctype.h&gt;: better inlining with -ansi option.
    474         - &lt;mntent.h&gt;: add missing include for &lt;stdio.h&gt;.
    475         - &lt;netinet/in.h&gt;: include &lt;netinet/in6.h&gt; and define in6addr_any +
    476           in6addr_loopback.
    477         - &lt;netinet/in6.h&gt;: add IPV6_JOIN_GROUP, IPV6_LEAVE_GROUP,
    478           IN6ADDR_ANY_INIT, ipv6mr_interface.
    479         - &lt;sys/epoll.h&gt;: add missing C++ inclusion guards.
    480         - &lt;sys/resource.h&gt;: add missing rlim_t declaration.
    481         - &lt;sys/system_properties.h&gt;: add missing C++ inclusion guards.
    482         - &lt;time64.h&gt;: add missing C++ inclusion guards.
    483         - &lt;netdb.h&gt;: move h_errno declaration inside C++ inclusion guards.
    484 
    485 - C Library changes:
    486 
    487     For android-8 (a.k.a. Android 2.2):
    488 
    489         - &lt;dlfcn.h&gt;: add DL_info and dladdr().
    490         - &lt;err.h&gt;: add err(), warn() and other variants.
    491         - &lt;regex.h&gt;, &lt;fts.h&gt;, &lt;sys/queue.h&gt;: added
    492         - &lt;pthread.h&gt;: add pthread_condattr_t
    493         - &lt;sched.h&gt;: added proper clone() declaration (and implementation).
    494         - &lt;signal.h&gt;: added killpg().
    495         - &lt;stdio.h&gt;: add fdprintf() and vfdprintf().
    496         - &lt;stdlib.h&gt;: fix ptsname_r() signature in declaration. previous
    497           implementation was broken anyway.
    498         - &lt;unistd.h&gt;: add getusershell(), setusershell(), endusershell(),
    499           ttyname(), ttyname_r(), TEMP_FAILURE_RETRY. Fix usleep() signature
    500           (now returns int).
    501         - &lt;wchar.h&gt;: add fake mbstowcs() and wcstombs().
    502 
    503   More details available under docs/system/libc/CHANGES.html
    504 
    505 -------------------------------------------------------------------------------
    506 android-ndk-r3
    507 
    508 IMPORTANT BUG FIXES:
    509 
    510 - Fix build/host-setup.sh to execute as a Bourne shell script (again)
    511 
    512 - Make target shared libraries portable to systems that don't use the exact
    513   same toolchain. This is needed due to differences in libgcc.a implementations
    514   between gcc 4.2.1 and 4.4.0. This change ensures that generated machine
    515   code doesn't depend on helper functions provided by the Android platform
    516   runtime.
    517 
    518 
    519 IMPORTANT CHANGES:
    520 
    521 - GCC 4.4.0 is now used by default by the NDK. It generates better code than
    522   GCC 4.2.1, which was used in previous releases. However, the compiler's C++
    523   frontend is also a lot more pedantic regarding certain template constructs
    524   and will even refuse to build some of them.
    525 
    526   For this reason, the NDK also comes with GCC 4.2.1 prebuilt binaries, and
    527   you can force its usage by defining NDK_TOOLCHAIN in your environment to
    528   the value 'arm-eabi-4.2.1'. For example:
    529 
    530         export NDK_TOOLCHAIN=arm-eabi-4.2.1
    531         make APP=hello-jni
    532 
    533   Note that only the 'armeabi' ABI is supported by the 4.2.1 toolchain. We
    534   recommend switching to 4.2.1 *only* if you encounter compilation problems
    535   with 4.4.0.
    536 
    537   The 4.2.1 prebuilt binaries will probably be removed from a future release
    538   of the Android NDK, we thus *strongly* invite you to fix your code if such
    539   problems happen.
    540 
    541 - Support for OpenGL ES 2.0. This is through the new 'android-5' platform to
    542   reflect Android 2.0 (previously the Eclair branch). This is merely a copy
    543   of android-4 that also includes headers and libraries for OpenGL ES 2.0.
    544 
    545   See the sample named "hello-gl2" for a *very* basic demonstration. Note that
    546   OpenGL ES 2.0 is currently *not* available from Java, and must be used
    547   through native code exclusively.
    548 
    549   IMPORTANT: OpenGL ES 2.0 is not supported in the Android emulator at this
    550              time. Running/testing any native code that depends on it thus
    551              requires a real device.
    552 
    553 - The NDK build script will now remove installed binaries from the application
    554   project's path before starting the build. This ensures that:
    555 
    556   - if the build fails for some reason, a stale/obsolete file is not left in
    557     your application project tree by mistake.
    558 
    559   - if you change the target ABI, a stale/obsolete file is not left into the
    560     folder corresponding to the old ABI.
    561 
    562 
    563 - Updated the STABLE-APIS.html document to clarify the OpenGL ES 1.0/1.1/2.0
    564   issues regarding specific devices (i.e. 1.0 supported everywhere, 1.1 and
    565   2.0 on specific devices only, need for &lt;uses-feature&gt; tag in manifest).
    566 
    567 
    568 OTHER FIXES AND CHANGES:
    569 
    570 - Actually use the awk version detected by host-setup.sh during the build.
    571 
    572 - Only allow undefined symbols when LOCAL_ALLOW_UNDEFINED_SYMBOLS is set
    573   to 'true', just like the documentation says it works. Also fix a typo
    574   in CLEAR_VARS that prevented this variable from being cleared properly.
    575 
    576 - Simplified build/tools/make-release.sh, the --prebuilt-dir option is
    577   gone, and --help will dump a clearer description of expected options
    578   and input files.
    579 
    580 - Added --prebuilt-ndk=FILE option to build/tools/make-release.sh script to
    581   package a new experimental NDK package archive from the current source tree
    582   plus the toolchain binaries of an existing NDK release package. E.g.:
    583 
    584     build/tools/make-release.sh \
    585        --prebuilt-ndk=/path/to/android-ndk-1.6_r1-linux-x86.zip
    586 
    587   will generate a new NDK package in /tmp/ndk-release that contains the most
    588   up-to-date build scripts, plus the toolchain binaries from 1.6_r1 (which
    589   are not in the git repository).
    590 
    591   Also added the --no-git option to collect all sources from the current
    592   NDK root directory, instead of the list given by 'git ls-files'. This can
    593   be useful if you don't want to checkout the whole 'platform/development'
    594   project from repo and still work on the NDK.
    595 
    596   This change is to help people easily package experimental NDK releases to
    597   test and distribute fixes and improvements.
    598 
    599 - Remove bash-isms from build/tools/build-toolchain.sh. Now it's possible to
    600   build it with the 'dash' shell on Debian-based systems (tested on Ubuntu 8.04)
    601 
    602 - Remove bash-ism from build/tools/build-ndk-sysroot.sh
    603 
    604 - Refresh C library headers for all platforms:
    605 
    606     - make &lt;endian.h&gt; simply include &lt;sys/endian.h&gt;
    607     - make &lt;stdint.h&gt; properly declare 64-bit integer types with a C99 compiler
    608     - add missing &lt;sys/types.h&gt; to &lt;strings.h&gt;
    609     - add GLibc-compatible macro aliases (st_atimensec, st_mtimensec and
    610       st_ctimensec) to &lt;stat.h&gt;
    611     - add missing declaration for tzset() in &lt;time.h&gt;
    612 
    613 - Added build/tools/download-toolchain-sources.sh, a script that allows you
    614   to download the toolchain sources from the official open-source repository
    615   at android.git.kernel.org and nicely package them into a tarball that can
    616   later be used by build/tools/build-toolchain.sh to rebuild the prebuilt
    617   binaries for your system.
    618 
    619 - Updated build/tools/build-toolchain.sh to support the tarballs generated
    620   by download-toolchain-sources.sh with the --package=&lt;file&gt; option. This
    621   also builds both gcc 4.2.1 and 4.4.0, adding support for armeabi-v7a to
    622   gcc 4.4.0.
    623 
    624 -------------------------------------------------------------------------------
    625 android-ndk-1.6_r1
    626 
    627 IMPORTANT BUG FIXES:
    628 
    629 - Fix build/host-setup.sh to:
    630   * execute as a Bourne shell script
    631   * remove unused host gcc dependency
    632   * improve Windows host auto-detection
    633   * add GNU Make version check
    634   * add Nawk/Gawk check
    635   * ensure that the script is run from $NDKROOT as build/host-setup.sh
    636   * add --help, --verbose, --no-awk-check and --no-make-check options
    637 
    638 - Properly add sysroot library search path at build time. This makes a line
    639   in Android.mk like:
    640 
    641      LOCAL_LDLIBS := -lz
    642 
    643   Actually work correctly, instead of having the linker complaining that it
    644   could not find the corresponding libz.so library. Also clear LOCAL_LDLIBS
    645   in $(CLEAR_VARS) script.
    646 
    647 
    648 IMPORTANT CHANGES:
    649 
    650 - The 'sources' directory is gone. The NDK build system now looks for
    651   $(APP_PROJECT_PATH)/jni/Android.mk by default. You can override this with
    652   the new APP_BUILD_SCRIPT variable in Application.mk
    653 
    654   For example, the 'hello-jni' sample uses the following files:
    655 
    656     apps/hello-jni/project/jni/Android.mk
    657     apps/hello-jni/project/jni/hello-jni.c
    658 
    659   The 'apps/&lt;name&gt;' directory is still needed in this release though.
    660 
    661 - Change LOCAL_CFLAGS / LOCAL_CPPFLAGS to work as in the full Android build
    662   system. This means that:
    663 
    664     - LOCAL_CFLAGS   is now used for *both* C and C++ sources  (was only for C)
    665     - LOCAL_CPPFLAGS is now used for C++ sources only (was for both C and C++)
    666     - LOCAL_CXXFLAGS is used like LOCAL_CPPFLAGS but is considered obsolete.
    667       (will disappear in next release)
    668 
    669   Also fixed APP_CPPFLAGS / APP_CFLAGS / APP_CXXFLAGS correspondingly.
    670 
    671 - Rename build/platforms/android-1.5 to build/platforms/android-3 to match
    672   the Android API level instead of the marketing speak.
    673 
    674   Also add a new build/platforms/android-4, and make the build system select
    675   which platform to use based on the content of the project file named
    676   $(APP_PROJECT_PATH)/default.properties.
    677 
    678 - Add OpenGL ES 1.x headers and libraries to the android-4 stable APIs.
    679   (NOTE: they are *not* available for android-3)
    680 
    681   Also provide a small port of the "San Angeles Observation" demo to show
    682   how to make a simple Android application that uses them.
    683 
    684 
    685 OTHER FIXES AND CHANGES
    686 
    687 - Ensure that the __ANDROID__ macro is always defined when building code
    688   with the NDK. Normally, the macro must be defined by the toolchain
    689   automatically to indicate that you're targetting the Android runtime.
    690 
    691   This works for the new arm-linux-androideabi toolchain, but there is
    692   a bug in the way we built the arm-eabi one, so add the flag manually
    693   through the NDK build script for it.
    694 
    695   Note that the ANDROID macro, is now deprecated. While it is still defined
    696   by the NDK, you should modify your code to test against __ANDROID__ instead!
    697 
    698 - Generate thumb binaries by default.
    699 
    700 - Add support for LOCAL_ARM_MODE in Android.mk.
    701 
    702 - Add support for the '.arm' suffix in source file names to force the
    703   compilation of a single source in arm (32-bit) mode.
    704 
    705 - Generate proper unoptimized versions of binaries when APP_OPTIM := debug
    706 
    707 - Add support for LOCAL_C_INCLUDES in Android.mk
    708 
    709 - Fix compilation of assembler files (e.g. foo.S)
    710 
    711 -------------------------------------------------------------------------------
    712 android-ndk-1.5_r1 released.
    713 </pre></body></html>
    714