购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

第4章
开发环境与开发工具

开发环境是指在基本硬件和宿主软件(操作系统)的基础上,为支持系统软件和应用软件的工程化开发和维护而使用的一组软件。开发工具则是指用于辅助软件生命周期过程的基于计算机的工具,使用它可减轻手工方式管理的负担。本章将简要介绍统信UOS的安装、开发环境和开发工具的配置。

4.1 统信UOS的安装

统信UOS的安装包括物理机单系统安装以及物理机多系统安装,也可以在VirtualBox虚拟机中进行安装。

4.1.1 物理机单系统安装

物理机单系统安装统信UOS,意味着计算机将只有统信UOS一款操作系统。如果此前计算机内安装了其他操作系统,将被完全删除,请注意提前备份重要数据。统信UOS目前支持绝大多数通用的硬件和国产设备,但在安装开始前仍需进行检查,以避免安装过程中出问题后花费更多时间进行排查。

4.1.1.1 检查硬件设备
1.x86架构计算机

如果使用的是配备兆芯或海光芯片的计算机,用户可直接向厂商咨询该设备对统信UOS的支持情况,也可通过适配清单查询整机品牌适配情况。如果使用的是配备Intel或AMD(Advanced Micro Devices,美国超威半导体)公司(后简称AMD)芯片的计算机,用户务必要检查芯片型号,统信UOS 20对计算机配置的说明如表4-1所示。

表4-1 安装统信UOS 20的计算机配置

如果硬盘容量大于64GB,则可以在安装系统时选择“全盘安装”自动模式,否则需要手动分区。

注意

统信UOS暂时不能很好地支持搭载Intel 第八代CPU的设备,但从1040版本开始支持搭载Intel第十代CPU的设备。若某些较新的显卡、网卡等设备不能正常工作,需要额外配置驱动。而苹果计算机的某些硬件设备如touchbar,可能无法支持,这需要用户自行尝试解决。

2.ARM架构计算机

对于配备国产鲲鹏或飞腾芯片的计算机,可直接向厂商咨询该设备对统信UOS的支持情况,也可通过适配清单查询整机品牌适配情况。

注意

统信UOS不支持飞腾1500系列芯片,从1040版本开始支持飞腾D2000 CPU产品。部分国产ARM计算机型号支持NVIDIA(英伟达)显卡,具体请咨询供货商。

对于配备华为海思990芯片的笔记本计算机,可通过统信官网联系统信软件官方获取专用镜像。如果是其他ARM(例如树莓派)计算机或开发板,统信软件暂未提供官方支持,需要用户自行探索。

3.龙芯架构计算机

请用户首先向供货商咨询对应设备对统信UOS的支持情况,也可通过适配清单查询整机品牌适配情况。

注意

龙芯3000、4000系列芯片使用的是MIPS指令集,龙芯5000系列芯片使用的是LoongArch指令集,操作系统镜像不通用。龙芯3000系列芯片不支持虚拟化。

4.申威架构计算机

请用户首先向供货商咨询对应设备对统信UOS的支持情况,也可通过适配清单查询整机品牌适配情况。

4.1.1.2 下载系统镜像并刻录

首先访问统信生态中心官网并注册账户,通过下载页面下载统信UOS专业版最新版本的系统镜像。下载完成后可选择通过U盘刻录系统或光盘刻录系统进行安装。有批量安装需求的开发者,也可通过PXE(Preboot eXecution Environment,预启动执行环境)进行系统安装。

1.U盘刻录系统

使用U盘刻录统信UOS,要求U盘可用容量不少于4GB。

U盘刻录工具推荐使用深度启动盘制作工具,它支持Windows、macOS、Linux等平台;也可使用PowerISO等其他刻录工具。下面简单介绍深度启动盘制作工具的使用流程。

(1)如图4-1所示,启动软件,将镜像文件(以.iso为扩展名)拖入深度启动盘制作工具,或单击“请选择镜像文件”。

图4-1 启动深度启动盘制作工具

(2)如果单击了“请选择镜像文件”,就在文件管理器中找到并选中镜像文件,如图4-2所示,再单击“打开”。

图4-2 选择镜像文件

(3)选择U盘设备,推荐勾选“格式化分区”,然后单击“开始制作”,开始刻录,如图4-3所示。

图4-3 刻录

(4)刻录完成后,深度启动盘制作工具会自动卸载U盘,单击“完成”并拔出U盘即可,如图4-4所示。

2.光盘刻录系统

使用光盘刻录系统,要求光盘可用容量不小于4GB,可选用RW或RO式光盘,光驱需要具有刻录功能。

图4-4 制作完成

对于光盘刻录软件,在Windows系统下可使用系统自带的刻录软件,也可使用UltraISO(软碟通)等第三方软件。其他操作系统下使用的刻录软件请用户自行探索。

4.1.1.3 开始安装

首先需关闭计算机,将U盘插入计算机的USB接口,或将光盘放入光驱。随后开机并进入BIOS(Basic Input/Output System,基本输入/输出系统)设置界面或进入快速选择界面,选择通过U盘或光盘设备启动。

不同计算机进入BIOS设置界面的快捷键不同,常用的有F3、Delete等。进入快速选择界面常用的快捷键是F11或F12。如尝试无效,建议上网搜索或咨询供货商。

以某固件厂商的产品为例,进入BIOS设置界面,选择通过U盘启动,如图4-5所示。

图4-5 通过U盘启动

