如何让一套代码适配所有iOS设备尺寸?
时间:2025-11-04 23:36:44 出处:IT科技类资讯阅读(143)

随着移动互联网设备和技术的何让发展,各种移动设备屏幕尺寸层出不穷,套代折叠屏、码适分屏、设备悬浮窗等等,尺寸面对越来越多样的何让屏幕,如果为每种尺寸单独进行适配,套代不仅费时费力,码适还会增加端侧代码的设备开发与维护压力。如何让一套代码适配所有尺寸变化,尺寸增强App的何让通用能力?阿里巴巴文娱技术 氚雨 将分享优酷APP在iOS响应式布局技术上的实践和落地。
响应式是套代基于同一套代码,开发一个APP能够兼容多尺寸、码适多终端设备的设备显示,能够动态调整页面的尺寸布局以及容器的布局,充分利用当前屏幕的尺寸,为用户提供更好的浏览体验,提升APP开发效率和迭代效率。
一 、iOS布局尺寸预研
当下,iOS端的主要尺寸类型有五种:iPhone、iPad竖屏、免费信息发布网iPad横屏、iPad浮窗、iPad分屏。通常,App是按iPhone尺寸开发的,需要适配剩余的四种iPad尺寸。
iPad横、竖屏比较常见,旋转设备即可,比较特殊的是浮窗和分屏模式。自苹果iPad iOS 9开始,用户在打开一个应用时,从最底部上滑打开Dock,即可拖拽另一个App进入浮窗模式:
 
在支持分屏的iPad上拖拽到更边缘的地方即可开启分屏模式:
 
其中浮窗模式所有升级iOS 9的设备都支持,分屏模式只有最新版的硬件设备iPad mini 4、iPad Air 2及iPad Pro支持: 设备浮窗分屏
设备 浮窗 分屏 iPad mini 2 ✓ iPad mini 3 ✓ iPad mini 4 ✓ ✓ iPad Air ✓ iPad Air 2 ✓ ✓ iPad Pro ✓ ✓二、优酷iOS响应式方案
响应式布局的核心是设计统一的适配规则,并在屏幕尺寸发生变化时按布局规则重新布局,以适配不同屏幕尺寸,而大多数App在开发时一般只有适配iPhone的版本,亿华云在通过响应式适配更多机型时主要要解决三个方面的问题,即如何获取、更新响应式状态以进行对应的适配,如何计算在不同屏幕宽度下App内容的宽度、列数等布局参数,如何进行响应式下的数据处理以解决较难适配的组件、减少页面留白等,基于此我们开发了响应式布局SDK,负责统一管理响应式状态、处理布局逻辑、裁剪映射数据等。
 
响应式SDK在App中的位置
1、响应式App配置
App除了配置为universal版之外,要支持浮窗或分屏模式还需要进行一些配置:
(1)需要提供LaunchScreen.storyboard作为启动图,由于App支持的运行尺寸太多,不再适合用图片作为启动图。
(2)需要在info.plist中配置支持所有屏幕方向:
 
(3)注意不能勾选Requires full screen配置项或配置UIRequiresFullScreen为YES,如此会声明App要求全屏运行,自然表示不支持浮窗或分屏:
 
(4)支持分屏要求App的主Window需要使用系统UIWindow,不能继承,并且要通过init方法或initWithFrame:[UIScreen mainScreen].bounds方式初始化。
通过以上步骤开启浮窗、分屏能力后,在App内就无法再通过相关代码控制设备方向,以往通过如下代码可控制ViewController为竖屏,香港云服务器而支持分屏后如下方法系统不再调用,默认所有ViewController支持所有屏幕方向:
 
如下强制设置屏幕方向的黑方法也已失效:
 
