android ndk location
NDK de Android: enlace utilizando una biblioteca estática precompilada (2)
Estoy tratando de portar Jnetpcap a Android para usarlo para analizar archivos .pcap. Jnetpcap es un contenedor java para libpcap que utiliza JNI. He compilado libpcap como una biblioteca estática utilizando el árbol de código fuente de Android.
Al compilar Jnetpcap como una biblioteca compartida, obtengo errores porque tengo que vincular con libpcap.a pero no sé cómo podría decirle a Android.mk que debe vincularlo con el archivo libpcap.a que tengo.
El uso de "LOCAL_STATIC_LIBRARIES: = libpcap" no funcionará porque libpcap no viene por defecto en el NDK de Android.
Si alguno de ustedes podría ayudarme, estaría muy agradecido.
Aquí está mi archivo actual de Android.mk:
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)
Finalmente lo resolvió. 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)
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)
Esta compilación de pcap como módulo local que podría vincular con LOCAL_STATIC_LIBRARIES
solo agrega
LOCAL_STATIC_LIBRARIES := pcap
antes de llamar
include $(BUILD_SHARED_LIBRARY)