Android NDK: enlace utilizando una biblioteca estática precomstackda

Intento portar Jnetpcap a Android para utilizarlo en el análisis de archivos .pcap. Jnetpcap es un contenedor de Java para libpcap que utiliza JNI. He comstackdo libpcap como una biblioteca estática usando el árbol de código fuente de Android.

Al comstackr Jnetpcap como una biblioteca compartida, recibo errores porque tengo que enlazar con libpcap.a pero no sé cómo podría decirle a Android.mk que debe vincular el archivo libpcap.a que tengo.

El uso de “LOCAL_STATIC_LIBRARIES: = libpcap” no funcionará porque libpcap no viene de manera predeterminada en el NDK de Android.

Si alguno de ustedes pudiera ayudarme, 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) 

Tienes 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 build pcap es un módulo local que puedes vincular con LOCAL_STATIC_LIBRARIES

solo agrega

 LOCAL_STATIC_LIBRARIES := pcap 

antes de llamar

 include $(BUILD_SHARED_LIBRARY) 

Finalmente lo resolvió. Mi código 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)