随后进入安装操作系统的GRUB(GRand Unified Bootloader,是GNU项目的一个启动加载包)界面,如图4-6所示。

图4-6 GRUB界面

按Enter键,即可打开操作系统安装器。

4.1.1.4 选择安装器语言

打开安装器之后的第一步是选择语言,其支持多种语言,默认语言为简体中文,如图4-7所示。图4-7中选项代表的语言表示安装器的显示语言,非操作系统实际的显示语言。

图4-7 选择语言

4.1.1.5 硬盘分区和安装

下面介绍硬盘分区,物理机单系统安装推荐选择“全盘安装”,并选择安装位置所在的硬盘。设置成全盘安装会进行自动分区,这对不熟悉Linux分区的用户十分友好。

注意

如果有多块硬盘,请务必先确认需要安装的硬盘再进行安装,如图4-8所示。

图4-8 确认硬盘

如果选择“手动安装”,请务必至少创建EFI(Extensible Firmware Interface,可扩展固件接口)分区和/分区,建议同时创建/home分区和/boot分区。分区完成后,系统即开始安装,如图4-9所示,此过程需要3~5分钟。

安装完成后,单击“完成”按钮,并立即拔出U盘或弹出光盘。此时安装器会重启计算机。

图4-9 系统开始安装

4.1.1.6 使用前配置

重启计算机后,即开始进行统信UOS使用前配置,包括选择语言、键盘布局、选择时区和创建账户等,全部为图形化操作,用户根据需要配置即可,此处不再详述,如图4-10所示。

图4-10 使用前配置

优化系统配置结束后,即进入系统登录界面,此时安装和配置完成,可正常使用统信UOS进行开发。

4.1.2 物理机多系统安装

物理机多系统安装统信UOS指以下两种情况。

第一种:计算机中只有一块硬盘,且硬盘内已安装至少一种操作系统,此时在不删除已有操作系统的情况下,在硬盘中增加安装统信UOS。或计算机中虽有多块硬盘,但需要在其中一块已安装了其他操作系统的硬盘中增加安装统信UOS。

第二种:计算机中有多块硬盘,其中一块硬盘需要全盘安装统信UOS。

第二种情况请参照4.1.1小节的说明,本小节重点介绍第一种情况。此时需要硬盘具备用于安装新操作系统的空余容量,如果硬盘已被其他系统的分区占满,需要通过硬盘调整工具删除一些分区或缩小现有分区容量,腾出空间用于安装统信UOS。在Windows上可用DiskGenius或EaseUS等工具通过删除分区或缩小分区容量来腾出硬盘空间。物理机多系统安装亦需要检查硬件设备、下载系统镜像、刻录系统、启动U盘或光盘进入安装器、选择安装器语言、硬盘分区和安装、使用前配置等步骤。其与物理机单系统安装相比,唯一的区别在于硬盘分区这一步骤需要手动进行。下面详细讲解手动分区安装多系统的步骤。

(1)手动安装。

在“硬盘分区”界面选择需进行安装的硬盘,并选择“手动安装”,如图4-11所示。

图4-11 手动安装

随后在可用空间区域,单击按钮新建分区。

注意

请勿改动原有操作系统分区,避免出现数据紊乱。

(2)新建分区。

首先选择分区类型,如果分区类型使用MBR(Master Boot Record,主引导记录),则需要留意原操作系统已有主分区数量,由于MBR下所有操作系统分区的主分区数量上限为4,请将超出分区的类型改为“逻辑分区”。如果分区类型使用GPT(GUID Partition Table,全局唯一标识符分区表),则全部设置为默认选项“主分区”即可,如图4-12所示。

图4-12 新建分区

其次选择位置,保持默认设置“起点”即可。

随后选择文件系统、挂载点及大小,以下为文件系统和主要挂载点的说明。

文件系统:对于普通应用开发者,推荐选择ext4文件系统关联挂载点,同时推荐创建交换分区,交换分区容量一般以内存容量的1~2倍为宜。

ext4、ext3、ext2、reiserfs、xfs、lvm2皆为文件系统,适用于不同的使用场景,专业领域开发者请依据实际需求选择。

挂载点:根分区(/)必须创建,该分区内包含系统文件,建议给予15GB或更多空间;home分区(/home)推荐创建,该分区包含用户数据文件,由于日常应用的数据和用户数据都存放在这里,建议多给予一些空间;boot分区(/boot)主要用于存放操作系统启动过程中的相关数据,分配1GB即可;其他分区用户可按需创建。

注意

home分区和根分区的home子目录在文件结构上是同一含义,但在分区上有区别,表示硬盘中的两个独立区域。如果没有创建home分区,则/home目录和其他目录共享根分区容量;如果创建了home分区,则/home和/下除home以外的其他目录不再共享分区容量。Linux下的其他分区同理。

图4-13所示为常见分区示例。

图4-13 常见分区

(3)修改引导器。

如果只有一块硬盘,选择/dev/sda即可;如果有多块硬盘,请选择当前分区所在的硬盘。/dev/sda表示第一块硬盘,/dev/sdb表示第二块硬盘,依次类推。全部设置完之后,单击“下一步”继续安装系统即可。剩余步骤请参照4.1.1小节。

4.1.3 VirtualBox安装

VirtualBox是一款开源虚拟机软件,支持Linux、macOS和Windows等操作系统,目前只支持在x86 CPU下模拟运行x86操作系统。

请通过https://www.virtualbox.org/wiki/Downloads下载各系统对应的VirtualBox软件,下面以Windows为例介绍如何在VirtualBox上安装统信UOS 20。

