Android NDK ChangeLog: ------------------------------------------------------------------------------- android-ndk-r4b This release fixes a few bugs in r4 scripts. There are no new features. OTHER FIXES & CHANGES: - build/tools/rebuild-all-prebuilt.sh: mktemp expects 'XXXXXX' instead of 'XXX'. Fix the script (and others in the same directory) to do that properly. - ndk-gdb: check the target device's API level, and dump an error message if it is not at least 8 (Android 2.2 a.k.a. Froyo). Fix script to properly remove control characters like '\r' from adb shell's output. Also fix script to work properly with OS X's BSD awk. - ndk-build: Make AndroidManifest.xml optional. Now the build scripts will try to look for jni/Android.mk if no manifest is found. If you don't use this, you can also define NDK_PROJECT_PATH to point to your tree. Also, on Windows, check that a Cygwin-compatible make executable is being used, and dump a readable help message to solve the issue if this is not the case. - Place generated binaries under $PROJECT_PATH/obj/ instead of $PROJECT_PATH/bin/ndk/. The 'bin' directory is sometimes cleaned by the JDT, resulting in the inability to properly load symbol versions of the shared libraries when running ndk-gdb. - Warn when sources with unsupported extensions are used in LOCAL_SRC_FILES. Previous behaviour was to silently ignore them. - Set the optimization mode to 'debug' automatically if the manifest sets android:debuggable to 'true'. You can override this by using 'APP_OPTIM := release' in your Application.mk, or by adding '-O2' to your LOCAL_CFLAGS. Note that even in release mode, the NDK build scripts will produce binaries with symbols under obj/local/<abi>/ that will be used for debugging with gdb. However, the debugger will have a harder time to print proper local variable values that have been optimized out or even set breakpoints properly. ------------------------------------------------------------------------------- android-ndk-r4 IMPORTANT BUG FIXES: - The <fenv.h> header was not placed in the correct location and could not be found by normal builds. IMPORTANT CHANGES: - On Windows, Cygwin 1.7 or higher is now required. The NDK will not work properly with Cygwin 1.5 which is now officially obsolete anyway. - Simplified build system: You no longer need to run build/host-setup.sh or modify anything under $NDK_ROOT/apps/. Instead, just invoke the new 'ndk-build' script from your application's project directory, or one of its sub-directories. See docs/OVERVIEW.TXT and docs/NDK-BUILD.TXT for more details. NOTE: For compatibility purpose, you can still define projects through $NDK_ROOT/apps/<name> though. However, not that sample applications have moved from 'apps/<name>/project' to 'samples/<name>' and now must be built with 'ndk-build'. The source code of pre-existing samples didn't change though. - Easy native debugging support when running debuggable applications on Android 2.2 or higher, through the new 'ndk-gdb' helper script. See docs/NDK-GDB.TXT for details. - Support for hardware FPU. This is through the new 'armeabi-v7a' ABI corresponding to ARMv7-a class devices. Note that by default, the NDK will still generate machine code for the old 'armeabi' ABI (ARMv5TE based) which is supported by all official Android system images to date. You will need to define APP_ABI in your Application.mk file to change this. See docs/APPLICATION-MK.TXT More details about ABIs is now available in docs/CPU-ARCH-ABIS.TXT - A small static library named 'cpufeatures' is provided with source code and can be used at runtime to determine the CPU features supported by the target device. It should run on all Android platforms, starting from 1.5. For more information, see docs/CPU-FEATURES.TXT - Support for the optional ARM Advanced SIMD (a.k.a. NEON) instruction set extension through the use the LOCAL_ARM_NEON variable in Android.mk, or the '.neon' suffix when listing source files. Neon is an *optional* instruction set extension, and not all Android ARMv7 devices will support it. You will need to use the 'cpufeatures' library to determine if such code can be used at runtime, and provide alternate code paths if this is not the case. This is similar to MMX/SSE/3DNow on x86 platforms. For more information, see docs/CPU-ARM-NEON.TXT - Added a new sample (hello-neon) to demonstrate usage of 'cpufeatures' and NEON intrinsics & build support. - Added <android/bitmap.h>, a new stable API available from android-8 (a.k.a. Android 2.2) to reliably access the pixel buffer of an android.graphics.Bitmap object from native code. See docs/STABLE-API.TXT and the new samble program under 'samples/bitmap-plasma' for details and usage example. - Support the NX (No Execute) security feature, where special sections are added to the generated shared libraries to instruct the kernel that code shall not be executed from the heap and stack by default. See docs/ANDROID-MK.TXT to see how to disable this, plus reference links for more information. OTHER FIXES & CHANGES: - support the .s extension for raw assembly sources (.S is already supported but the input files are parsed by the C-preprocessor before being sent to the assembler). - build/host-setup.sh has been removed. There is no need for a 'setup' step when using the NDK for the first time. All host-specific autodetection and basic tool sanity checking have been moved to the build scripts themselves. - APP_MODULES in Application.mk is now optional. If not defined, the NDK will simply build _all_ the modules that are declared from your Android.mk. You can still use APP_MODULES to restrict the set of modules you want to build. Note that the NDK now computes the transitive dependencies of these modules for you now. See docs/APPLICATION-MK.TXT for details. - docs/STABLE-APIS.TXT: Add missing section for Dynamic Linker Library (libdl.so). It is actually supported by all API levels. - build/tools/download-toolchain-sources.sh: Use 'master' branch by default instead of the 'eclair' one. - build-toolchain.sh: Allow ad-hoc patching of toolchain sources when rebuilding them. This is primarily to ease development. All you need to do is put a patch under build/tools/toolchain-patches/<foo>/<name>.patch, and it will be applied with 'patch -p1' into the <foo> directory of the unpacked toolchain sources before the configure step. - docs/CPU-ARCH-ABIS.TXT: Mention the experimental 'x86' ABI. - build/core/mkdeps.sh: Removed obsolete script. - the NDK build script now only parses the Application.mk and Android.mk of the applications listed by APP. The error messages when APP is empty or malformed have also been improved. - removed the annoying 'the mangling of 'va_list' has changed in GCC 4.4' warning when building with GCC 4.4.0 for ARM. - C Library header fixes: For all platforms: - <arpa/inet.h>: no longer includes <netinet/in6.h>. - <ctype.h>: better inlining with -ansi option. - <mntent.h>: add missing include for <stdio.h>. - <netinet/in.h>: include <netinet/in6.h> and define in6addr_any + in6addr_loopback. - <netinet/in6.h>: add IPV6_JOIN_GROUP, IPV6_LEAVE_GROUP, IN6ADDR_ANY_INIT, ipv6mr_interface. - <sys/epoll.h>: add missing C++ inclusion guards. - <sys/resource.h>: add missing rlim_t declaration. - <sys/system_properties.h>: add missing C++ inclusion guards. - <time64.h>: add missing C++ inclusion guards. - <netdb.h>: move h_errno declaration inside C++ inclusion guards. - C Library changes: For android-8 (a.k.a. Android 2.2): - <dlfcn.h>: add DL_info and dladdr(). - <err.h>: add err(), warn() and other variants. - <regex.h>, <fts.h>, <sys/queue.h>: added - <pthread.h>: add pthread_condattr_t - <sched.h>: added proper clone() declaration (and implementation). - <signal.h>: added killpg(). - <stdio.h>: add fdprintf() and vfdprintf(). - <stdlib.h>: fix ptsname_r() signature in declaration. previous implementation was broken anyway. - <unistd.h>: add getusershell(), setusershell(), endusershell(), ttyname(), ttyname_r(), TEMP_FAILURE_RETRY. Fix usleep() signature (now returns int). - <wchar.h>: add fake mbstowcs() and wcstombs(). More details available under docs/system/libc/CHANGES.TXT ------------------------------------------------------------------------------- android-ndk-r3 IMPORTANT BUG FIXES: - Fix build/host-setup.sh to execute as a Bourne shell script (again) - Make target shared libraries portable to systems that don't use the exact same toolchain. This is needed due to differences in libgcc.a implementations between gcc 4.2.1 and 4.4.0. This change ensures that generated machine code doesn't depend on helper functions provided by the Android platform runtime. IMPORTANT CHANGES: - GCC 4.4.0 is now used by default by the NDK. It generates better code than GCC 4.2.1, which was used in previous releases. However, the compiler's C++ frontend is also a lot more pedantic regarding certain template constructs and will even refuse to build some of them. For this reason, the NDK also comes with GCC 4.2.1 prebuilt binaries, and you can force its usage by defining NDK_TOOLCHAIN in your environment to the value 'arm-eabi-4.2.1'. For example: export NDK_TOOLCHAIN=arm-eabi-4.2.1 make APP=hello-jni Note that only the 'armeabi' ABI is supported by the 4.2.1 toolchain. We recommend switching to 4.2.1 *only* if you encounter compilation problems with 4.4.0. The 4.2.1 prebuilt binaries will probably be removed from a future release of the Android NDK, we thus *strongly* invite you to fix your code if such problems happen. - Support for OpenGL ES 2.0. This is through the new 'android-5' platform to reflect Android 2.0 (previously the Eclair branch). This is merely a copy of android-4 that also includes headers and libraries for OpenGL ES 2.0. See the sample named "hello-gl2" for a *very* basic demonstration. Note that OpenGL ES 2.0 is currently *not* available from Java, and must be used through native code exclusively. IMPORTANT: OpenGL ES 2.0 is not supported in the Android emulator at this time. Running/testing any native code that depends on it thus requires a real device. - The NDK build script will now remove installed binaries from the application project's path before starting the build. This ensures that: - if the build fails for some reason, a stale/obsolete file is not left in your application project tree by mistake. - if you change the target ABI, a stale/obsolete file is not left into the folder corresponding to the old ABI. - Updated the STABLE-APIS.TXT document to clarify the OpenGL ES 1.0/1.1/2.0 issues regarding specific devices (i.e. 1.0 supported everywhere, 1.1 and 2.0 on specific devices only, need for <uses-feature> tag in manifest). OTHER FIXES & CHANGES: - Actually use the awk version detected by host-setup.sh during the build. - Only allow undefined symbols when LOCAL_ALLOW_UNDEFINED_SYMBOLS is set to 'true', just like the documentation says it works. Also fix a typo in CLEAR_VARS that prevented this variable from being cleared properly. - Simplified build/tools/make-release.sh, the --prebuilt-dir option is gone, and --help will dump a clearer description of expected options and input files. - Added --prebuilt-ndk=FILE option to build/tools/make-release.sh script to package a new experimental NDK package archive from the current source tree plus the toolchain binaries of an existing NDK release package. E.g.: build/tools/make-release.sh \ --prebuilt-ndk=/path/to/android-ndk-1.6_r1-linux-x86.zip will generate a new NDK package in /tmp/ndk-release that contains the most up-to-date build scripts, plus the toolchain binaries from 1.6_r1 (which are not in the git repository). Also added the --no-git option to collect all sources from the current NDK root directory, instead of the list given by 'git ls-files'. This can be useful if you don't want to checkout the whole 'platform/development' project from repo and still work on the NDK. This change is to help people easily package experimental NDK releases to test and distribute fixes and improvements. - Remove bash-isms from build/tools/build-toolchain.sh. Now it's possible to build it with the 'dash' shell on Debian-based systems (tested on Ubuntu 8.04) - Remove bash-ism from build/tools/build-ndk-sysroot.sh - Refresh C library headers for all platforms: - make <endian.h> simply include <sys/endian.h> - make <stdint.h> properly declare 64-bit integer types with a C99 compiler - add missing <sys/types.h> to <strings.h> - add GLibc-compatible macro aliases (st_atimensec, st_mtimensec and st_ctimensec) to <stat.h> - add missing declaration for tzset() in <time.h> - Added build/tools/download-toolchain-sources.sh, a script that allows you to download the toolchain sources from the official open-source repository at android.git.kernel.org and nicely package them into a tarball that can later be used by build/tools/build-toolchain.sh to rebuild the prebuilt binaries for your system. - Updated build/tools/build-toolchain.sh to support the tarballs generated by download-toolchain-sources.sh with the --package=<file> option. This also builds both gcc 4.2.1 and 4.4.0, adding support for armeabi-v7a to gcc 4.4.0. ------------------------------------------------------------------------------- android-ndk-1.6_r1 IMPORTANT BUG FIXES: - Fix build/host-setup.sh to: * execute as a Bourne shell script * remove unused host gcc dependency * improve Windows host auto-detection * add GNU Make version check * add Nawk/Gawk check * ensure that the script is run from $NDKROOT as build/host-setup.sh * add --help, --verbose, --no-awk-check and --no-make-check options - Properly add sysroot library search path at build time. This makes a line in Android.mk like: LOCAL_LDLIBS := -lz Actually work correctly, instead of having the linker complaining that it could not find the corresponding libz.so library. Also clear LOCAL_LDLIBS in $(CLEAR_VARS) script. IMPORTANT CHANGES: - The 'sources' directory is gone. The NDK build system now looks for $(APP_PROJECT_PATH)/jni/Android.mk by default. You can override this with the new APP_BUILD_SCRIPT variable in Application.mk For example, the 'hello-jni' sample uses the following files: apps/hello-jni/project/jni/Android.mk apps/hello-jni/project/jni/hello-jni.c The 'apps/<name>' directory is still needed in this release though. - Change LOCAL_CFLAGS / LOCAL_CPPFLAGS to work as in the full Android build system. This means that: - LOCAL_CFLAGS is now used for *both* C and C++ sources (was only for C) - LOCAL_CPPFLAGS is now used for C++ sources only (was for both C and C++) - LOCAL_CXXFLAGS is used like LOCAL_CPPFLAGS but is considered obsolete. (will disappear in next release) Also fixed APP_CPPFLAGS / APP_CFLAGS / APP_CXXFLAGS correspondingly. - Rename build/platforms/android-1.5 to build/platforms/android-3 to match the Android API level instead of the marketing speak. Also add a new build/platforms/android-4, and make the build system select which platform to use based on the content of the project file named $(APP_PROJECT_PATH)/default.properties. - Add OpenGL ES 1.x headers and libraries to the android-4 stable APIs. (NOTE: they are *not* available for android-3) Also provide a small port of the "San Angeles Observation" demo to show how to make a simple Android application that uses them. OTHER FIXES & CHANGES - Generate thumb binaries by default. - Add support for LOCAL_ARM_MODE in Android.mk. - Add support for the '.arm' suffix in source file names to force the compilation of a single source in arm (32-bit) mode. - Generate proper unoptimized versions of binaries when APP_OPTIM := debug - Add support for LOCAL_C_INCLUDES in Android.mk - Fix compilation of assembler files (e.g. foo.S) ------------------------------------------------------------------------------- android-ndk-1.5_r1 released.