Я настроил вещи для компиляции пространственных объектов в виде разделяемой библиотеки, а геос и проекций - в виде статических библиотек (статически связанных с пространственными объектами)Они также нуждаются в libiconv (AFAIK), поскольку библиотека NDK libc не предоставляет iconv.h.
К счастью, все они LGPL или совместимы, поэтому их безопасно включать в ваше приложение, не опасаясь проблем с лицензией.
ПРИМЕЧАНИЕ. Сначала необходимо запустить «./configure» внутри libiconv и libspatialite, чтобы сгенерировать заголовки.Для этого требуется установить 'autoconf'.
Также обратите внимание, что это в Linux (Ubuntu 10.10).
GEOS не может быть встроена и подключена прямо сейчас, поскольку поддержка C ++ для STL полностьюотсутствует в НДК.Если кто-то может найти решение для построения GEOS, дайте нам знать!Я не уверен, насколько важно иметь расширенные функции в GEOS, но он экономит более 1 МБ размера библиотеки, оставляя его в соответствии с README.
Вот мой основной «jni / Android.mk».Это может быть разделено на несколько файлов, но я не стал беспокоиться, потому что я ленивый: -)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := iconv
LOCAL_CFLAGS := \
-Wno-multichar \
-D_ANDROID \
-DLIBDIR="\"c\"" \
-DBUILDING_LIBICONV \
-DIN_LIBRARY
LOCAL_C_INCLUDES := \
libiconv-1.13.1 \
libiconv-1.13.1/include \
libiconv-1.13.1/lib \
libiconv-1.13.1/libcharset/include
LOCAL_SRC_FILES := \
libiconv-1.13.1/lib/iconv.c \
libiconv-1.13.1/lib/relocatable.c \
libiconv-1.13.1/libcharset/lib/localcharset.c
include $(BUILD_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := proj
LOCAL_C_INCLUDES := proj-4.7.0/src
LOCAL_LDLIBS := -lm
# this list was generated with:
# find proj-4.7.0/ -name "*.c" | grep -Ev "tests|doc" | sort | awk '{ print "\t"$1" \\" }'
LOCAL_SRC_FILES := \
proj-4.7.0/src/aasincos.c \
proj-4.7.0/src/adjlon.c \
proj-4.7.0/src/bch2bps.c \
proj-4.7.0/src/bchgen.c \
proj-4.7.0/src/biveval.c \
proj-4.7.0/src/cs2cs.c \
proj-4.7.0/src/dmstor.c \
proj-4.7.0/src/emess.c \
proj-4.7.0/src/gen_cheb.c \
proj-4.7.0/src/geocent.c \
proj-4.7.0/src/geod.c \
proj-4.7.0/src/geod_for.c \
proj-4.7.0/src/geod_inv.c \
proj-4.7.0/src/geod_set.c \
proj-4.7.0/src/jniproj.c \
proj-4.7.0/src/mk_cheby.c \
proj-4.7.0/src/nad2bin.c \
proj-4.7.0/src/nad2nad.c \
proj-4.7.0/src/nad_cvt.c \
proj-4.7.0/src/nad_init.c \
proj-4.7.0/src/nad_intr.c \
proj-4.7.0/src/PJ_aea.c \
proj-4.7.0/src/PJ_aeqd.c \
proj-4.7.0/src/PJ_airy.c \
proj-4.7.0/src/PJ_aitoff.c \
proj-4.7.0/src/pj_apply_gridshift.c \
proj-4.7.0/src/PJ_august.c \
proj-4.7.0/src/pj_auth.c \
proj-4.7.0/src/PJ_bacon.c \
proj-4.7.0/src/PJ_bipc.c \
proj-4.7.0/src/PJ_boggs.c \
proj-4.7.0/src/PJ_bonne.c \
proj-4.7.0/src/PJ_cass.c \
proj-4.7.0/src/PJ_cc.c \
proj-4.7.0/src/PJ_cea.c \
proj-4.7.0/src/PJ_chamb.c \
proj-4.7.0/src/PJ_collg.c \
proj-4.7.0/src/PJ_crast.c \
proj-4.7.0/src/pj_datums.c \
proj-4.7.0/src/pj_datum_set.c \
proj-4.7.0/src/PJ_denoy.c \
proj-4.7.0/src/pj_deriv.c \
proj-4.7.0/src/PJ_eck1.c \
proj-4.7.0/src/PJ_eck2.c \
proj-4.7.0/src/PJ_eck3.c \
proj-4.7.0/src/PJ_eck4.c \
proj-4.7.0/src/PJ_eck5.c \
proj-4.7.0/src/pj_ellps.c \
proj-4.7.0/src/pj_ell_set.c \
proj-4.7.0/src/PJ_eqc.c \
proj-4.7.0/src/PJ_eqdc.c \
proj-4.7.0/src/pj_errno.c \
proj-4.7.0/src/pj_factors.c \
proj-4.7.0/src/PJ_fahey.c \
proj-4.7.0/src/PJ_fouc_s.c \
proj-4.7.0/src/pj_fwd.c \
proj-4.7.0/src/PJ_gall.c \
proj-4.7.0/src/pj_gauss.c \
proj-4.7.0/src/pj_geocent.c \
proj-4.7.0/src/PJ_geos.c \
proj-4.7.0/src/PJ_gins8.c \
proj-4.7.0/src/PJ_gnom.c \
proj-4.7.0/src/PJ_gn_sinu.c \
proj-4.7.0/src/PJ_goode.c \
proj-4.7.0/src/pj_gridinfo.c \
proj-4.7.0/src/pj_gridlist.c \
proj-4.7.0/src/PJ_gstmerc.c \
proj-4.7.0/src/PJ_hammer.c \
proj-4.7.0/src/PJ_hatano.c \
proj-4.7.0/src/PJ_imw_p.c \
proj-4.7.0/src/pj_init.c \
proj-4.7.0/src/pj_initcache.c \
proj-4.7.0/src/pj_inv.c \
proj-4.7.0/src/PJ_krovak.c \
proj-4.7.0/src/PJ_labrd.c \
proj-4.7.0/src/PJ_laea.c \
proj-4.7.0/src/PJ_lagrng.c \
proj-4.7.0/src/PJ_larr.c \
proj-4.7.0/src/PJ_lask.c \
proj-4.7.0/src/pj_latlong.c \
proj-4.7.0/src/PJ_lcca.c \
proj-4.7.0/src/PJ_lcc.c \
proj-4.7.0/src/pj_list.c \
proj-4.7.0/src/PJ_loxim.c \
proj-4.7.0/src/PJ_lsat.c \
proj-4.7.0/src/pj_malloc.c \
proj-4.7.0/src/PJ_mbtfpp.c \
proj-4.7.0/src/PJ_mbtfpq.c \
proj-4.7.0/src/PJ_mbt_fps.c \
proj-4.7.0/src/PJ_merc.c \
proj-4.7.0/src/PJ_mill.c \
proj-4.7.0/src/pj_mlfn.c \
proj-4.7.0/src/PJ_mod_ster.c \
proj-4.7.0/src/PJ_moll.c \
proj-4.7.0/src/pj_msfn.c \
proj-4.7.0/src/pj_mutex.c \
proj-4.7.0/src/PJ_nell.c \
proj-4.7.0/src/PJ_nell_h.c \
proj-4.7.0/src/PJ_nocol.c \
proj-4.7.0/src/PJ_nsper.c \
proj-4.7.0/src/PJ_nzmg.c \
proj-4.7.0/src/PJ_ob_tran.c \
proj-4.7.0/src/PJ_ocea.c \
proj-4.7.0/src/PJ_oea.c \
proj-4.7.0/src/PJ_omerc.c \
proj-4.7.0/src/pj_open_lib.c \
proj-4.7.0/src/PJ_ortho.c \
proj-4.7.0/src/pj_param.c \
proj-4.7.0/src/pj_phi2.c \
proj-4.7.0/src/PJ_poly.c \
proj-4.7.0/src/pj_pr_list.c \
proj-4.7.0/src/PJ_putp2.c \
proj-4.7.0/src/PJ_putp3.c \
proj-4.7.0/src/PJ_putp4p.c \
proj-4.7.0/src/PJ_putp5.c \
proj-4.7.0/src/PJ_putp6.c \
proj-4.7.0/src/pj_qsfn.c \
proj-4.7.0/src/pj_release.c \
proj-4.7.0/src/PJ_robin.c \
proj-4.7.0/src/PJ_rpoly.c \
proj-4.7.0/src/PJ_sconics.c \
proj-4.7.0/src/PJ_somerc.c \
proj-4.7.0/src/PJ_sterea.c \
proj-4.7.0/src/PJ_stere.c \
proj-4.7.0/src/pj_strerrno.c \
proj-4.7.0/src/PJ_sts.c \
proj-4.7.0/src/PJ_tcc.c \
proj-4.7.0/src/PJ_tcea.c \
proj-4.7.0/src/PJ_tmerc.c \
proj-4.7.0/src/PJ_tpeqd.c \
proj-4.7.0/src/pj_transform.c \
proj-4.7.0/src/pj_tsfn.c \
proj-4.7.0/src/pj_units.c \
proj-4.7.0/src/PJ_urm5.c \
proj-4.7.0/src/PJ_urmfps.c \
proj-4.7.0/src/pj_utils.c \
proj-4.7.0/src/PJ_vandg2.c \
proj-4.7.0/src/PJ_vandg4.c \
proj-4.7.0/src/PJ_vandg.c \
proj-4.7.0/src/PJ_wag2.c \
proj-4.7.0/src/PJ_wag3.c \
proj-4.7.0/src/PJ_wag7.c \
proj-4.7.0/src/PJ_wink1.c \
proj-4.7.0/src/PJ_wink2.c \
proj-4.7.0/src/pj_zpoly1.c \
proj-4.7.0/src/proj.c \
proj-4.7.0/src/proj_mdist.c \
proj-4.7.0/src/proj_rouss.c \
proj-4.7.0/src/p_series.c \
proj-4.7.0/src/rtodms.c \
proj-4.7.0/src/vector1.c
include $(BUILD_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := spatialite
LOCAL_CFLAGS := -D__ANDROID__ -DOMIT_GEOS=1 -Dfdatasync=fsync
LOCAL_C_INCLUDES := \
libiconv-1.13.1/include \
libiconv-1.13.1/libcharset/include \
geos-3.2.2/source/headers \
geos-3.2.2/capi \
proj-4.7.0/src
LOCAL_SRC_FILES := \
./libspatialite-amalgamation-2.3.1/spatialite.c \
./libspatialite-amalgamation-2.3.1/sqlite3.c
LOCAL_STATIC_LIBRARIES := iconv proj
include $(BUILD_SHARED_LIBRARY)
С этим вам нужно будет применить несколько небольших патчей к источникам, чтобы получить что-то интересноеправильные заголовки.Сборка Mac была близка, но использование -D_ APPLE _ вызвало некоторые другие странности.В итоге я просто исправил части libiconv и пространственных данных, которые мне были нужны:
diff --git a/android/jni/libiconv-1.13.1/libcharset/lib/localcharset.c b/android/jni/libiconv-1.13.1/libcharset/lib/localcharset.c
index 434fc7c..44b087d 100644
--- a/android/jni/libiconv-1.13.1/libcharset/lib/localcharset.c
+++ b/android/jni/libiconv-1.13.1/libcharset/lib/localcharset.c
@@ -44,7 +44,7 @@
# endif
#endif
-#if !defined WIN32_NATIVE
+#if !defined(WIN32_NATIVE) && !defined(__ANDROID__)
# if HAVE_LANGINFO_CODESET
# include <langinfo.h>
# else
@@ -328,7 +328,7 @@ locale_charset (void)
const char *codeset;
const char *aliases;
-#if !(defined WIN32_NATIVE || defined OS2)
+#if !(defined WIN32_NATIVE || defined OS2 || defined __ANDROID__)
# if HAVE_LANGINFO_CODESET
diff --git a/android/jni/libspatialite-amalgamation-2.3.1/spatialite.c b/android/jni/libspatialite-amalgamation-2.3.1/spatialite.c
index 5fed6f0..d482ecc 100644
--- a/android/jni/libspatialite-amalgamation-2.3.1/spatialite.c
+++ b/android/jni/libspatialite-amalgamation-2.3.1/spatialite.c
@@ -72,7 +72,7 @@ extern const char * locale_charset (void);
#include <localcharset.h>
#endif /* end localcharset */
#else /* not WINDOWS */
-#ifdef __APPLE__
+#if defined(__APPLE__) || defined(__ANDROID__)
#include <iconv.h>
#include <localcharset.h>
#else /* not Mac OsX */
@@ -7508,7 +7508,7 @@ gaiaCleanSqlString (char *value)
#define LIBCHARSET_STATIC
/* #include <localcharset.h> */
#else /* not MINGW32 - WIN32 */
-#ifdef __APPLE__
+#if defined(__APPLE__) || defined(__ANDROID__)
/* #include <iconv.h> */
/* #include <localcharset.h> */
#else /* not Mac OsX */
@@ -7526,7 +7526,7 @@ gaiaGetLocaleCharset ()
#if defined(__MINGW32__) || defined(_WIN32)
return locale_charset ();
#else /* not MINGW32 - WIN32 */
-#ifdef __APPLE__
+#if defined(__APPLE__) || defined(__ANDROID__)
return locale_charset ();
#else /* not Mac OsX */
return nl_langinfo (CODESET);
@@ -13896,7 +13896,7 @@ gaiaPolygonize (gaiaGeomCollPtr geom_org, int force_multipolygon)
#define LIBCHARSET_STATIC
/* #include <localcharset.h> */
#else /* not MINGW32 */
-#ifdef __APPLE__
+#if defined(__APPLE__) || defined(__ANDROID__)
/* #include <iconv.h> */
/* #include <localcharset.h> */
#else /* not Mac OsX */
И вот результат:
mark@beast:~/Code/android-spatialite/jni$ ndk-build
Compile thumb : spatialite <= spatialite.c
Compile thumb : spatialite <= sqlite3.c
/home/mark/Code/android-spatialite/jni/./libspatialite-amalgamation-2.3.1/sqlite3.c: In function 'unixDlError':
/home/mark/Code/android-spatialite/jni/./libspatialite-amalgamation-2.3.1/sqlite3.c:24986: warning: assignment discards qualifiers from pointer target type
Compile thumb : iconv <= iconv.c
Compile thumb : iconv <= relocatable.c
Compile thumb : iconv <= localcharset.c
StaticLibrary : libiconv.a
Compile thumb : proj <= aasincos.c
Compile thumb : proj <= adjlon.c
Compile thumb : proj <= bch2bps.c
Compile thumb : proj <= bchgen.c
Compile thumb : proj <= biveval.c
Compile thumb : proj <= cs2cs.c
Compile thumb : proj <= dmstor.c
Compile thumb : proj <= emess.c
Compile thumb : proj <= gen_cheb.c
Compile thumb : proj <= geocent.c
Compile thumb : proj <= geod.c
Compile thumb : proj <= geod_for.c
Compile thumb : proj <= geod_inv.c
Compile thumb : proj <= geod_set.c
Compile thumb : proj <= jniproj.c
Compile thumb : proj <= mk_cheby.c
Compile thumb : proj <= nad2bin.c
Compile thumb : proj <= nad2nad.c
Compile thumb : proj <= nad_cvt.c
Compile thumb : proj <= nad_init.c
Compile thumb : proj <= nad_intr.c
Compile thumb : proj <= PJ_aea.c
Compile thumb : proj <= PJ_aeqd.c
Compile thumb : proj <= PJ_airy.c
Compile thumb : proj <= PJ_aitoff.c
Compile thumb : proj <= pj_apply_gridshift.c
Compile thumb : proj <= PJ_august.c
Compile thumb : proj <= pj_auth.c
Compile thumb : proj <= PJ_bacon.c
Compile thumb : proj <= PJ_bipc.c
Compile thumb : proj <= PJ_boggs.c
Compile thumb : proj <= PJ_bonne.c
Compile thumb : proj <= PJ_cass.c
Compile thumb : proj <= PJ_cc.c
Compile thumb : proj <= PJ_cea.c
Compile thumb : proj <= PJ_chamb.c
Compile thumb : proj <= PJ_collg.c
Compile thumb : proj <= PJ_crast.c
Compile thumb : proj <= pj_datums.c
Compile thumb : proj <= pj_datum_set.c
Compile thumb : proj <= PJ_denoy.c
Compile thumb : proj <= pj_deriv.c
Compile thumb : proj <= PJ_eck1.c
Compile thumb : proj <= PJ_eck2.c
Compile thumb : proj <= PJ_eck3.c
Compile thumb : proj <= PJ_eck4.c
Compile thumb : proj <= PJ_eck5.c
Compile thumb : proj <= pj_ellps.c
Compile thumb : proj <= pj_ell_set.c
Compile thumb : proj <= PJ_eqc.c
Compile thumb : proj <= PJ_eqdc.c
Compile thumb : proj <= pj_errno.c
Compile thumb : proj <= pj_factors.c
Compile thumb : proj <= PJ_fahey.c
Compile thumb : proj <= PJ_fouc_s.c
Compile thumb : proj <= pj_fwd.c
Compile thumb : proj <= PJ_gall.c
Compile thumb : proj <= pj_gauss.c
Compile thumb : proj <= pj_geocent.c
Compile thumb : proj <= PJ_geos.c
Compile thumb : proj <= PJ_gins8.c
Compile thumb : proj <= PJ_gnom.c
Compile thumb : proj <= PJ_gn_sinu.c
Compile thumb : proj <= PJ_goode.c
Compile thumb : proj <= pj_gridinfo.c
Compile thumb : proj <= pj_gridlist.c
Compile thumb : proj <= PJ_gstmerc.c
Compile thumb : proj <= PJ_hammer.c
Compile thumb : proj <= PJ_hatano.c
Compile thumb : proj <= PJ_imw_p.c
Compile thumb : proj <= pj_init.c
Compile thumb : proj <= pj_initcache.c
Compile thumb : proj <= pj_inv.c
Compile thumb : proj <= PJ_krovak.c
Compile thumb : proj <= PJ_labrd.c
Compile thumb : proj <= PJ_laea.c
Compile thumb : proj <= PJ_lagrng.c
Compile thumb : proj <= PJ_larr.c
Compile thumb : proj <= PJ_lask.c
Compile thumb : proj <= pj_latlong.c
Compile thumb : proj <= PJ_lcca.c
Compile thumb : proj <= PJ_lcc.c
Compile thumb : proj <= pj_list.c
Compile thumb : proj <= PJ_loxim.c
Compile thumb : proj <= PJ_lsat.c
Compile thumb : proj <= pj_malloc.c
Compile thumb : proj <= PJ_mbtfpp.c
Compile thumb : proj <= PJ_mbtfpq.c
Compile thumb : proj <= PJ_mbt_fps.c
Compile thumb : proj <= PJ_merc.c
Compile thumb : proj <= PJ_mill.c
Compile thumb : proj <= pj_mlfn.c
Compile thumb : proj <= PJ_mod_ster.c
Compile thumb : proj <= PJ_moll.c
Compile thumb : proj <= pj_msfn.c
Compile thumb : proj <= pj_mutex.c
Compile thumb : proj <= PJ_nell.c
Compile thumb : proj <= PJ_nell_h.c
Compile thumb : proj <= PJ_nocol.c
Compile thumb : proj <= PJ_nsper.c
Compile thumb : proj <= PJ_nzmg.c
Compile thumb : proj <= PJ_ob_tran.c
Compile thumb : proj <= PJ_ocea.c
Compile thumb : proj <= PJ_oea.c
Compile thumb : proj <= PJ_omerc.c
Compile thumb : proj <= pj_open_lib.c
Compile thumb : proj <= PJ_ortho.c
Compile thumb : proj <= pj_param.c
Compile thumb : proj <= pj_phi2.c
Compile thumb : proj <= PJ_poly.c
Compile thumb : proj <= pj_pr_list.c
Compile thumb : proj <= PJ_putp2.c
Compile thumb : proj <= PJ_putp3.c
Compile thumb : proj <= PJ_putp4p.c
Compile thumb : proj <= PJ_putp5.c
Compile thumb : proj <= PJ_putp6.c
Compile thumb : proj <= pj_qsfn.c
Compile thumb : proj <= pj_release.c
Compile thumb : proj <= PJ_robin.c
Compile thumb : proj <= PJ_rpoly.c
Compile thumb : proj <= PJ_sconics.c
Compile thumb : proj <= PJ_somerc.c
Compile thumb : proj <= PJ_sterea.c
Compile thumb : proj <= PJ_stere.c
Compile thumb : proj <= pj_strerrno.c
Compile thumb : proj <= PJ_sts.c
Compile thumb : proj <= PJ_tcc.c
Compile thumb : proj <= PJ_tcea.c
Compile thumb : proj <= PJ_tmerc.c
Compile thumb : proj <= PJ_tpeqd.c
Compile thumb : proj <= pj_transform.c
Compile thumb : proj <= pj_tsfn.c
Compile thumb : proj <= pj_units.c
Compile thumb : proj <= PJ_urm5.c
Compile thumb : proj <= PJ_urmfps.c
Compile thumb : proj <= pj_utils.c
Compile thumb : proj <= PJ_vandg2.c
Compile thumb : proj <= PJ_vandg4.c
Compile thumb : proj <= PJ_vandg.c
Compile thumb : proj <= PJ_wag2.c
Compile thumb : proj <= PJ_wag3.c
Compile thumb : proj <= PJ_wag7.c
Compile thumb : proj <= PJ_wink1.c
Compile thumb : proj <= PJ_wink2.c
Compile thumb : proj <= pj_zpoly1.c
Compile thumb : proj <= proj.c
Compile thumb : proj <= proj_mdist.c
Compile thumb : proj <= proj_rouss.c
Compile thumb : proj <= p_series.c
Compile thumb : proj <= rtodms.c
Compile thumb : proj <= vector1.c
StaticLibrary : libproj.a
SharedLibrary : libspatialite.so
Install : libspatialite.so => libs/armeabi/libspatialite.so
Полученная библиотека:
$ ls -l ../libs/armeabi/libspatialite.so
-rwxr-xr-x 1 mark mark 1560744 2011-03-13 22:23 ../libs/armeabi/libspatialite.so