(1)启动VirtualBox并新建虚拟机,如图4-14所示。

图4-14 启动VirtualBox并新建虚拟机

(2)为虚拟机命名并选择系统类型,如图4-15所示。

图4-15 为虚拟机命名并选择系统类型

注意

操作系统版本建议选择Debian(64-bit)。

(3)为虚拟机分配内存,如图4-16所示。

图4-16 分配内存

注意

建议为统信UOS分配2GB或更大的内存。

(4)创建虚拟硬盘,如图4-17~图4-20所示。如需进行全盘安装,需要分配64GB或更大的内存。

图4-17 创建虚拟硬盘

图4-18 选择虚拟硬盘类型

图4-19 选择内存分配方式

图4-20 选择物理文件

(5)挂载镜像,如图4-21和图4-22所示。

图4-21 选择挂载的物理文件

图4-22 挂载系统预览

(6)启动虚拟机并安装系统,如图4-23所示。

图4-23 启动虚拟机并安装系统

(7)安装操作系统的步骤与物理机中安装操作系统的步骤基本一致,请参考4.1.1小节。

(8)安装完成后卸载镜像文件,如图4-24所示。

图4-24 安装完成后卸载镜像文件

系统安装完成后,请务必卸载镜像文件,否则下次启动虚拟机会重复进行系统安装而不会进入操作系统。

4.1.4 统信UOS的基本使用

4.1.4.1 系统激活和开发者模式

进入系统后,需要进行系统激活,否则在功能使用上会受限。进行系统激活的路径为控制中心→系统信息→关于本机。统信UOS默认为每台新的计算机提供90天试用期,如需更多系统使用时间,可联系统信软件工作人员进行激活码购买或申请免费的开发用激活码。也可使用uos-activator命令,通过终端进行激活操作。确认系统已激活(包括试用激活)后,打开开发者模式,否则系统默认禁用root权限。访问路径为控制中心→通用→打开开发者模式。有两种打开开发者模式的方式——在线模式和离线模式,按照图形界面提示操作即可。成功打开开发者模式后需要重启一次系统,重启完成后即拥有root权限。

注意

开发者模式一旦打开,则无法关闭。

4.1.4.2 网络设置

网络设置的图标位于系统栏右下角,即图4-25所示的方框处。

图4-25 网络设置的图标

图标如果是黑色连接表示网络通畅,其他皆为异常状态。如果网络异常,首先检查网线是否插好或是否损坏(如为无线连接,请检查Wi-Fi密码是否正确);再检查是否需要网络特殊认证(此步骤针对的是企业级开发者,家庭开发者请忽略);如经上述检查未发现错误,最后检查网卡驱动和网络配置。请打开控制中心进行网络信息检查。如果最终确定是网卡较新导致的网络问题,需要安装网卡驱动。对于部分网卡(包括无线网卡),尤其是较新的网卡,统信UOS可能未及时进行支持,此时需要检查网卡芯片型号,并自行编译驱动。对于USB网卡,请进行以下检查:

lsusb
Bus 001 Device 001: ID xxxx:xxxx

依据设备ID查询芯片型号,查询厂商是否有驱动源码,如果有源码请进行编译、安装。

对于PCI(Peripheral Component Interconnect,外设部件互连)插槽网卡,请进行以下检查:

lspci | grep "Ethernet controller"
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. 
RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 15)

依据设备型号,查询厂商是否有驱动源码,如果有源码请进行编译、安装。

4.1.4.3 安装显卡驱动

如果系统的显示不正常,比如有“撕裂”等现象,有可能是显卡驱动问题导致的。如果是x86以下的计算机,对于NVIDIA显卡,可以使用如下方式安装专有驱动:

sudo apt install nvidia-driver nvidia-xconfig

对于x86和ARM计算机,亦可前往NVIDIA官网下载.run格式的驱动包来手动安装。安装代码如下:

wget nvidia-driver.run
sudo systemctl stop lightdm
sudo nvidia-driver.run
sudo nvidia-xconfig

对于AMD显卡,使用预装的开源驱动即可;关于国产显卡的驱动的安装办法,请咨询产品供货商。其他系统使用细节,请参考统信UOS产品手册。

4.1.5 安装软件

在统信UOS上安装软件主要有以下3种常见方式:使用命令行终端,通过软件仓库安装;通过应用商店安装;手动安装。下面将一一介绍这3种安装方式。

4.1.5.1 使用命令行终端安装

统信UOS常用的包管理工具是apt,下面简单介绍一下apt安装软件的使用方法:

#第一次使用务必首先执行以下命令
sudo apt update && sudo apt upgrade
#搜索软件
apt search软件名
#安装
sudo apt install软件包名
#卸载
sudo apt remove软件包名
#卸载软件并删除配置文件
sudo apt purge软件包名
4.1.5.2 通过应用商店安装

应用商店中上架的应用皆经过官方适配,推荐采用此方式安装应用。可通过启动器或任务栏上的图标启动应用商店,亦可通过终端命令deepin-app-store启动应用商店。应用商店界面如图4-26所示。

图4-26 应用商店界面

应用商店下载管理界面如图4-27所示。应用商店支持图形化的应用安装、卸载、更新,并可呈现用户针对应用提出的反馈建议。

图4-27 应用商店下载管理界面

4.1.5.3 手动安装