这种设计的主要原因是,当一个App支持分屏后,就不再单独占用整个屏幕,当另一个App同时运行时,同一块屏幕不可能出现一个横屏、另一个竖屏。此类问题没有完美的解决方案,为了保证用户体验,支持分屏的App必须所有页面适配所有屏幕方向,这也体现了苹果对用户体验的极致追求,参见DeveloperForums中开发人员的讨论:https://developer.apple.com/forums/thread/19578
2、响应式SDK
响应式状态管理
响应式状态提供了当前是否开启响应式、响应式布局尺寸类型、当前布局window尺寸等相关状态量,响应式SDK会在屏幕尺寸变化后更新响应式状态,并通过系统通知和自定义通知机制,通知相关业务方。
// 响应式开启关闭状态 typedefNS_ENUM(NSInteger, YKRLLayoutStyle) { YKRLLayoutStyleNormal =0, // 响应式状态关闭 YKRLLayoutStyleResponsive =1, // 响应式状态开启}; // 响应式屏幕尺寸类型,页面可依据此类型区分是否分屏等 typedefNS_ENUM(NSInteger, YKRLLayoutSizeType) { YKRLLayoutSizeTypeS =0, // eg. phone pad浮窗 YKRLLayoutSizeTypeL =1, // pad YKRLLayoutSizeTypeXL =2, // 预留 }; // 响应式屏幕状态类型(一共有十种类型) typedefNS_OPTIONS(NSUInteger, YKRLLayoutScreenType) { YKRLLayoutScreenTypeUnknown = (1<<0), //未知 YKRLLayoutScreenTypePortrait = (1<<1), //竖屏全屏 YKRLLayoutScreenTypeLandscapeLeft = (1<<2), //横屏全屏左 … … };响应式SDK声明了YKRLLayoutStyle、YKRLLayoutSizeType、YKRLLayoutScreenType三种枚举状态标记当前的响应式状态,分别表示响应式开启关闭状态,当前尺寸类型及具体屏幕类型,一般业务方只需要获取是否是响应式设备状态,对于在不同宽度下页面布局不一致的业务方可以通过尺寸类型状态进行区分适配,而对于需要具体知道当前屏幕状态的业务方可以通过屏幕类型获取,屏幕类型只包含当前iOS设备已支持的屏幕状态,随着设备类型的丰富,如出现折叠屏等,屏幕类型会作相应扩展。每当设备旋转或用户开启分屏时,响应式SDK都会在系统回调中更新当前响应式状态,并通知业务方响应式状态的改变。
响应式布局规则
优酷响应式布局规则主要包含列数适配规则、宽度适配规则等,比如多列均分组件的列数在不同屏幕宽度下是可变的,响应式SDK会根据当前的响应式状态输出合适的布局列数等,对于每一个布局规则,响应式SDK中都有相应的布局适配逻辑,响应式布局规则满足优酷App整体UI规范,业务方直接指定自己所需要的规则即可,除少数特殊规则之外,大部分布局规则都用于组件列数和组件宽度布局,此类响应式布局规则中会指定一个标准宽度,并根据组件原始布局列数和标准宽度计算出组件标准宽度,进而根据当前屏幕宽度计算出适配后的组件列数,可用如下公式表达:
响应式适配列数(标准屏幕宽度下组件列数) = (当前屏幕宽度÷(标准屏幕宽度÷标准屏幕宽度下组件列数×scale))
其中,scale为组件放大参数,标准屏幕宽度下组件原宽度投放到iPad上会过小,可以通过scale参数进行适当放大。

首页Feed流随屏幕宽度改变而变化列数
首页Feed流随屏幕宽度改变而变化列数 对于组件宽度适配,响应式规则会先计算标准屏幕宽度下的组件列数并进行列数适配,再通过适配后的列数计算适配宽度:
响应式适配宽度(标准屏幕宽度下组件宽度) = (当前屏幕宽度 - 边距间距)÷响应式适配列数(标准屏幕宽度÷标准屏幕宽度下组件宽度)
 
