jni编译配置常见问题及解决方案(先关注,方便需要时查看)

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的编译及第三方库的编译欢迎私聊探讨

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值