统信UOS亦支持手动安装应用,推荐安装的软件安装包为.deb格式,同时亦支持snap、flatpak、AppImage、.bin、.run、.sh、.bundle格式,甚至无须安装的压缩包等。以deb软件包为例,安装命令如下:

wget xxx.deb
sudo apt install ./xxx.deb

也可直接双击deb软件包,操作系统的包安装器会自动处理依赖并安装软件,如图4-28所示。

图4-28 安装软件

如果在内网或无网环境下,可能会下载到软件及其依赖的deb软件包,此时有多个deb软件包需要一起安装,方法如下:

sudo dpkg -i *.deb

4.2 常见的开发环境配置

4.2.1 DTK开发环境

搭建DTK(Development Tool Kit,开发工具包)开发环境主要指两个方面的内容:安装基础开发库和IDE。基础开发库指Qt库和DTK库及其头文件,IDE指Qt Creator。整个过程使用sudo进行软件包的安装,需要先打开计算机的开发者模式。在统信UOS桌面操作系统中已预装DTK运行库和Qt基础运行库,基础开发库方面只需要安装Qt库和DTK库的头文件。如果是刚装好的系统,建议先使用sudo apt update将仓库最新的软件包信息同步到本地,再进行软件包的安装。安装Qt库可使用如下命令:

sudo apt update
sudo apt -y install qt5-default

在安装DTK库之前应先简单看一下DTK库有哪些,在终端上使用sudo apt install libdtk,然后按Tab键补全命令,终端输出的内容如下:

$ sudo apt install libdtk
libdtkcore2               libdtkgui5               libdtkwidget2-dev
libdtkcore2-dbgsym        libdtkgui5-bin           libdtkwidget5
libdtkcore2-dev           libdtkgui5-bin-dbgsym    libdtkwidget5-bin
libdtkcore5               libdtkgui5-dbgsym        libdtkwidget5-bin-dbgsym
libdtkcore5-bin           libdtkgui-bin            libdtkwidget5-dbgsym
libdtkcore5-bin-dbgsym    libdtkgui-bin-dbgsym     libdtkwidget-bin
libdtkcore5-dbgsym        libdtkgui-dev            libdtkwidget-bin-dbgsym
libdtkcore-bin            libdtkpay                libdtkwidget-dev
libdtkcore-bin-dbgsym     libdtkpay-dbgsym         libdtkwm2
libdtkcore-dev            libdtkpay-dev            libdtkwm2-dbgsym
libdtkgui2                libdtkwidget2            libdtkwm-dev
libdtkgui2-dbgsym         libdtkwidget2-dbgsym

其中,以-dev结尾的为对应库的开发包,里面主要是一些头文件和源码相关配置文件;以-dbgsym结尾的为对应库的调试信息包,里面是一些库的调试信息。从输出的内容还可以看到主要有3类库:dtkcore、dtkgui和dtkwidget。其中dtkcore是核心库,提供基础功能的组件和工具类;dtkgui是DTK显示效果相关的库,提供主题、颜色定义等功能;dtkwidget就是控件库,提供各种DTK控件。使用apt安装这3类库的开发包:

sudo apt -y install libdtkcore-dev libdtkgui-dev libdtkwidget-dev

如果需要用CMake来组织项目,可以安装CMake软件包:

sudo apt -y install cmake

开发包安装完毕后,接下来安装Qt Creator,命令如下:

sudo apt -y install qtcreator

Qt Creator安装完成后,打开Qt Creator,单击“工具”→“选项”→“Kits”→“Qt Versions”,可以看到当前Qt库版本,如图4-29所示。

图4-29 查看Qt 库版本

对于开发DTK应用,建议在Qt Creator中添加DTK应用模板,首先需要在/etc/apt/source.list中添加社区源deb [by-hash=force] https://community-packages.deepin.com/deepin/apricot main contrib non-free,然后安装qtcreator-dtk-template:

sudo apt update

sudo apt -y install qtcreator-dtk-template

打开Qt Creator,通过“文件”→“新建文件或项目”→“Application”创建新项目时,可以看到“Dtk Widgets Application”模板,如图4-30所示。

图4-30 “Dtk Widgets Application”模板

作为开发者,有时需要下载Qt源码或者DTK源码来学习或分析问题。首先需要修改/etc/apt/source.list,删除deb-src前的#来去掉代码源的注释,然后使用apt source命令下载源码包,比如:

$ apt source libdtkwidget2
正在读取软件包列表... 完成
选择dtkwidget2作为源码包而非libdtkwidget2
需要下载6,072 kB的源码包。
获取:1 https://home-packages.chinauos.com/home plum/main dtkwidget2 2.2.1-1 (dsc) [1,362 B]
获取:2 https://home-packages.chinauos.com/home plum/main dtkwidget2 2.2.1-1 (tar) [6,043 kB]
获取:3 https://home-packages.chinauos.com/home plum/main dtkwidget2 2.2.1-1 (diff) [28.5 kB]
已下载6,072 kB,耗时11秒 (575 kB/s)
dpkg-source: info: extracting dtkwidget2 in dtkwidget2-2.2.1
dpkg-source: info: unpacking dtkwidget2_2.2.1.orig.tar.xz
dpkg-source: info: unpacking dtkwidget2_2.2.1-1.debian.tar.xz

命令执行后,可以在当前目录下看到dtkwidget的源码。

4.2.2 开发第一个程序:HelloWorld

开发环境配置好之后,来创建一个简单的HelloWorld程序。在Qt Creator中单击“文件”→“新建文件或项目”→“Application”→“Dtk Widgets Application”,创建DTK项目,如图4-31所示。

