Qt for Android与ARCore集成时应用崩溃问题求助
我完全理解你现在的困扰——单独运行Qt的JNI Messenger示例和ARCore的hello_ar系列demo都正常,可一旦把两者结合,就出现找不到libc++_shared.so、libQt5Core_armeabi-v7a.so这类Qt核心库的崩溃,这确实挺让人摸不着头脑的。结合你的操作步骤和环境信息,问题大概率出在Gradle配置冲突上,特别是ABI过滤和库打包策略的问题,下面给你一步步的解决思路:
1. 修复Gradle的ABI过滤配置
ARCore的依赖可能会改变Gradle默认的ABI打包范围,导致Qt编译生成的特定ABI库没有被包含进APK。你需要在build.gradle的defaultConfig块中明确指定Qt支持的ABI:
android { defaultConfig { // 保留原有配置,添加如下ndk块 ndk { // 匹配你Qt项目编译的ABI,比如你用到的armeabi-v7a,可同时加上常用的arm64-v8a abiFilters 'armeabi-v7a', 'arm64-v8a' } } }
这样Gradle就会打包这些指定ABI的库,不会因为ARCore的依赖自动过滤掉Qt的库文件。
2. 处理库文件冲突
Qt和ARCore都依赖libc++_shared.so,如果打包时出现重复,会导致库文件被覆盖或遗漏。你可以在build.gradle中添加打包选项,优先选择其中一方的版本(保持一致即可):
android { // 保留原有配置,添加如下packagingOptions块 packagingOptions { pickFirst 'lib/**/libc++_shared.so' } }
3. 调整依赖顺序与扫描范围
确保Qt的libs目录被Gradle正确扫描,建议把本地库的依赖放在ARCore依赖的前面,让Gradle优先处理本地Qt库:
dependencies { implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar']) implementation 'com.google.ar:core:1.18.0' }
4. 确认Qt Creator的构建配置
在Qt Creator中,进入Projects -> Build -> Android APK -> Build Settings,检查以下几点:
- 确保
Build Android APK选项已勾选 ABI选择和Gradle中配置的一致(比如armeabi-v7a)- 检查Qt构建输出目录(一般是
build-xxx-Android_Qt_5_15_0_Clang_Multi_Abi-Release)下的libs文件夹,确认对应ABI的Qt库文件存在
5. 补充ARCore必要的Manifest配置
虽然你的报错是找不到Qt库,但缺少ARCore的必要配置也可能间接导致崩溃。在AndroidManifest.xml中添加以下内容:
<uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera.ar" android:required="true" /> <meta-data android:name="com.google.ar.core" android:value="required" />
6. 清理缓存后重建
最后,清理项目缓存避免旧配置干扰:
- 删除Qt项目的
build目录 - 删除Android项目的
.build和.gradle目录 - 在Qt Creator中点击Clean Project,然后Run qmake,再重新构建
按照这些步骤调整后,应该能解决库找不到的崩溃问题,让Qt和ARCore正常协同工作。
内容的提问来源于stack exchange,提问作者Aso Naoki

