1、引入第三方静态库(动态库),需要支持多cpu情况
Android.mk方式:
include $(CLEAR_VARS)
LOCAL_MODULE := local_libcrypto
LOCAL_SRC_FILES := $(LOCAL_PATH)/openssl-support/lib/${TARGET_ARCH_ABI}/libcrypto.a
include $(PREBUILT_STATIC_LIBRARY)
#链接静态库
LOCAL_STATIC_LIBRARIES := local_libcrypto libplist
注:如果引入的是动态库,把PREBUILT_STATIC_LIBRARY改成PREBUILT_SHARED_LIBRARY,把LOCAL_STATIC_LIBRARIES 改成LOCAL_SHARED_LIBRARIES ;如果是引入本地源码编译的其它静态库,可以直接引用该库编译定义的LOCAL_MODULE名,比如libplist编译配置的:LOCAL_MODULE := libplist,直接引用libplist
关键点:使用变量${TARGET_ARCH_ABI}来匹配多芯片配置
cmake方式:
LINK_DIRECTORIES(src/main/cpp/openssllib/lib/${ANDROID_ABI}/)
TARGET_LINK_LIBRARIES( testso libcrypto.a libssl.a ${log-lib}) # 链接动态库\静态库
关键点:使用变量${ANDROID_ABI}来匹配多芯片配置
2、需要编译的源文件比较多,并且源文件是放在某些目录底下的,为了好看,也是避免重复写路径
Android.mk方式:
TMP_COMM_SOURCES := \
debug.c \
socket.c \
thread.c \
userpref.c \
utils.c
LOCAL_SRC_FILES := $(addprefix common/, $(TMP_COMM_SOURCES))
关键点:使用addprefix函数了添加前缀,就是源文件的目录common
cmake方式:
aux_source_directory(src/main/cpp DIR_SRCS)
ADD_LIBRARY(testso SHARED ${DIR_SRCS})
关键点:使用aux_source_directory函数把src/main/cpp目录下的所有源文件,保存到 DIR_SRCS 变量
3、指定编译静态库或动态库
Android.mk方式:
编译成动态库
include $(BUILD_SHARED_LIBRARY)
编译成静态库
include $(BUILD_STATIC_LIBRARY)
cmake方式:
编译成动态库
ADD_LIBRARY(testso SHARED ${DIR_SRCS})
编译成静态库
ADD_LIBRARY(testso STATIC ${DIR_SRCS})
4、jni使用__android_log_print输出日志,要配置引入log库
find_library( log-lib log)
TARGET_LINK_LIBRARIES( testso libcrypto.a libssl.a ${log-lib}) # 链接动态库/静态库
有需要编译jni,或者其它第三方库的,比如:openssl、libzip、
libusb、libimobiledevice、libplist、libusb、usbmuxd,欢迎私聊讨论,瞎聊也成~~
后续有时间会陆续补更完善,欢迎关注
友情关注,关于jni的编译及第三方库的编译欢迎私聊探讨