图4-31 单击“Dtk Widgets Application”创建DTK项目

项目名称改为HelloWorld。创建路径表示源码存放位置,可以使用默认位置,也可以使用自定义位置,如图4-32所示。

图4-32 设置项目创建路径

单击“下一步”,Qt Creator默认使用qmake构建项目,如果在开发环境配置阶段安装了CMake,这里就可以选择CMake来构建项目,如图4-33所示。

图4-33 选择项目构建工具

单击“下一步”,构建套件使用默认项“桌面”,如图4-34所示。

图4-34 选择项目构建套件

单击“下一步”,由于系统没有安装版本管理工具,所以这里是“None”,如图4-35所示。

图4-35 选择版本管理工具

单击“完成”,可以看到Dtk Widgets Application模板已经生成了dtk template application代码,如图4-36所示。

图4-36 模板代码

接下来通过修改模板代码来创建HelloWorld程序。在Qt Creator左侧的项目名称“HelloWorld”上右击,然后选择新建“C++ Class”,如图4-37所示。

图4-37 新建类

类名改为HelloWorld,继承自“DMainWindow”,如图4-38所示。

图4-38 HelloWorld类信息

单击“下一步”,再单击“完成”,由于这里使用CMake作为构建工具,添加新的源文件时Qt Creator不会自动将源文件路径添加到所属项目的CMakeLists.txt中,因此Qt Creator会提示是否要将新增源文件的路径保存到剪贴板中,这里勾选“Remember My Choice”并选择“Yes”,如图4-39所示。

图4-39 Qt Creator提示

然后在CMakeLists.txt的add_executable行中添加源文件路径:

add_executable(${PROJECT_NAME} main.cpp helloworld.h helloworld.
cpp resources.qrc)

保存后,可以在Qt Creator左侧项目视图中看到新增的源文件。修改helloworld.h,修改后内容如下:

#ifndef HELLOWORLD_H
#define HELLOWORLD_H
 
#include <DMainWindow>
 
class HelloWorld : public DTK_WIDGET_NAMESPACE::DMainWindow
{
    Q_OBJECT
public:
    HelloWorld();
 
private:
    void initUI();
};
 
#endif // HELLOWORLD_H

HelloWorld继承DMainWindow,作为程序的主窗口。修改helloworld.cpp源文件,修改后内容如下:

#include "helloworld.h"
#include <DLabel>
#include <DWidget>
#include <DFontSizeManager>
 
#include <QVBoxLayout>
 
DWIDGET_USE_NAMESPACE
 
HelloWorld::HelloWorld()
    : DMainWindow()
{
    initUI();
}
 
void HelloWorld::initUI()
{
    auto centerWidget = new DWidget;
    auto centerWidgetLayout = new QVBoxLayout;
    auto helloWorld = new DLabel(tr("Hello,world"));
    centerWidgetLayout->addWidget(helloWorld, 0, Qt::AlignCenter);
    DFontSizeManager::instance()->bind(helloWorld, DFontSizeManager::T1);
    centerWidget->setLayout(centerWidgetLayout);
    setCentralWidget(centerWidget);
}

在HelloWorld类的initUI方法中,创建了DWidget对象来调用DMainWindow的setCentralWidget方法将其作为主窗口的centerWidget;在centerWidget中使用垂直布局,布局中添加居中显示的DLabel对象用于显示“Hello,world”,为保证系统显示比例调整后字体大小自动同步调整,使用了DFontSizeManager的bind方法将DLabel对象helloWorld的字体绑定为T1。

修改main.cpp源文件,修改后内容如下:

#include "helloworld.h"
#include <DApplication>
#include <DApplicationSettings>
#include <DTitlebar>
#include <DWidgetUtil>
 
#include <QLayout>
 
DWIDGET_USE_NAMESPACE
 
