Android NDK: Enlace mediante una biblioteca estática precompilada

Estoy tratando de puerto Jnetpcap a Android con el fin de utilizarlo para el análisis de archivos .pcap. Jnetpcap es un contenedor java para libpcap que usa JNI. He compilado libpcap como una biblioteca estática usando el árbol del código fuente del androide.

Al compilar Jnetpcap como una biblioteca compartida estoy recibiendo errores porque tengo que vincular con libpcap.a pero no sé cómo podría decir Android.mk que debe vincular con el archivo libpcap.a que tengo.

Usar "LOCAL_STATIC_LIBRARIES: = libpcap" no funcionará porque libpcap no viene por defecto en el androide NDK.

Si alguno de ustedes me pudiera ayudar, estaría muy agradecido.

Aquí está mi archivo Android.mk actual:

include /home/sergio/workspace/MyApp/jni/libpcap/Android.mk LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := jnetpcap LOCAL_SRC_FILES :=\ jnetpcap.cpp\ packet_flow.cpp\ packet_jheader.cpp\ jnetpcap_pcap_header.cpp\ nio_jbuffer.cpp\ winpcap_stat_ex.cpp\ winpcap_send_queue.cpp\ winpcap_ext.cpp\ jnetpcap_ids.cpp\ jnetpcap_dumper.cpp\ jnetpcap_utils.cpp\ util_in_cksum.cpp\ jnetpcap_beta.cpp\ nio_jmemory.cpp\ packet_jsmall_scanner.cpp\ packet_protocol.cpp\ nio_jnumber.cpp\ packet_jheader_scanner.cpp\ library.cpp\ packet_jscan.cpp\ jnetpcap_pcap100.cpp\ util_checksum.cpp\ packet_jpacket.cpp\ winpcap_ids.cpp\ jnetpcap_bpf.cpp LOCAL_C_INCLUDES := /home/sergio/android-ndk-r5b/platforms/android-8/arch-arm/usr/include /home/sergio/workspace/Shark/jni/libpcap LOCAL_STATIC_LIBRARIES := libpcap include $(BUILD_SHARED_LIBRARY) 

Usted tiene que construir pcap como módulo estático. Algo como esto

 include $(CLEAR_VARS) LOCAL_MODULE := pcap LOCAL_CFLAGS := declare_flags LOCAL_C_INCLUDES := declare_include LOCAL_SRC_FILES := src_files include $(BUILD_STATIC_LIBRARY) 

Este compilar pcap como módulo local que se puede vincular con LOCAL_STATIC_LIBRARIES

solo agrega

 LOCAL_STATIC_LIBRARIES := pcap 

Antes de llamar

 include $(BUILD_SHARED_LIBRARY) 

Finalmente lo resolví. Mi código de Android.mk:

 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := libpcap LOCAL_SRC_FILES := libpcap.a include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := jnetpcap LOCAL_SRC_FILES :=\ jnetpcap.cpp\ packet_flow.cpp\ packet_jheader.cpp\ jnetpcap_pcap_header.cpp\ nio_jbuffer.cpp\ winpcap_stat_ex.cpp\ winpcap_send_queue.cpp\ winpcap_ext.cpp\ jnetpcap_ids.cpp\ jnetpcap_dumper.cpp\ jnetpcap_utils.cpp\ util_in_cksum.cpp\ jnetpcap_beta.cpp\ nio_jmemory.cpp\ packet_jsmall_scanner.cpp\ packet_protocol.cpp\ nio_jnumber.cpp\ packet_jheader_scanner.cpp\ library.cpp\ packet_jscan.cpp\ jnetpcap_pcap100.cpp\ util_checksum.cpp\ packet_jpacket.cpp\ winpcap_ids.cpp\ jnetpcap_bpf.cpp LOCAL_C_INCLUDES :=\ /home/sergio/android-ndk-r5b/platforms/android-8/arch-arm/usr/include\ /home/sergio/workspace/MyApp/jni/libpcap LOCAL_STATIC_LIBRARIES := libpcap include $(BUILD_SHARED_LIBRARY) 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.