[Android] libpcap with ndk-build
โ๐ป libpcap ๋น๋
cpp๋ก ํ๋ก๊ทธ๋จ์ ๋ง๋ค๋ pcap library๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
์ด๋ฒ post์์๋ Android ๋์ pcap ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋น๋ํ๊ณ ์คํํ๋ ๋ฐฉ๋ฒ๊น์ง ๋ค๋ค๋ณด๋๋ก ํ๊ฒ ๋ค.
ํนํ libpcap์ shared_library๋ก ๋น๋ํ๋ ๊ณผ์ ์ ๋ํ ์ค๋ช
์ ๋ฐ๋ก ์ฐพ์๋ด๋ ์๊ธฐ๋๋ฌธ์ ๋ฐ๋ก ๋จ๊ฒจ๋ณด๋ ค๊ณ ํ๋ค.
โ๐ป how to ?
libpcap์ ๋น๋ํ๊ธฐ ์ํด์ cmake, configure ์คํฌ๋ฆฝํธ, ๋ฑ๋ฑ ๋ค์ํ ๋ฐฉ๋ฒ์ด ์์ง๋ง,
์ ๋ฒ Post์ ์ด์ด์ ndk-build๋ฅผ ์ด์ฉํ ๋น๋๋ฅผ ์งํํด๋ณด๊ณ ์ ํ๋ค.
๋น๋ ์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
1) libpcap ์์ค ๋ฐ๊ธฐ
2) Android.mk, Application.mk ์์ฑ
3) ndk-build ์คํฌ๋ฆฝํธ ์คํ
libpcap ์์ค ๋ฐ๊ธฐ
git clone https://android.googlesource.com/platform/external/libpcap
Android.mk, Application.mk ์์ฑ
Android.mk, Application.mk๋ฅผ ์์ฑํ๊ธฐ ์ ์ ๋จผ์ ndk-build๋ฅผ ์ด์ฉํด๋ด์ผ๊ฒ ๋ค๋ ์๊ฐ์ ํ๊ฒ ๋ ๊ณ๊ธฐ๋ฅผ ์ค๋ช
ํด๋ณด๊ณ ์ ํ๋ค.
libpcap์ ๋น๋ํ๊ธฐ ์ํด cmake, configure ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํด๋ดค๋ค.
๊ฐ๊ฐ์ด ์ฅ๋จ์ ์ด ์์๋ค.
cmake์ ๊ฒฝ์ฐ์๋ ์ฝ๊ณ ํธํ์ง๋ง ๋ด๊ฐ ์ ๋ชฐ๋๊ณ ,
configure์ ๊ฒฝ์ฐ์๋ ๋งค๋ฒ ์ํคํ
์ฒ๋ฅผ ์ ํํด์ค์ผ ํ๋๋ฐ ๊ทธ ๊ณผ์ ์ด ๋๋ฌด ๋ฒ๊ฑฐ๋กญ๋ค๊ณ ๋๊ปด์ก๋ค.
ํนํ ์ํคํ
์ฒ๋ฅผ ๋ฌ๋ฆฌํ๊ฒ ๋๋ค๋ฉด ๋งค๋ฒ ๋ฌ๋ฆฌ ๋น๋๋ฅผ ์งํํด์ผํ๋ค๋ ์ ์์,
ํ๋ฒ์ ์ด ์์
์ ํ ์๋ ์์๊น ? ์ ๋ํ ๊ณ ๋ฏผ์ ํ๋ค.
ํนํ libpcap ์์ค์ฝ๋๋ฅผ ์ดํด๋ณด๋ค๊ฐ Android.bp ํ์ผ์ด ์กด์ฌํ๋ ๊ฒ์ ์๊ฒ๋์ด ์งํ์ ํ๊ฒ ๋์๋ค.libpcap์ ndk-build๋ฅผ ์ด์ฉํด์ ๋น๋ํ๊ธฐ ๋ณด๋ค๋ ์ต๊ทผ์๋ configure๋ cmake๋ฅผ ๋ง์ด ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๊ตณ์ด ndk-build๋ฅผ ์ด์ฉํ ํ์๋ ์์ ๊ฒ ๊ฐ๋ค.
๋ณธ๋ก ์ผ๋ก ๋์์์ Android.mk์ Application.mk์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ๋ค.
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libpcap
# LOCAL_CFLAGS := -D_BSD_SOURCE
LOCAL_CFLAGS := -DHAVE_CONFIG_H
LOCAL_CFLAGS += -Dlint
LOCAL_CFLAGS += -D_U_="__attribute__((__unused__))"
LOCAL_CFLAGS += -Wall
# LOCAL_CFLAGS += -Werror
LOCAL_CFLAGS += -Wno-macro-redefined
LOCAL_CFLAGS += -Wno-pointer-arith
LOCAL_CFLAGS += -Wno-sign-compare
LOCAL_CFLAGS += -Wno-unused-parameter
LOCAL_CFLAGS += -Wno-unused-result
LOCAL_CFLAGS += -Wno-tautological-compare
LOCAL_SRC_FILES := \
libpcap/bpf_dump.c \
libpcap/bpf_filter.c \
libpcap/bpf_image.c \
libpcap/etherent.c \
libpcap/fad-gifc.c \
libpcap/fmtutils.c \
libpcap/gencode.c \
libpcap/grammar.c \
libpcap/nametoaddr.c \
libpcap/optimize.c \
libpcap/pcap-common.c \
libpcap/pcap-linux.c \
libpcap/pcap-netfilter-linux-android.c \
libpcap/pcap-usb-linux-common.c \
libpcap/pcap-usb-linux.c \
libpcap/pcap-util.c \
libpcap/pcap.c \
libpcap/savefile.c \
libpcap/scanner.c \
libpcap/sf-pcap.c \
libpcap/sf-pcapng.c
LOCAL_SRC_FILES_linux += libpcap/missing/strlcpy.c
LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)
include $(BUILD_SHARED_LIBRARY)
# build 2
include $(CLEAR_VARS)
LOCAL_MODULE := interface-list
LOCAL_SRC_FILES := interface-list.c
LOCAL_STATIC_LIBRARIES := libpcap
LOCAL_C_INCLUDES := $(LOCAL_PATH) $(LOCAL_PATH)/libpcap
include $(BUILD_EXECUTABLE)
Application.mk
APP_PLATFORM := android-23
# APP_ABI := armeabi-v7a arm64-v8a
APP_ALLOW_MISSING_DEPS := true
APP_STL := c++_shared
ndk-build ์คํ
์์ฑ์ด ์๋ฃ๋์๋ค๋ฉด ์ด์ ndk-build๋ฅผ ์คํํ๋ฉด ๋๋ค. jni์ ์์ํด๋์์ ndk-build ์คํฌ๋ฆฝํธ๋ฅผ ์คํ์์ผ์ฃผ์.
ndk-build or /path/to/ndk-build
โ๐ป ๊ฒฐ๋ก
Android.mk์ Application.mk๊ฐ Make์ ๋๋ฆฐ ๋น๋์๋๋ก Soong ํ๋ก์ ํธ๋ก ๋์ฒด๋๋ฉด์, ๋ง์ด ์ฌ์ฉ๋์ง ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ธ๋ค. ๋ฟ๋ง ์๋๋ผ, Cmake๋ configure์ฒ๋ผ ๋์๋ ๋ง์ ๊ฒ์ฒ๋ผ ๋ณด์ธ๋ค.
ํน์ฌ๋ ํ์ํ๋ค๋ฉด ์๋ฅผ ์ฐธ๊ณ ํ๊ธธ ๋ฐ๋๋ค.
Leave a comment