xmake-io / xmake

🔥 A cross-platform build utility based on Lua
https://xmake.io
Apache License 2.0
9.51k stars 764 forks source link

在windows上跨平台编译QT框架的Android程序时android-deployment-settings.json文件生成有问题 #2459

Open wiy opened 2 years ago

wiy commented 2 years ago

Xmake 版本

v2.6.7+dev.2132430d0

操作系统版本和架构

Windows 10家庭中文版 21H1 19043.1466

描述问题

在windows上跨平台编译QT框架的armv7的Android程序时, qt报错:Invalid json file: build.qt\app\android\test\android-deployment-settings.json 不清楚是xmake生成该文件有问题,还是特定版本的qt对该文件的兼容性有问题。 qt版本:5.9.7 下载路径:https://iso.mirrors.ustc.edu.cn/qtproject/archive/qt/5.9/5.9.7/qt-opensource-windows-x86-5.9.7.exe 需安装android_armv7

期待的结果

能正常编译Qt框架的Android程序

工程配置

xmake create -t qt.quickapp test
xmake f -p android --qt=D:\app\Qt5.9.7 --ndk=C:\Users\South\AppData\Local\Android\sdk\ndk-bundle --android_sdk=C:\Users\South\AppData\Local\Android\sdk -vD
xmake build -vD

附加信息和错误日志

Step 1:

创建qt.quickqpp项目

xmake create -t qt.quickapp test

Step 2:

配置编译环境

xmake f -p android --qt=D:\app\Qt5.9.7 --ndk=C:\Users\South\AppData\Local\Android\sdk\ndk-bundle --android_sdk=C:\Users\South\AppData\Local\Android\sdk -vD

结果

checking for the shared library linker (sh) ... clang++
checking for the linker (ld) ... clang++
configure
{
    ccache = true
    host = windows
    ndkver = 22
    qt = D:\app\Qt5.9.7
    android_sdk = C:\Users\South\AppData\Local\Android\sdk
    ndk_stdcxx = true
    proxy = http://127.0.0.1:4780
    buildir = build
    ndk = C:\Users\South\AppData\Local\Android\sdk\ndk-bundle
    proxy_pac = pac.lua
    ndk_sdkver = 21
    theme = plain
    build_toolver = 30.0.3
    mode = release
    qt_sdkver = 5.9.7
    network = public
    arch = armeabi-v7a
    ndk_toolchains_ver = 4.9
    plat = android
    kind = static
}

Step 3:

开始编译

xmake build -vD

结果

checking for the shared library linker (sh) ... clang++
checking for the linker (ld) ... clang++
[ 80%]: generating.qt.app test.apk
{
   "description": "This file is generated by qmake to be read by androiddeployqt and should not be modified by hand.",
   "qt": "D:/app/Qt5.9.7/5.9.7/android_armv7",
   "sdk": "C:\\Users\\South\\AppData\\Local\\Android\\sdk",
   "ndk": "C:\\Users\\South\\AppData\\Local\\Android\\sdk\\ndk-bundle",
   "sdkBuildToolsRevision": "30.0.3",
   "toolchain-prefix": "llvm",
   "tool-prefix": "llvm",
   "toolchain-version": "4.9",
   "stdcpp-path": "C:\\Users\\South\\AppData\\Local\\Android\\sdk\\ndk-bundle\\sources\\cxx-stl\\llvm-libc++\\libs\\armeabi-v7a\\libc++_shared.so",
   "ndk-host": "windows-x86_64",
   "target-architecture": "armeabi-v7a",
   "qml-root-path": "C:\\Users\\South\\Desktop\\test\\test",
   "qml-importscanner-binary": "D:\\app\\Qt5.9.7\\5.9.7\\android_armv7\\bin\\qmlimportscanner",
   "rcc-binary": "D:\\app\\Qt5.9.7\\5.9.7\\android_armv7\\bin\\rcc",
   "useLLVM": true,
   "application-binary": "build\\android\\armeabi-v7a\\release\\libtest.so"
}
D:\app\Qt5.9.7\5.9.7\android_armv7\bin\androiddeployqt.exe --input build\.qt\app\android\test\android-deployment-settings.json --output build\.qt\app\android\test\android-build --jdk "C:\\Program Files\\Android\\Android Studio\\jre" --gradle --no-gdbserver --verbose
Invalid json file: build\.qt\app\android\test\android-deployment-settings.json
error: @programdir\modules\private\async\runjobs.lua:256: @programdir\core\sandbox\modules\os.lua:362: execv(D:\app\Qt5.9.7\5.9.7\android_armv7\bin\androiddeployqt.exe --input build\.qt\app\android\test\android-deployment-settings.json --output build\.qt\app\android\test\android-build --jdk "C:\\Program Files\\Android\\Android Studio\\jre" --gradle --no-gdbserver --verbose) failed(2)
stack traceback:
    [C]: in function 'error'
    [@programdir\core\base\os.lua:872]:
    [@programdir\core\sandbox\modules\os.lua:362]:
    [@programdir\core\sandbox\modules\os.lua:275]: in function 'vrunv'
    [@programdir\rules\qt\deploy\android.lua:219]:
    [@programdir\actions\build\build.lua:131]: in function 'jobfunc'
    [@programdir\modules\private\async\runjobs.lua:232]:

stack traceback:
        [C]: in function 'error'
        @programdir\core\base\os.lua:872: in function 'os.raiselevel'
        (...tail calls...)
        @programdir\modules\private\async\runjobs.lua:256: in field 'catch'
        @programdir\core\sandbox\modules\try.lua:127: in global 'try'
        @programdir\modules\private\async\runjobs.lua:218: in upvalue 'cotask'
        @programdir\core\base\scheduler.lua:388: in function <@programdir\core\base\scheduler.lua:385>
warning: add_cxflags("-fPIC") is ignored, please pass `{force = true}` or call `set_policy("check.auto_ignore_flags", false)` if you want to set it.

android-deployment-settings.json文件

{
   "description": "This file is generated by qmake to be read by androiddeployqt and should not be modified by hand.",
   "qt": "D:/app/Qt5.9.7/5.9.7/android_armv7",
   "sdk": "C:\\Users\\South\\AppData\\Local\\Android\\sdk",
   "ndk": "C:\\Users\\South\\AppData\\Local\\Android\\sdk\\ndk-bundle",
   "sdkBuildToolsRevision": "30.0.3",
   "toolchain-prefix": "llvm",
   "tool-prefix": "llvm",
   "toolchain-version": "4.9",
   "stdcpp-path": "C:\\Users\\South\\AppData\\Local\\Android\\sdk\\ndk-bundle\\sources\\cxx-stl\\llvm-libc++\\libs\\armeabi-v7a\\libc++_shared.so",
   "ndk-host": "windows-x86_64",
   "target-architecture": "armeabi-v7a",
   "qml-root-path": "C:\\Users\\South\\Desktop\\test\\test",
   "qml-importscanner-binary": "D:\\app\\Qt5.9.7\\5.9.7\\android_armv7\\bin\\qmlimportscanner",
   "rcc-binary": "D:\\app\\Qt5.9.7\\5.9.7\\android_armv7\\bin\\rcc",
   "useLLVM": true,
   "application-binary": "build\\android\\armeabi-v7a\\release\\libtest.so"
}
waruqi commented 2 years ago

我暂时没 qt win 环境,你可以自己调下相关代码,然后提个 pr 过来。。

https://github.com/xmake-io/xmake/blob/master/xmake/rules/qt/deploy/android.lua