使用Qt开发Android应用:模拟器运行报Invalid json output错误求助
我之前也碰到过一模一样的问题!当时折腾了好一阵才解决,给你几个亲测有效的排查方向:
检查QML导入语句的语法与有效性
qmlimportscanner的核心工作是扫描项目中的QML模块导入,一旦存在错误的导入(比如拼写错误的模块名、不存在的版本号、自定义模块路径配置错误),就会导致生成的JSON输出无效。你可以手动执行扫描命令获取更详细的报错信息:qmlimportscanner -root . -importPath <你的Qt QML安装路径>比如Qt 6.5的QML路径可能是
C:\Qt\6.5.3\android_arm64_v8a\qml(Windows)或者~/Qt/6.5.3/android_arm64_v8a/qml(Linux/macOS),执行后就能看到具体是哪个导入出了问题。彻底清理构建缓存
旧的缓存文件经常会引发各种奇怪的兼容性问题,尤其是切换过Android构建配置后。你可以:- 删除项目根目录下的
build-xxx文件夹 - 在Qt Creator中点击菜单栏的「构建」->「清理项目」
- 清理Qt Creator的全局缓存:Windows下删除
%LOCALAPPDATA%\Temp\QtCreator,Linux/macOS下删除~/.cache/QtCreator中的项目相关缓存
- 删除项目根目录下的
验证Qt与Android工具链的版本兼容性
不同Qt版本对Android SDK、NDK的版本有严格要求,比如Qt 6.2+需要NDK 22以上,SDK Build Tools建议使用30.0.3或对应兼容版本。你可以对照Qt官方文档确认当前Qt版本对应的Android环境要求,确保JDK(建议11版本)、SDK、NDK的版本完全匹配。检查自定义QML模块的配置
如果项目中使用了自定义QML模块,务必确认:- 在Qt Creator的「项目」->「构建环境」中,
QML_IMPORT_PATH已正确添加自定义模块的根路径 - 自定义模块的
qmldir文件配置正确,比如模块声明module MyCustomModule与导入语句中的模块名一致 - 自定义模块的路径中没有中文、特殊符号(即使无空格,特殊字符也可能干扰扫描)
- 在Qt Creator的「项目」->「构建环境」中,
用空项目排查问题范围
创建一个全新的Qt Quick Empty项目,直接部署到Android模拟器。如果空项目能正常运行,说明问题出在你当前项目的代码或配置中,可以逐步将旧项目的代码、资源迁移到新项目,每次迁移后构建测试,快速定位到引发错误的部分。
内容的提问来源于stack exchange,提问作者Aidoru