横滑组件在不同屏幕宽度下的组件宽度变化
在以上公式中调整标准屏幕宽度及组件放大scale即可得到适配效果较好的通用布局规则,经过设计同学在各种设备尺寸下的调整总结,当前优酷中使用的标准屏幕宽度为440dp,scale为1.2倍,适配效果最佳。组件适配逻辑已在响应式SDK布局规则中统一实现,业务方直接调用即可,也方便设计同学对整个App的组件适配进行统一调整。
响应式SDK中YKRLCompLayoutManager类封装了相关布局逻辑,业务方也可通过YKRLCompLayoutAdapterProtocol协议二次处理,以定制响应式布局逻辑,在App统一架构中直接调用YKRLCompLayoutManager的相关接口即可获取按照响应式规则计算后的布局参数,如列数、宽度等,当监听响应式状态发生变化时重新布局即可完成响应式布局。
 
响应式数据处理
响应式数据处理包括数据映射、数据过滤、数据合并、数据补齐,数据处理逻辑两端一致,详细介绍可以参见:一个APP如何适配多个Android终端?,下面简单介绍一下iOS响应式数据映射的实现。
有些组件无法通过规则适配不同的屏幕尺寸,比如在手机上占整个屏幕宽度的组件(下图左侧带视频播放预约组件),如果采用等比放大的适配规则,在iPad端会显得过大,此类组件可以映射成相对简单的组件,以适配不同的屏幕尺寸。
 
带视频播放的预约组件难以较好的适配,映射为不带播放的预约组件适配
优酷采用了统一抽象的数据结构,在组件映射方面比较容易实现,只需修改对应的组件标志即可。得益于统一架构的普遍推广和使用,我们在统一架构内添加了组件映射能力,方便各业务方调用,响应式SDK中提供了数据裁剪映射规则,业务方可以查询、增加相应的裁剪映射规则。对于未接入统一架构的业务方则需要业务方实现相关数据处理。 3 响应式业务流程
3、响应式业务流程
优酷响应式业务流程两端一致,响应式布局需要进行数据处理、响应式状态管理、触发布局等工作,优酷响应式SDK会在接口返回后处理相关数据,为统一架构提供相应布局接口,监控屏幕尺寸变化并触发布局等。
 
4、优酷响应式方案落地
iOS开发中经常采用绝对布局,而实现响应式的主要工作是将“绝对布局”修改为“相对布局”,接入工作较安卓更为繁琐。
         iOS响应式可以按Window->ViewController->容器->组件的层级完成接入。
Window在配置支持分屏后会由系统自动布局,在RootViewController树中的子ViewController也会随Window自动布局,而特殊ViewController,如多tab页面的子ViewController等,未加入RootViewController树,需要手动修改为相对布局,页面可通过Autoresizing或监听响应式状态实现相对布局。
 
接入统一架构的页面容器由统一架构提供,统一架构容器的布局列数管理、布局宽度管理等都已接入响应式SDK,为业务方接入减少了大量工作,业务方只需指定自身所采用的布局规则即可,ViewController和容器实现相对布局后,每当屏幕尺寸变化时响应式SDK会通知容器重新布局,变换组件列数或宽度等,组件卡片只需要按容器提供的尺寸进行布局即可。
组件卡片内一般使用Frame绝对布局,需要修改为相对布局,简单的布局逻辑可以使用Autoresizing实现,方便快捷,复杂的布局可以使用AutoLayout或Masonry等自动布局框架(性能较差)实现,也可以在layoutSubviews方法中重新计算布局,业务方可以选择合适的方式实现自动布局,以减少接入成本。
对于未接入统一架构的页面则需要在本页面布局逻辑中手动接入响应式SDK相关布局接口。
 
优酷响应式大图
三、优酷响应式成果
落地过程中发现许多组件卡片布局时依赖了屏幕宽度,不符合响应式开发规范,导致适配响应式时工作量较大。每一层View只应依赖父层View布局,各层View实现相对布局后,每当屏幕尺寸改变时各层View会自动适配,同时容器的组件列数和尺寸会按响应式规则进行适配,一套代码即可适配所有屏幕尺寸,实现响应式布局。 三 优酷响应式成果
目前优酷全端已具备响应式布局的能力,八月份已上线universal版本,一套代码支持iPhone、iPad竖屏、iPad横屏、浮窗、各种比例分屏,为用户提供了更好更丰富的用户体验。
 