int main(int argc, char *argv[])
{
    QGuiApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
    DApplication a(argc, argv);
    a.setOrganizationName("deepin");
    a.setApplicationName("dtk-application");
    a.setApplicationVersion("1.0");
    a.setProductIcon(QIcon(":/images/logo.svg"));
    a.setProductName("Dtk Application");
    a.setApplicationDescription("This is a dtk template application.");
 
    a.loadTranslator();
    a.setApplicationDisplayName(QCoreApplication::translate("Main", 
"DTK Application")); // 保存程序的窗口主题设置 DApplicationSettings as; Q_UNUSED(as) HelloWorld w; w.titlebar()->setIcon(QIcon(":/images/logo.svg")); w.titlebar()->setTitle("Hello,world"); // 设置标题,宽度不够会隐藏标题文字 w.setMinimumSize(QSize(600, 400)); w.show(); Dtk::Widget::moveToCenter(&w); return a.exec(); }

在main函数中,创建HelloWorld类对象作为主窗口,调整最小尺寸为600×400,调用Dtk::Widget::moveToCenter使主窗口显示在屏幕中央,运行结果如图4-40所示。

图4-40 运行结果

虽然代码中只在DMainWindow中创建了一个DLabel对象,但从运行结果来看,窗口图标、窗口标题、窗口菜单栏也一并创建了,包括窗口阴影效果。更详细的内容请阅读本书DTK相关章节。

4.3 目录结构设计

项目目录结构和代码编码风格一样,非常重要。

4.3.1 项目目录规范

一般情况下,项目目录按照表4-2所示的结构进行创建和管理(以dtkcore为例),复杂项目可由开发经理以此为基础按需调整项目目录结构。

表4-2 dtkcore项目的目录结构

4.3.2 README文件

每个项目必须包含README文件,README文件内需包含如下内容:

项目描述;

依赖,包括编译依赖和运行时依赖;

构建和安装内容;

项目目录说明;

获取帮助内容(开发项目要求);

参与开发内容(开源项目要求);

授权协议说明。

参考模板如下:

# Project Name
Project description.
 
## Dependencies
### Build dependencies
 
- Qt >= 5.6
 
### Runtime dependencies
 
- git
 
## Installation
 
### Build
$ mkdir build
$ cd build
$ qmake ..
$ make
 
### Install
 
$ sudo make install
 
## Getting help
Any usage issues can ask for help via
 
* [Forum](https://bbs.deepin.org)
* [WiKi](https://wiki.deepin.org/)
 
## Getting involved
We encourage you to report issues and contribute changes
 
* [Contribution guide for developers](https://github.com/linuxdeepin/developer-center/wiki/Contribution-Guidelines-for-Developers-en). (English)
* [开发者代码贡献指南](https://github.com/linuxdeepin/developer-center/wiki/
Contribution-Guidelines-for-Developers) (中文)
 
## License
[Project name] is licensed under [GPLv3](LICENSE).

4.4 版本控制系统

版本控制系统是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统,有本地版本控制系统、集中化的版本控制系统、分布式版本控制系统。

(1)本地版本控制系统: 其中广泛流行的一种叫作rcs,它基本上就是用来保存并管理文件(file)补丁。文件补丁记录着文件修订前后的内容变化,可以通过不断打补丁,计算出各个版本(version)的文件内容,如图4-41所示。

图4-41 本地版本控制系统

(2)集中化的版本控制系统: 通过单一的集中管理的服务器(Central VCS Server),保存所有文件的修订版本,协同工作的客户端(图中示意为Computer A和Computer B)连到这个服务器,从中取出最新的文件或向其提交更新内容,如图4-42所示。

图4-42 集中化的版本控制系统

(3)分布式版本控制系统: 客户端不仅提取最新版本的文件快照,而且把原始的代码仓库完整地镜像。这么一来,任何一处用于协同工作的服务器发生故障,都可以用任何一个镜像出来的本地仓库恢复。因为每一次提取操作实际上都是一次对代码仓库的完整备份。并且此类系统可以指定和若干不同远程仓库进行交互,这样就可以在一个项目中和不同小组的人相互协作,这在集中化的版本控制系统中是无法实现的,如图4-43所示。

图4-43 分布式版本控制系统

下面介绍的Git属于分布式版本控制系统。

4.4.1 Git基础知识

Git直接记录快照而非进行差异比较。Git和其他版本控制系统的主要区别在于,它只关心文件数据的整体是否发生变化,而大多数其他版本控制系统则只关心文件内容的具体差异。Git会把变化的文件快照记录在一个微型的文件系统中。每次提交更新内容时,它会纵览一遍所有文件的指纹信息并对文件进行一次快照,然后保存一个指向这次快照的索引。为提高性能,若文件没有变化,Git不会再次保存快照,而只对上次保存的快照进行一次链接,如图4-44所示。

图4-44 Git文件系统

Git中的绝大多数操作只需要访问本地文件和资源,因为Git在本地磁盘上就保存着所有当前项目的历史更新数据,处理起来速度很快。Git使用SHA-1算法计算数据的校验和,通过文件的内容或目录的结构计算出一个SHA-1哈希值,并将其作为指纹字符串。该指纹字符串由40个十六进制字符(0~9及a~f)组成,看起来就像:

24b9da6552252987aa493b52f8696cd6d3b00373

Git的工作完全依赖于这类指纹字符串,所以我们会经常看到这样的哈希值。实际上,所有保存在Git数据库中的内容都是用此种哈希值来进行索引的,而不是依靠文件名。任何一个文件在Git内只有3种状态: 已修改(modified)、已暂存(staged)和已提交(committed)。当Git管理项目时,文件流转于3个区域,即工作目录、暂存区、本地仓库,分别对应文件的已修改、已暂存、已提交3种状态,如图4-45所示。

图4-45 文件状态

基本的Git工作流程如下。

(1)在工作目录中修改某些文件。

(2)对修改后的文件进行快照,然后将其保存到暂存区。

(3)提交更新内容,将保存在暂存区的文件快照永久转储到Git目录中。

4.4.2 安装Git

使用Git工作需要调用curl、expat、openssl、zlib等库代码,所以要先安装这些依赖。在有YUM的系统或者apt-get的系统上可以用下面的命令安装:

//YUM系统
$ yum install curl-devel expat-devel gettest-devel openssl-devel zlib-devel
//apt-get系统
$ apt-get install libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev

之后从Git官网下载最新源码。

$ tar -zxf git-2.31.1.tar.gz
$ cd git-2.31.1
$ make prefix=/usr/local all
$ sudo make prefix=/usr/local all

然后就可以使用git命令了。在统信UOS上可以直接使用系统提供的包管理工具,可以用apt-get安装:

$ apt-get install git

4.4.3 配置Git

一台新的机器在安装好Git之后,一般需配置使用者的Git工作环境。配置操作只需要做一次,以后升级会沿用之前的配置,并且支持随时修改。

Git提供了一个叫作git config的工具,专门用来配置或读取相应的工作环境变量。由这些环境变量来决定Git在各个环节的具体工作方式和行为。这些环境变量可以存储在以下3个不同的地方。

/etc/gitconfig文件:系统中对所有用户都普遍适用的配置。若使用git config时用 --system选项,读写的就是这个文件。

~/.gitconfig文件: 用户主目录下的配置文件只适用于该用户。若使用git config时用--global选项,读写的就是这个文件。

当前项目的.git/config文件:配置只对当前项目有效。

每个级别的配置都会覆盖上层的相同配置,所以.git/config里的配置会覆盖/etc/gitconfig中的同名变量。

4.4.3.1 用户信息

首先要配置的就是个人用户名和邮箱。这两条信息非常重要,因为每次Git的提交操作都会引用这两条信息,说明是谁提交了更新内容,所以其会随更新内容一起被永久纳入记录:

$ git config --global user.name "zhangsan"
$ git config --global user.email "zhangsan@uniontech.com"

这里用了--global选项,所以会对用户主目录下的所有项目生效。如果需要在某些项目中使用特定的用户名和邮箱,可以去掉--global选项,重新配置,新的设定会保存在当前项目的.git/config文件里。

4.4.3.2 文本编辑器

使用Git会出现需要额外输入一些信息的场景,会自动调用一个外部的编辑器。默认会用操作系统指定的默认编辑器,一般可能是vi或者vim。如果用户有其他的偏好,可以自行设置编辑器,比如设置为deepin-editor:

$ git config --global core.editor deepin-editor
4.4.3.3 查看配置信息

要查看已有的配置信息,可以使用git config --list命令:

$ git config --list
user.name=zhangsan
user.email=zhangsan@uniontech.com
core.editor=deepin-editor

4.5 Git Flow开发模型

Git Flow是构建在Git之上的一个组织软件开发活动的模型,是在Git之上构建的软件开发最佳实践。Git Flow是使用Git进行源码管理时的一套行为规范和简化部分Git操作的工具。

一般而言,软件开发模型有常见的瀑布模型、迭代开发模型以及敏捷开发模型等。每种模型有各自的应用场景。Git Flow重点解决的是源码在开发过程中的各种冲突导致开发活动混乱的问题。因此,Git Flow可以很好地与各种现有开发模型结合使用。

在开始研究Git Flow的具体内容前,可以先了解模型的全貌,如图4-46所示。

图4-46 Gir Flow模型

Git Flow模型中定义了主分支和辅助分支两类分支。其中主分支用于组织与软件开发、部署相关的活动,辅助分支用于组织解决特定问题而进行的各种开发活动。

4.5.1 主分支

主分支是所有开发活动的核心分支,所有的开发活动产生的输出物最终都会反映到主分支的代码中。主分支分为master分支和develop分支。

1.master分支

master分支上存放的应该是可随时在生产环境中部署的代码(Production Ready State)。当开发活动告一段落,产生了新的可部署的代码时,master分支上的代码会被更新。另外,每一次更新时最好添加对应的版本号标签(Tag)。

2.develop分支

develop分支保存当前最新开发成果。通常这个分支上的代码是可进行每日夜间发布的代码(Nightly build)。因此这个分支有时也可以被称作“integration 分支”。当develop分支上的代码实现了软件需求说明书中所有的功能、通过了所有的测试后,并且代码已经足够稳定时,就可以将所有的开发成果合并回master分支。对于master分支上新提交的代码建议都添加上一个新的版本号标签,供后续代码跟踪使用。

因此,每次将develop分支上的代码合并回master分支时,都可以认为一个新的可在生产环境中部署的版本产生了。通常而言,“仅在发布新的可部署的代码时才更新master分支上的代码”是推荐所有人都遵守的行为准则。基于此,理论上,每当有代码提交到master分支时,可以使用Git Hook触发软件自动测试以及生产环境代码的自动更新操作。这些自动化操作将有利于减少新代码发布之后的一些事务性工作。

4.5.2 辅助分支

辅助分支是用于组织解决特定问题的各种开发活动的分支。辅助分支主要用于组织软件新功能的并行开发、简化新功能开发代码的跟踪、辅助完成版本发布以及对生产代码的缺陷进行紧急修复。这些分支与主分支不同,通常只会在有限的时间范围内存在。辅助分支包括:用于开发新功能的feature分支、用于辅助版本发布的release分支、用于修复生产代码中的缺陷的hotfix分支。这些分支都有固定的使用目的和分支操作限制。单纯从技术的角度来说,这些分支与Git的其他分支并没有什么区别,但通过命名定义了使用这些分支的方法。

1.feature分支

feature分支的使用规范包括:可以从develop分支发起feature分支,代码必须合并回develop分支,feature分支命名时可以使用除master、develop、release-*、hotfix-*之外的任何名称。

feature分支(有时也可以叫作“topic分支”)通常是在开发一项新的软件功能的时候使用,这个分支上的代码变更最终会合并回develop分支或者被抛弃掉(例如实验性的且效果不好的代码变更)。

一般而言,feature分支代码可以保存在开发者自己的代码库中而不会强制提交到主代码库里。

2.release分支

release分支的使用规范包括:可以从develop分支派生,代码必须合并回develop分支和master分支,分支命名惯例为release-*。

release分支是为发布新的产品版本而设计的。在这个分支上的代码允许做小的缺陷修复、准备发布版本所需的各项说明信息(版本号、发布时间、编译时间等)。在release分支上的这些操作可以让develop分支空闲出来以接收新的feature分支上提交的代码,进入新的软件开发迭代周期。

当develop分支上的代码已经包含所有即将发布的版本中所计划包含的软件功能,并且已通过所有测试时,就可以考虑创建release分支了。而所有在当前即将发布的版本之外的业务需求一定要确保不能混到release分支内(避免由此引入一些不可控的系统缺陷)。成功派生release分支并赋予版本号之后,develop分支就可以为“下一个版本”服务了。所谓“下一个版本”,是指在当前即将发布的版本之后发布的版本。版本号的命名可以依据项目定义的版本号命名规则进行。

3.hotfix分支

hotfix分支的使用规范包括:可以从master分支派生,代码必须合并回master分支和develop分支,分支命名惯例为hotfix-*。除了是计划外创建的以外,hotfix分支与release分支十分相似,都可以产生一个新的可在生产环境中部署的软件版本。当生产环境中的软件遇到异常情况或者发现严重到必须立即修复的软件缺陷的时候,就需要从master分支上指定的标签版本派生hotfix分支来组织代码的紧急修复工作。这样做显而易见的好处是不会打断正在进行的develop分支的开发工作,能够让团队中负责新功能开发的人与负责代码紧急修复的人并行开展工作。

Git Flow开发模型从源码管理角度对通常意义上的软件开发活动进行了约束,应该说为开发者的软件开发提供了一个可供参考的管理模型。Git Flow开发模型让开发代码仓库保持整洁,让小组各个成员的开发相互隔离,能够有效避免处于开发状态中的代码相互影响而导致的效率低下和混乱。在不同的开发团队、不同的文化、不同的项目背景等情况下都有可能需要对开发模型进行适当的裁剪或扩充。

4.6 版本号管理

关于版本号,现使用x.y.z共3位的版本号代替过去的4位版本号。master分支发布版本之后,按情况新建维护分支,如:DDE项目发布1.0.0版本,则新建maintain/1.0分支用于DDE 1.0的维护。如果主分支当前版本为1.1.0或者更大的版本号2.0.0,则maintain/x.y分支发布版本为x.y.1、x.y.2,依次累加,如maintain/1.0分支上发布的Tag为1.0.1、1.0.2等。正常迭代(bug fix)时版本号第三位z自增,当有接口新增时第二位y自增,当有重大更新可能导致不兼容时第一位x自增。

4.7 统信UOS的开发者模式

统信UOS的特性之一就是拥有可靠的安全机制,通过设置多重安全机制来保障系统安全,包括GRUB权限控制、安全启动机制、root权限限制、应用证书签名机制。

与目前传统的其他Linux发行版相比,统信UOS的开发者模式功能更能保障系统安全。

开发者模式是统信UOS新定义的安全模式,借鉴Android系统对root权限的保护以及默认禁止安装非应用市场的应用,为最终用户带来更好的系统使用安全保障。统信UOS默认关闭开发者模式,普通用户无root权限便无法对统信UOS做任何更改,可以避免误操作引起的系统故障和潜在的安全风险。统信UOS桌面版默认禁用开发者模式;在未进入开发者模式时,用户无法进行root权限操作;如果在终端中执行sudo操作会提示“无root权限,如想获得root权限可以在控制中心选择进入开发者模式”。

开发者模式主要受众对象为统信UOS开发人员,使用该模式需要用户在统信UOS环境上拥有一定的研发能力,打开开发者模式意味着放开统信UOS为普通用户设置的所有安全保护。

4.7.1 潜在风险说明

1.sudo“提权”

使用sudo命令表示以系统管理者的身份执行命令,也就是说,经由sudo所执行的命令就如同root亲自执行;使用sudo命令可以安装和运行非应用商店签名的安全应用,但也可能导致系统的完整性遭到破坏,而造成系统无法正常使用,也可能造成数据丢失等不可逆损失。

2.root管理员权限

root管理员拥有整个系统的最大权限,所有命令均可以使用;个人下载、使用非应用商店的签名应用,也让恶意软件有了捷径可入,系统很容易被病毒侵入,大大地影响了系统的安全性。没有了一定的保护,很多“流氓”软件和应用可能会在系统里为所欲为,其侵入系统后,窃取系统里的个人隐私及信息,这样很容易出现个人或公司财产被窃取的风险;因操作失误而删除系统的一些重要软件或文件,可能会导致系统不稳定,比如系统的操作变“卡”,或者造成一些其他软件没办法正常使用,严重时会直接导致系统无法启动,造成个人或公司数据丢失等损失。

4.7.2 开启方法

首先需要确认拥有统信UOS在线网络账号,如果还没有统信UOS在线网络账号,可在统信UOS官网进行注册。打开开发者模式的方法如图4-47所示。

1.在线模式

进入统信UOS后,打开控制中心,打开开发者模式模块,进入开发者模式,选择在线模式,输入统信UOS在线网络账号的用户名和密码。

2.离线模式

在控制中心,单击开发者模式模块,进入开发者模式模块,选择离线模式,导出机器信息;上传导出的机器信息文件到网站https://www.chinauos.com/developMode,导出文件的扩展名为.json。单击下载离线证书按钮,下载离线证书。在控制中心,单击开发者模式模块,进入开发者模式页面,选择离线模式,导入证书;系统获取到证书后进入开发者模式。

图4-47 打开开发者模式 yM6bj35MQ/KNCiCRi7pBET6iSfJO8KTulV1POm70MA8570jZdKfj1EQsBstR8GVi

点击中间区域
呼出菜单
上一章
目录
下一章
×