android c++ boost jni

Incluir la biblioteca de Boost C++ en Android



jni (1)

Mi pregunta contenía pasos casi completos para incluir la biblioteca BOOST en Android. Pero aún hay algunos puntos importantes que debes recordar al trabajar con esto.

  • Elimine la carpeta obj y lib generada automáticamente. Cada vez antes de compilar su código nativo.

  • Si va a escribir su código nativo en C ++, agregue LOCAL_CPP_EXTENSION := .cpp a su archivo Android.mk ( jni/Android.mk ).

  • si vas a codificar en C ++, coloca el código de todos tus cpp dentro de extern "C" {} .

    extern C { /*cpp code*/ }

  • No te rindas, sé paciente y sigue intentándolo;).

He intentado casarme con Boost y Android en Windows por mucho tiempo y he intentado muchos enfoques, pero todavía no tuve suerte. Quiero hacer un programa de ejemplo usando la biblioteca de Boost en Android. Estoy siguiendo este tutorial here.

Como este tutorial sugirió, he mantenido mi Boost lib en **** (Android NDK) / sources / boost_1_44_0 **** compilado con éxito.

Luego hice un archivo Android.mk dentro de sources / boost_1_44_0 e hice la entrada de cada biblioteca que quiero usar. En este caso lib. el archivo es libboost_date_time-gcc-mt-s-1_44.a disponible en boost_1_44_0 / android / lib /
Aquí está el contenido del archivo Android.mk .

LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE:= boost_date LOCAL_SRC_FILES:= boost_1_44_0/android/lib/libboost_date_time-gcc-mt-s-1_44.a LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) include $(PREBUILT_STATIC_LIBRARY)

Ahora el siguiente paso es crear un archivo Android.mk en mi directorio de proyecto, dentro de la carpeta jni (esto es para crear una biblioteca compartida). Aquí están sus contenidos.

LOCAL_PATH := $(call my-dir) include $(call all-subdir-makefiles) include $(CLEAR_VARS) # Here we give our module name and source file(s) LOCAL_LDLIBS := -llog -ldl LOCAL_MODULE := ndkfoo LOCAL_SRC_FILES := ndkfoo.cpp LOCAL_STATIC_LIBRARIES := boost_date include $(BUILD_SHARED_LIBRARY) $(call import-module,boost_1_44_0)

Aquí está el archivo Application.mk ubicado en la misma ubicación, dentro de la carpeta jni . El contenido del archivo Application.mk es el siguiente:

APP_STL = gnustl_static #(or APP_STL = stlport_static as required) APP_CPPFLAGS = -fexceptions

Y finalmente aquí está mi archivo ndkfoo.cpp

#include <string.h> #include <jni.h> #include <stdio.h> #include <boost/date_time.hpp> using namespace boost::gregorian; void Java_com_ndkfoo_NdkfooActivity_invokeNativeFunction(JNIEnv* env, jobject javaThis) { date weekstart(2002,Feb,1); }

este programa puede ser incorrecto, pero el problema es que no reconoce ningún encabezado o función de impulso. y siempre obtengo un error de compilación.

¿Hay algo que me falta o hago incorrectamente? Cualquier ayuda sería realmente apreciada.

EDIT: esta pregunta contiene todo lo que necesitarías para incluir la biblioteca de Boost en Android. Para obtener más consejos, mira mi respuesta a continuación. Espero que esto también funcione para usted.

Gracias.