优酷Universal版首页竖屏、横屏、分屏效果
 
优酷Universal版播放页竖屏、横屏、分屏效果
四、总结
响应式能力是多端投放能力的第一步,优酷实现响应式布局后对开发、设计和产品都提出了更高的要求,同时鉴于iPad低端设备占比较高,业务开发过程中不仅要考虑通投能力,更要求App始终保持更高的性能和稳定性,这是我们持续在努力的。
苹果2020年底将推出基于ARM架构的MacBook,也有媒体曝光,苹果正在申请折叠屏相关的专利,相信未来苹果设备的尺寸会越来越丰富,App适配提效是绕不开的话题,而优酷响应式的开发极大扩展了iPhone版App的适用场景,是解决多种设备支持的更好途径,为适应未来更复杂的设备场景打下坚实基础。
【本文为专栏作者“阿里巴巴官方技术”原创稿件,转载请联系原作者】
戳这里,看该作者更多好文
猜你喜欢
- 以硬盘制作启动盘的教程(轻松创建自己的启动盘,解决系统问题一键搞定)
 - 电脑剪映字幕遮挡教程(简单易学的剪映字幕遮挡技巧帮你提升视频编辑技能)
 - 你可能会有很多理由想要把一个应用、一个用户或者一个环境与你的 linux 系统隔离开来。不同的操作系统有不同的实现方式,而在 linux 中,一个典型的方式就是 chroot 环境。在这份教程中,我会一步一步指导你怎么使用 chroot 命令去配置一个与真实系统分离出来的独立环境。这个功能主要可以用于测试项目,以下这些步骤都在 Ubuntu 14.04 虚拟专用服务器(VPS)上执行。学会快速搭建一个简单的 chroot 环境是一项非常实用的技能,绝大多数系统管理员都能从中受益。Chroot 环境一个 chroot 环境就是通过系统调用,将一个本地目录临时变成根目录。一般所说的系统根目录就是挂载点/,然而使用 chroot 命令后,你可以使用其它目录作为根目录。原则上,任何运行在 chroot 环境内的应用都不能访问系统中其他信息(LCTT译注:使用 chroot 把一个目录变成根目录,在里面运行的应用只能访问本目录内的文件,无法访问到目录外的文件。然而,运行在 chroot 环境的应用可以通过 sysfs 文件系统访问到环境外的信息,所以,这里有个“原则上”的修饰语)。Chroot 环境的用处 测试一个不稳定的应用服务不会影响到整个主机系统。 就算使用 root 权限做了些不当的操作,把 chroot 环境搞得一塌糊涂,也不会影响到主机系统。 可以在你的系统中运行另外一个操作系统。举个例子,你可以在 chroot 环境中编译、安装、测试软件,而不去动真实的系统。你也可以在64位环境下使用 chroot 创建一个32位环境,然后运行一个32位的程序(LCTT泽注:假如你的真实环境是32位的,那就不能 chroot 一个64位的环境了)。但是为了安全考虑,chroot 环境为非特权用户设立了非常严格的限制,而不是提供完整的安全策略。假如你需要的是有完善的安全策略的隔离方案,可以考虑下 LXC、Docker、vservers等等。Debootstrap 和 Schroot使用 chroot 环境需要安装 debootstrap 和 schroot,这两个软件都在 Ubuntu 的镜像源中。其中 schroot 用于创建 chroot 环境。Debootstrap 可以让你通过镜像源安装任何 Debian(或基于 Debian 的)系统,装好的系统会包含最基本的命令。Schroot 命令允许用户使用相同的机制去创建 chroot 环境,但在访问 chroot 环境时会做些权限检查,并且会允许用户做些额外的自动设置,比如挂载一些文件系统。在 Ubuntu 14.04 LTS 上,我们可以通过两步来实现这个功能:1. 安装软件包第一步,在Ubuntu 14.04 LTS 主机系统上安装 debootstrap 和 schroot:复制代码代码如下:$ sudo apt-get install debootstrap $ sudo apt-get install schroot2. 配置 Schroot现在我们有工具在手,需要指定一个目录作为我们的 chroot 环境。这里创建一个目录先:复制代码代码如下:sudo mkdir /linoxide编辑 schroot 的配置文件:复制代码代码如下:sudo nano /etc/schroot/schroot.conf再提醒一下,我们现在是在 Ubuntu 14.04 LTS 系统上。假如我们想测试一个软件包能不能在 Ubuntu 13.10(代号是“Saucy Salamander”) 上运行,就可以在配置文件中添加下面的内容:复制代码代码如下: [saucy] description=Ubuntu Saucy location=/linoxide priority=3 users=arun root-groups=root 根据你的系统要求,调整上面的配置信息。3. 使用 debootstrap 安装32位 Ubuntu 系统Debootstrap 命令会在你的 chroot 环境里面下载安装一个最小系统。只要你能访问镜像源,你就可以安装任何基于 Debian 的系统版本。前面我们已经创建了 /linoxide 目录用于放置 chroot 环境,现在我们可以在这个目录里面运行 debootstrap 了:复制代码代码如下:cd /linoxide sudo debootstrap --variant=buildd --arch amd64 saucy /linoxide/ http://archive.ubuntu.com/ubuntu/ sudo chroot /linoxide /debootstrap/debootstrap --second-stage你可以将 --arch 的参数换成 i386 或其他架构,只要存在这种架构的镜像源。你也可以把镜像源 http://archive.ubuntu.com/ubuntu/ 换成离你最近的镜像源,具体可参考 Ubuntu 官方镜像主页。注意:假如你是在64位系统中创建32位系统,你需要在上面第3行命令中加入 --foreign 选项,就像下面的命令:复制代码代码如下:sudo debootstrap --variant=buildd --foreign --arch i386 saucy /linoxide/ http://archive.ubuntu.com/ubuntu/下载需要一段时间,看你网络带宽性能。最小系统大概有500M。4. 完成 chroot 环境安装完系统后,我们需要做一些收尾工作,确保系统运行正常。首先,保证主机的 fstab 程序能意识到 chroot 环境的存在:复制代码代码如下: sudo nano /etc/fstab在文件最后面添加下面的配置:复制代码代码如下:proc /linoxide/proc proc defaults 0 0 sysfs /linoxide/sys sysfs defaults 0 0保存并关闭文件。挂载一些文件系统到 chroot 环境:复制代码代码如下:$ sudo mount proc /linoxide/proc -t proc $ sudo mount sysfs /linoxide/sys -t sysfs复制 /etc/hosts 文件到 chroot 环境,这样 chroot 环境就可以使用网络了:复制代码代码如下:$ sudo cp /etc/hosts /linoxide/etc/hosts最后使用 schroot -l 命令列出系统上所有的 chroot 环境:复制代码代码如下:$ schroot -l使用下面的命令进入 chroot 环境:复制代码代码如下:$ sudo chroot /linoxide/ /bin/bash测试安装的版本:复制代码代码如下:# lsb_release -a # uname -a为了在 chroot 环境中使用图形界面,你需要设置 DISPLAY 环境变量:复制代码代码如下:$ DISPLAY=:0.0 ./apps目前为止,我已经成功地在 Ubuntu 14.04 LTS 上安装了 Ubuntu 13.10。退出 chroot 环境:复制代码代码如下:# exit清理一下,卸载文件系统:复制代码代码如下:$ sudo umount /test/proc $ sudo umount /test/sys
 - 电脑蓝牙连接出现内部错误解决方法(解决电脑蓝牙连接出现内部错误的有效办法)
 - 用卡纸打造立体电脑(DIY卡纸立体电脑的简易教程)
 - Linux VPS用户一般都通过SFTP/SCP协议连接OpenSSH Server进行文件传输,但有时候,你希望某些用户只能上传文件到网站目录,而不能够登录系统执行命令以及访问其他目录,这时用FTP Server就能很好地实现.Linux上常用的FTP Server有VSFTPD和ProFTPD,其中ProFTPD简单易用,功能也不错,这里以ProFTPD为例搭建FTP服务器.当然,FTP也可以作为局域网内文件共享的一种方式,比如你的室友使用Windows,向你的Ubuntu ProFTPD个人电脑上传了一部影片,这样就不用拿U盘去拷贝了,其他室友也可以从你的ProFTPD上下载影片.ProFTPDproftpd的配置方式类似apache,比vsftpd更易用,xampp就集成了proftpd. 复制代码代码如下:sudo apt-get install proftpd-basic 复制代码代码如下:sudo netstat -antp|grep proftpd查看proftpd监听的21端口 用proftpd提供的ftpasswd新建虚拟用户test并设置密码: 复制代码代码如下:复制代码代码如下:eechen: 复制代码代码如下:sudo chown proftpd:nogroup /png/proftpd/passwd 设置passwd文件读写权限,确保proftpd能读取该文件. 复制代码代码如下:vsftpd的简单配置复制代码代码如下:复制代码代码如下:复制代码代码如下:sudo /etc/init.d/vsftpd startsudo /etc/init.d/vsftpd stop
 - 揭秘电脑连WiFi密码错误的可能原因(解密密码错误背后的秘密和解决方法)
 - 今天,我们将向你展示如何在你的 Ubuntu 个人电脑或 Ubuntu 服务器中,直接通过 Ubuntu 官方软件仓库来配置本地软件仓库。在你的电脑中创建一个本地软件仓库有着许多的好处。假如你有许多电脑需要安装软件 、安全升级和修复补丁,那么配置一个本地软件仓库是一个做这些事情的高效方法。因为,所有需要安装的软件包都可以通过快速的局域网连接从你的本地服务器中下载,这样可以节省你的网络带宽,降低互联网接入的年度开支 ...你可以使用多种工具在你的本地个人电脑或服务器中配置一个 Ubuntu 的本地软件仓库,但在本教程中,我们将为你介绍 APT-Mirror。这里,我们将把默认的镜像包镜像到我们本地的服务器或个人电脑中,并且在你的本地或外置硬盘中,我们至少需要 120 GB 或更多的可用空间才行。 我们可以通过配置一个 HTTP 或 FTP 服务器来与本地系统客户端共享这个软件仓库。我们需要安装 Apache 网络服务器和 APT-Mirror 来使得我们的工作得以开始。下面是配置一个可工作的本地软件仓库的步骤:1. 安装需要的软件包我们需要从 Ubuntu 的公共软件包仓库中取得所有的软件包,然后在我们本地的 Ubuntu 服务器硬盘中保存它们。首先我们安装一个Web 服务器来承载我们的本地软件仓库。这里我们将安装 Apache Web 服务器,但你可以安装任何你中意的 Web 服务器。对于 http 协议,Web 服务器是必须的。假如你需要配置 ftp 协议 及 rsync 协议,你还可以再分别额外安装 FTP 服务器,如 proftpd, vsftpd 等等 和 Rsync 。复制代码代码如下:$ sudo apt-get install apache2然后我们需要安装 apt-mirror:复制代码代码如下:$ sudo apt-get install apt-mirror 注: 正如我先前提到的,我们需要至少 120 GB 的可用空间来使得所有的软件包被镜像或下载。2. 配置 APT-Mirror现在,在你的硬盘上创建一个目录来保存所有的软件包。例如,我们创建一个名为 /linoxide的目录,我们将在这个目录中保存所有的软件包:复制代码代码如下:$ sudo mkdir /linoxide现在,打开文件 /etc/apt/mirror.list :复制代码代码如下:$ sudo nano /etc/apt/mirror.list复制下面的命令行配置到 mirror.list文件中并按照你的需求进行修改:复制代码代码如下: ############# config ################## # set base_path /linoxide # # set mirror_path $base_path/mirror # set skel_path $base_path/skel # set var_path $base_path/var # set cleanscript $var_path/clean.sh # set defaultarch # set postmirror_script $var_path/postmirror.sh # set run_postmirror 0 set nthreads 20 set _tilde 0 # ############# end config ############## deb http://archive.ubuntu.com/ubuntu trusty main restricted universe multiverse deb http://archive.ubuntu.com/ubuntu trusty-security main restricted universe multiverse deb http://archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse #deb http://archive.ubuntu.com/ubuntu trusty-proposed main restricted universe multiverse #deb http://archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse deb-src http://archive.ubuntu.com/ubuntu trusty main restricted universe multiverse deb-src http://archive.ubuntu.com/ubuntu trusty-security main restricted universe multiverse deb-src http://archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse #deb-src http://archive.ubuntu.com/ubuntu trusty-proposed main restricted universe multiverse #deb-src http://archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse clean http://archive.ubuntu.com/ubuntu 注: 你可以将上面的官方镜像服务器网址更改为离你最近的服务器的网址,可以通过访问 Ubuntu Mirror Server来找到这些服务器地址。假如你并不太在意镜像完成的时间,你可以沿用默认的官方镜像服务器网址。这里,我们将要镜像最新和最大的 Ubuntu LTS 发行版 --- 即 Ubuntu 14.04 LTS (Trusty Tahr) --- 的软件包仓库,所以在上面的配置中发行版本号为 trusty 。假如我们需要镜像 Saucy 或其他的 Ubuntu 发行版本,请修改上面的 trusy 为相应的代号。现在,我们必须运行 apt-mirror 来下载或镜像官方仓库中的所有软件包。复制代码代码如下:sudo apt-mirror从 Ubuntu 服务器中下载所有的软件包所花费的时间取决于你和镜像服务器之间的网络连接速率和性能。这里我中断了下载,因为我已经下载好了 ...3.配置网络服务器为了使得其他的电脑能够访问这个软件仓库,你需要一个Web服务器。你也可以通过 ftp 来完成这件事,但我选择使用一个Web服务器因为在上面的步骤 1 中我提及到使用Web服务器。因此,我们现在要对 Apache 服务器进行配置:我们将为我们本地的软件仓库目录 建立一个到 Apache 托管目录 --- 即 /var/www/ubuntu --- 的符号链接。复制代码代码如下:$ sudo ln -s /linoxide /var/www/ubuntu $ sudo service apache2 start上面的命令将允许我们从本地主机(localhost) --- 即 http://127.0.0.1(默认情况下) --- 浏览我们的镜像软件仓库。4. 配置客户端最后,我们需要在其他的电脑中添加软件源,来使得它们可以从我们的电脑中取得软件包或软件仓库。为达到此目的,我们需要编辑 /etc/apt/sources.list 文件并添加下面的命令:复制代码代码如下: $ sudo nano /etc/apt/sources.list添加下面的一行到/etc/apt/sources.list中并保存。复制代码代码如下: deb http://192.168.0.100/ubuntu/ trusty main restricted universe注: 这里的 192.168.0.100 是我们的服务器电脑的局域网 IP 地址,你需要替换为你的服务器电脑的局域网 IP 地址复制代码代码如下:$ sudo apt-get update最终,我们完成了任务。现在,你可以使用sudo apt-get install packagename 命令来从你的本地 Ubuntu 软件仓库中安装所需的软件包,这将会是高速的且消耗很少的带宽。
 - 探究12年Macmini的性能和特点(一台经典之作,是否依然耐用可靠?)