Ensures that no stale/obsolete shared libraries are left in the
application's project path before the build.
Also fix a minor typo that made the ABI selection process not
work properly in certain cases.
This patch modifies the NDK build scripts to support the 'armeabi-v7a' ABI.
(For the record, it corresponds to Thumb-2 + FPU support, to speed up native
code on certain devices like the Droid).
To build for this ABI, the Application.mk file should use a line like:
APP_ABI := armeabi-v7a
It is also possible to build for both 'armeabi' and 'armeabi-v7a' by using:
APP_ABI := armeabi armeabi-v7a
This will result in the generation of two distinct shared libraries that both
will be copied to the final application package.
This is dependent on having GCC 4.4.0 prebuilt binaries under
build/prebuilt/<host>/arm-eabi-4.4.0, since gcc 4.2.1 does not support
this new ABI.
Note that this also changes the NDK to use gcc 4.4.0 by default, unless
the user defines NDK_TOOLCHAIN to 'arm-eabi-4.2.1' in its environment to
switch back to the previous one.
E.g. if an application's default.properties targets android-10
then the build system will default it to the highest supported
API level found in build/platforms (e.g. android-4 currently).
This gets rid of the 'sources' directory and allows all sources
of a given Android application to be in the same directory tree
without using a symlink trick.
Note that apps/<name>/Application.mk is still required though.
A later release of the NDK will get rid of it too, but the change
is too drastic for the upcoming release.
The change moves various source files from sources into their
app/<name>/project/jni directory as well.
The whole documentation is updated to reflect the change.
- generate thumb code by default (type forced ARM generation)
- make the generation of unoptimized binaries with APP_OPTIM := debug actually work
(the -O0 -g flags were placed before the -Os -mthumb flags for thumb binaries)
- factor common code from build-executable/shared-library/static-library into build-binary.mk
and install-binary.mk
- properly add a -L$(SYSROOT)/usr/lib line to make LOCAL_LDLIBS := -lz work as advertized
(in build-binary.mk)
- add a few missing variables from clear-vars.mk
- run as bash script (since Debian's new 'dash' shell doesn't support it)
- remove obsolete host GCC requirement
- improve Windows support by using better heuristics for the executable suffix
- better NDK root directory auto-detection (avoids the need to define ANDROID_NDK_ROOT on some installs)
The latter had the effect of removing the benefit of optimization settings, i.e. a typical compiler
command would look like:
<toolchain-compiler> .... -Isources/<module-path> -I -O2 -g
The "-I -O2" was interpreted literally as "search in '-O2' directory, and the optimization was
never set to 2 (or 0 in case of debug mode).
* changes:
Force --no-undefined at link time to generate an error when trying to generate a shared library that references undefined symbols. This can be overriden by defining LOCAL_ALLOW_UNDEFINED_SYMBOLS in your Android.mk to 'true'