Qt5.12.1 for RK3399 Android8.1配置
- 一、开发环境工具
- 二、配置Qt5.12.1
- 三、在RK3399 Android8.1系统上跑Qt程序
- 四、注意
一、开发环境工具
1.qt-opensource-windows-x86-5.12.1
- 官网下载: http://download.qt.io/archive/qt/.
- 百度云: qt-opensource-windows-x86-5.12.1.
提取码:z8fl
2.jdk-8u201-windows-x64
- 官网下载:https://www.oracle.com/technetwork/java/javase/downloads/index.html.
- 百度云: jdk-8u201-windows-x64.
提取码:mlvy
安装到D:\Work Tools\Java
3.android-ndk-r20b-windows-x86_64
- 官网下载: https://developer.android.google.cn/ndk/downloads/.
- 百度云: android-ndk-r20b-windows-x86_64.
提取码:b2w2
解压到D:\Tools路径即可
4.sdk-tools-windows-4333796
- 百度云: sdk-tools-windows-4333796.
提取码:6j6p
解压到D:\Tools路径即可
注:这些路径与接下来配置Qt5.12.1 Android编译器有关,因笔者已经将jdk-8u201-windows-x64安装好了,而sdk-tools-windows-4333796和android-ndk-r20b-windows-x86_64路径不能有空格,所以与jdk-8u201-windows-x64路径不一致
二、配置Qt5.12.1
1.安装Qt时,Android组件要勾选,其他默认即可
2.安装成功后,点击菜单栏中的工具->选项->设备,配置Android相关的编译器,如下图所示添加Android SDK 、NDK的目录
3.在Kits查看Qt Versions和构建套件(Kit),有Android编译器且无错误,就能正常使用了
三、在RK3399 Android8.1系统上跑Qt程序
1.新建一个Project时,以下要勾选,其他与Windows下建Qt程序相同
2.RK3399用USB线连接电脑,开启USB调试模式(能发现ADB设备)
3.编写好Qt程序后,点击左下角-手机/电脑图标,选择合适的编译器(armv7和armv8均可), 然后点击左下角绿色三角形运行
4.Qt会自动弹出下图,选择第一个rk3399 Android设备(RK3399用USB线连接电脑,开启USB调试模式,才会有这个设备),第二个设备为自己创建的Android模拟器
等待一段时间后,就可以在目标设备屏幕中看见Qt界面了。
5.另外,目标apk文件将储存在输出文件夹(与自己新建工程的目录同级):
E:\QtDemo\build-04_Android-Android_for_arm64_v8a_Clang_Qt_5_12_1_for_Android_ARM64_v8a-Debug\android-build\build\outputs\apk\debug
四、注意
使用android-ndk-r20b-windows-x86_64,编译链接时报错:
1.解决方法一:
参考: error: cannot find -lc++ qt 5.12 android.
第一种:
在Qt工程文件中 .pro 中添加 QMAKE_LINK += -nostdlib++
第二种:
修改Qt5.12.1\5.12.1\android_armv7\mkspecs\android-clang\qmake.conf和Qt5.12.1\5.12.1\android_arm64_v8a\mkspecs\android-clang\qmake.conf
在QMAKE_LINK末尾添加 -nostdlib++
QMAKE_LINK = $$QMAKE_CXX $$QMAKE_CFLAGS -Wl,--exclude-libs,libgcc.a -nostdlib++
实际也还是给QMAKE_LINK添加-nostdlib++,不过第二种方式就不用每个工程都修改了
2.解决方法二:
参考: Qt for andoird cannot find -lc++.
将android-ndk-r20b\sources\cxx-stl\llvm-libc++\libs\armeabi-v7a目录下的libc++.so.21复制粘贴一份,并修改复制后的名字为libc++.so,再次编译就成功了。
如果编译的是arm64 v8a,修改同理
分析:
因为NDK R18之后对库的LN链接名字进行了修改,而QT还没有做相应的改动,导致了找不到对应的库,R17版本是可以的,所以修改库的名称即可,都是指向libc++_shared.so的错误error: cannot find -lc++,那么找一下哪里有-lc++的部分,相关的就是D:\android\NDK\android-ndk-r20/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libc++.so.21,看一下libc++.so.21文件内容如下:
INPUT(-lunwind -latomic -lc++_shared)
文件内指定连接-lc++_shared