Qt Android开发apk集成自定义库问题的解决

这个问题困扰好久好久了,就是apk里集成不进去so库,然后在手机上运行就直接闪退,崩溃,非常崩溃。
然而最近在做其他项目时不经意间找到了问题的所在。
这里就涉及到了.pro文件的配置,怎么正确的包含库路径

android {
    LIBS += -L$$PWD/lib/ -lcrypto_1_1
    LIBS += -L$$PWD/lib/ -lssl_1_1
}

以前一直是上面这种写法,殊不知,这种写法是直接修改LIBS变量,添加了-L指定库路径,-l指定库名。这里用了-lcrypto_1_1和-lssl_1_1,意味着在链接阶段会寻找libcrypto_1_1.so和libssl_1_1.so。这种方式会影响编译时的链接过程,确保编译器能找到这些库。但问题在于,Android应用在运行时需要这些库文件被打包到APK中,仅仅链接是不够的,所以可能需要额外的步骤来确保库文件被包含进去。

所以有了下面正确的写法

android {
    message("检测到 armeabi-v7a 架构")
    LIBS += -L$$PWD/lib/ -lcrypto_1_1
    LIBS += -L$$PWD/lib/ -lssl_1_1
    ANDROID_EXTRA_LIBS += \
        $$PWD/lib/libcrypto_1_1.so \
        $$PWD/lib/libssl_1_1.so
}

ANDROID_EXTRA_LIBS 这一项配置的作用就是将so库打包进apk中,注意写法
有的地方说,随着qt版本的升高,就有了更简便的方法如果使用 Qt 5.14+,建议将库文件放置在 android/libs/<架构>/ 目录,Qt 会自动处理链接和打包,无需手动配置 LIBS 和 ANDROID_EXTRA_LIBS。但是经过我的测试,它会编译库但是集成不进去apk,需要手动打包apk文件。

所以,这里也有一种感悟,当一个困难暂时找不到解决办法时,不妨放一放,不要硬搞反而那么累,放一放,只要心底里还记得自己遇到过这种问题和困难,那么在以后的日子里,这种问题和困难的解决办法总会浮出水面的!!!

你可能感兴趣的:(Qt,Android开发,qt,android,开发语言,c++)