I am encountering a different behavior between OS X and Android:
foo
in my shared library,
Android dynamic linker does in fact support weak symbols. The problem is this particular case is that library is compiled with -Bsymbolic (to check this run "readelf -d libshared.so").
The work around this is to use '-Wl,-shared' instead of '-shared' when linking the library.
Please see https://code.google.com/p/android/issues/detail?id=68956 for details and workaround.