底层播放器为了对播放地址进行校验,需调用/system/lib下的so库;因此需要将c文件编译成静态链接库,本文采用Makefile的方式,基于安卓ndk实现:
源码:
#调用:$(NDKHOME)\prebuilt\windows\bin\make执行
NDKHOME = C:\ndk13b\android-ndk-r13b-windows-x86_64\android-ndk-r13b
SYSROOT = $(NDKHOME)\platforms\android-19\arch-arm
TOOLSDIR = $(NDKHOME)\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64
CC = $(TOOLSDIR)\bin\arm-linux-androideabi-gcc.exe --sysroot=$(SYSROOT)
CXX = $(TOOLSDIR)\bin\arm-linux-androideabi-g++.exe --sysroot=$(SYSROOT)
AR = $(TOOLSDIR)\bin\arm-linux-androideabi-ar.exe
CPPFLAGS = -DNDEBUG -D_FILE_OFFSET_BITS=64
CFLAGS = -march=armv7-a -mfloat-abi=softfp -mfpu=neon -mthumb -mlittle-endian -O2 -fomit-frame-pointer -Wall -Wextra -pipe
#CFLAGS = -march=armv8-a -mfloat-abi=softfp -mfpu=neon -mthumb -mlittle-endian -O2 -fomit-frame-pointer -Wall -Wextra -pipeCXXFLAGS = $(CFLAGS)
#LDFLAGS = -s -nostdlib -Wl,-dynamic-linker,/system/bin/linker -Wl,--gc-sections -Wl,--as-needed -Wl,-BdynamicINCLDIR = -I.
LIBDIR = -L.LIBS = -lc -landroid -ldl -llog -lm -lz -lgcc -shared
#SLIBS = $(SYSROOT)\usr\lib\libpcap.a#EXTRAOBJ = $(SYSROOT)\usr\lib\crtbegin_dynamic.o $(SYSROOT)\usr\lib\crtend_android.o
TARGET = libtermplug.so
OBJS=\
$(patsubst %.c,%.o,$(wildcard *.c)) \
$(patsubst %.cpp,%.o,$(wildcard *.cpp)) \
$(patsubst %.cxx,%.o,$(wildcard *.cxx)) \
$(patsubst %.cc,%.o,$(wildcard *.cc))
.SUFFIXES: .c .cpp .cxx .cc .o.c.o:
$(CC) $(CPPFLAGS) $(CFLAGS) -c $*.c $(INCLDIR).cpp.o:
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $*.cpp $(INCLDIR).cxx.o:
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $*.cxx $(INCLDIR).cc.o:
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $*.cc $(INCLDIR)all : $(TARGET)
$(TARGET) : $(OBJS)
$(CC) $(LDFLAGS) -o $(TARGET) $(OBJS) $(LIBDIR) $(LIBS)clean:
del $(TARGET) $(OBJS)