Ubuntu18.04 虚拟机搭建QT安卓开发环境
前言
由于接下来一段时间有使用Linux开发安卓端图形化程序的需求,比较多种方案后决定选择使用Qt进行开发。
我本地的Windows环境之前已经安装过QT5和Qtcreator,再去配置的话容易弄乱本地环境,因此就需要一个相对独立的环境,虽然我的ECS也可以通过安装图形界面,搭建QT开发环境,但是当涉及到真机调试时这样的方式就跟不上了。
最终,我决定在Windows机器上使用VMWare虚拟机创建一台Ubuntu18.04虚拟机。这篇文章记录了虚拟机的安装过程、基础环境配置,以及QT—安卓开发环境的搭建过程。整个过程环节并不多,但遇到了一些奇怪的问题,不记录的话下次现查很耗时间。因此记录下来,以便后续查阅,让自己手贱删库跑路后能快速恢复(bushi)
虚拟机环境搭建与基础配置
虚拟机安装
软件包与镜像下载
VMWare我之前使用过多种版本,包括10、15、16,最终体验上来说16比较稳定。这里我选择16.2.4进行安装(正版需要授权激活码,因此这里就不放连接了,如有需要可email联系)
这里我选择的是18.04版本,下载下来是iso文件格式,此处附上上海交通大学镜像站下载地址(可选版本)
虚拟机创建与启动
VMWare安装过程一路无言,点击next即可,安装好后需重启电脑。
打开VMWare,点击创建新的虚拟机,在弹出的新建虚拟机向导中选择典型安装,
随后需要选择安装操作系统需使用到的镜像,即上面步骤下载的iso文件
接下来一个页面设置计算机名用户名和密码(root用户会默认创建,密码设置方式后续提到)
选择虚拟机数据文件存放位置、分配磁盘大小以及是否分多个文件存储,这里建议30G的磁盘大小,存放在D盘等有足够空间的盘符
随后进入最终确认页面,展示前面所有的选项。这里默认创建的虚拟机内存是4核2GB,如果需要的话可以点击下图自定义硬件按钮进行调整(我设置成了4核4GB并开启了图形界面的拉伸,实际性能良好,屏幕也能撑满整个虚拟机窗口)
全部设置完成后会启动虚拟机进行内部操作系统的安装,实际速度取决于物理机的性能和上面分配虚拟机的内存大小,我这里大概8分钟就完成了,操作系统安装完毕,会自动重启,然后就能看到熟悉的GNOME桌面
基础环境配置
镜像源
便于下载更新一些系统必须的软件包。经过测试,本人所在的地区使用清华源速度最快,设置方法有两种:
- 一种是通过图形界面选择,点击Software&Updates,在弹出的窗口中点击
Download from
->Other Sites……
,随后框中上拉找到http://mirrors.tuna.tsinghua.edu.cn
,关闭窗口,在立即弹出的窗口中点击Reload
即可 - 另一种是手动更改:将
/etc/apt/sources.list
文件备份,将源文件中的所有us.archive.ubuntu.com
替换为mirrors.tuna.tsinghua.edu.cn
即可。注意这里不要放开deb-src
的注释,否则下载软件时会报错
- 一种是通过图形界面选择,点击Software&Updates,在弹出的窗口中点击
搜狗输入法
非必须,主要是由于自带的输入法不知道怎么切换中文,安装后方便后面写代码的时候注释。
Vim、build-essential、net-tools,分别用于文本编辑、C/C++代码编译以及网络状态调测。
apt install vim build-essential net-tools -y
,我这里遇到两个问题:安装Vim的时候提示依赖于
vim-common-2:8.0.1453-1ubuntu1
,但当前安装的是2:8.0.1453-1ubuntu1
,也就是说版本冲突了,那我先将vim-common
卸载掉,再安装vim
就成功了安装
build-essential
的时候也是提示一堆依赖没有,但是ubuntu不是会自动安装所需依赖吗?其实原因和上面的一样,往往是由于系统已经安装的一些基础依赖与即将安装软件的依赖版本冲突,需要手动去卸载掉,再重新自动安装依赖。这里由于build-essential的依赖关系链比较深,就不适合我们一个一个根据提示卸载了。在网上找到了一篇博客,具体原理就是通过一个包管理工具
aptitude
,先将libc6降级,然后自动安装依赖。
Proxy
有些软件是国外服务器上的,正常下载速度太慢,所以dddd。这里选择的方案是Clash+XSUS,前者是开源项目免费安装,项目地址,安装的过程参考了这篇博客
简单来说就是在启动clash服务之前需要准备两样东西:关于地理位置的数据文件Country.mmdb和Proxy订阅的配置文件
config.yaml
其中前者建议先在windows主机下载后通过虚拟机的共享文件夹功能传递给虚拟机,后者需要在clash for windows中右键编辑订阅,复制出全部内容,用vim保存为
config.yaml
(注意不是yml)linux下不能通过
wget -O config.yaml 订阅地址
的方式获得,否则得到的只是一串base64字符串。当然如果不巧,windows环境不方便使用的话,可以用这个yaml转换器
Qt环境安装与测试
下载在线安装包
我之前尝试Qt6的版本,结果每次安装到一半都会报错说找不到QMake的问题,多次尝试重装后发现是必然问题,怀疑是Qt版本过高导致,所以换成Qt5了版本,下载链接确定合适的版本后下载对应的
run
文件,比如我选择的是(同样也是大文件,如果前面没有Proxy的条件的话,这里还是建议主机下载好通过共享文件夹传递)下载后使用chmod赋予写权限然后
./xx.run
启动图形界面,会要求登录qt账号,最后选择需要的组件库,确认安装即可。安装Android基础软件包:Java JDK、Android SDK、Android NDK
JDK下载后解压到一个公共目录(有读写权限),然后编辑
/etc/profile
文件(该文件针对所有用户有效)写入如下内容1
2
3export JAVA_HOME=/usr/local/src/jdk1.8.0_161 #java文件夹的实际路径
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib使用
source /etc/profile
进行更新,使用java -version
如果输出java版本号就算成功。AndroidNDK解压好即可
AndroidSDK的配置需要解压后进入其目录,运行
tools/android update sdk
,图形化方式选择要安装的组件,这里我安装了Android9和10的模块:
打开QTCreator(如果没有找到图标,在
Qt安装路径/5.13.2/Tools/QtCreator/bin/
目录下有一个qtcreator可执行文件,直接运行即可。),点击上方菜单栏的Tools->Options,进入如下页面选择刚刚下载安装的JDK、SDK、NDK路径**注意这里JDK路径写到Java的整个目录就行了,不要写到下一级bin**,我一开始的时候因为这个问题一直在
jdk path is valid root
那里校验不通过,还以为是版本问题,折腾了好久。
环境验证
最简单的验证方式就是使用Qt新建一个项目,连接手机进行真机调试

简单写点内容,然后点击构建项目、运行,会弹出一个窗口选择调试的设备。注意手机上需要提前开启开发者模式并启动USB调试、USB安装功能,并在电脑发出调试请求时点击允许。

最后的效果:

由于刚刚接触安卓开发,所以还写不出一些更高级的操作和页面。不过,基本环境算是搭建好了。
2023-2-26更新
上面安装过程中使用aptitude降级了libc6的依赖,并使用apt autoremove清理不需要的组件,一直成功运行到真机调试结束,结果今天重启电脑后VMWare虚拟机打开就变成了命令行界面,虽能登录但无法显示图形桌面!
在网上找了相关博客,发现可能是依赖降级后某些组件不兼容导致gnome进程未能正常启动。
使用sudo apt install ubuntu-desktop
重新安装桌面,成功退出。但重启后仍没有显示桌面
在第二次启动的过程中我观察到了这样一行输出:gdm.service is not active, not restarting……
具体记不太清了,但很明显能看出gdm(gnome desktop manager)服务未启动,于是手动启动:sudo service gdm restart
(如果安装的是其他桌面,启动方式类似)
图形桌面立即就显示了。
本来都打算重装了,还好手贱删除之前上网找了解决方案