什么是 deb、ipa 和 pxl,iphone软件格式
前言:
目前 iOS 平台上常见的安装包有三种,deb、ipa 和 pxl。
其中 deb 格式是 Debian系统(包含 Debian和 Ubuntu)专属安装包格式,配合 APT 软件管理系统,成为了当前在Linux 下非常流行的一种安装包。进入 2.x 时代之后有 Cydia 作者 Jay Freeman (saurik)移植到 iPhone平台上,一起的还有 APT 软件管理系统。
而 ipa 格式则是苹果在 iOS 平台上推出的专属软件安装包,在2.0固件开始才正式使用,是目前iPhone/iPod Touch/iPad 平台上唯一的官方安装包。
而pxl格式则起源于 Mac 系统上的 pkg 安装包,被广泛应用于1.x固件时代,曾经是 iPhone平台上唯一的软件安装包,现在仍在被91等软件所使用。
.deb
deb 是 Unix 系统(其实主要是 Linux )下的安装包,基于 tar 包,因此本身会记录文件的权限(读/写/可执行)以及所有者/用户组。
由于 Unix 类系统对权限、所有者、组的严格要求,而 deb 格式安装包又经常会涉及到系统比较底层的操作,所以权限等的设置尤其重要。
deb 包本身有三部分组成:
∙数据包,包含实际安装的程序数据,文件名为 data.tar.XXX;
∙安装信息及控制脚本包,包含 deb 的安装说明,标识,脚本等,文件名为 contro;
∙最后一个是 deb 文件的一些二进制数据,包括文件头等信息,一般看不到,在某些软件中打开可以看到。
deb 本身可以使用不同的压缩方式。tar 格式并不是一种压缩格式,而是直接把分散的文件和目录集合在一起,并记录其权限等数据信息。之前提到过的data.tar.XXX,这里 XXX 就是经过压缩后的后缀名。deb 默认使用的压缩格式为 gzip 格式,所以最常见的就是 。常有的压缩格式还有 bzip2 和 lzma,其中 lzma 压缩率最高,但压缩需要的CPU 资源和时间都比较长。
包含的是实际安装的程序数据,而在安装过程中,该包里的数据会被直接解压到根目录(即/ ),因此在打包之前需要根据文件所在位置设置好相应的文件/目录树。
而 contro 则包含了一个deb 安装的时候所需要的控制信息。一般有 5 个文件:∙control,用了记录软件标识,版本号,平台,依赖信息等数据;
∙preinst,在解包 前运行的脚本;
∙postins t,在解包数据后运行的脚本;
∙prerm,卸载时,在删除文件之前运行的脚本;
∙postrm,在删除文件之后运行的脚本;
∙在 Cydia 系统中,Cydia 的作者 Saurik另外添加了一个脚本,extrain st_,作用与 postins t 类似。
安装包的特点
.deb
∙丰富的资源:Cydia 上本身就不少,更何况任何格式的安装包都可以转换为 deb。
∙相对方便的在线购买模式:Cydia Store,不过尽管没有App Store 的5台设备的限制,但对国内用户来说,付款方式比较困难。
∙破解难度较大,没有使用 App Store 的验证方式,所以必须将验证和防破解措施加入程序里面,这样就比较难破解,对软件开发者来说是个好事。
∙完善的 Unix 文件系统支持:无需以命令设置文件的权限、所有者和用户组(当然也可以以脚本来设置)
∙完善的脚本支持:5个脚本依照安装和卸载的先后顺序执行,可以提供更多选择。比如备份还原操作,可以在 preinst中备份文件,而在 postrm中还原文件
∙严格的依赖关系:deb 遵循严格的依赖关系(于 Depends和 Pre-Depends指定),可以确保软件运行所必需的组件。在线安装的时候会自动安装所依赖的软件包。卸载时也很重要,比如软件包 A 依赖于 B,当卸载 B 的时候会提示A 依赖于 B,卸载掉 B 的话会导致 A 不能用,这样可以确保系统的完整性和稳定性。
∙Conflic ts、Replace s、Provide s 等键值的存在可以实现冲突提示或替换其它软件包。
∙完全权限:由于 deb 必须以最高权限 root 的身份运行,deb可以对系统任何位置进行操作,换句话说,deb 拥有对整个系统的完全控制,因此 deb 安装包软件可以实现很多 ipa 不能实现的功能。
∙相对简单的获取方式(在线或离线)和安装方式,也不用担心在不同机器上同步会删掉程序的问题。
∙安装相对简单:其实无论是哪种安装包,安装方法都不算很复杂,只不过 deb 稍微复杂一些。deb 的安装方法大体有 5 种:
1.Cydia 或同类 APT 管理软件在线安装,这个是最佳的安装方式,因为通常无需考虑依赖关系,但
缺点是对网络的要求比较高;
2.命令行中以 dpkg -i XXX.deb 的形式安装,好处是可以以通配符一次性安装多个 deb,而且也可
以直接看到脚本的运行状况和安装成功/失败的提示信息,缺点是需要命令行软件的支持,如
Putty/WinSCP的控制台/iSSH/MobileT ermina l,很多人也不熟悉命令行下的操作。另外,安装完后会不显示图标;
3.放置于 AutoIns tall 目录重启安装。该方法实际是Cydia 提供的一个启动脚本,在每次系统启动
时以 dpkg 命令安装 AutoIns tall 目录下的 deb,好处是不需要命令行操作,缺点是必须要重启,有些甚至要重启两次,也会出现不显示图标的情况;
4.利用 iFile 安装,好处是图形化操作,桌面会显示图标,缺点是不能一次安装多个 deb;
app store下载不了软件
5.用 Cyder II 等软件来安装,其原理是模拟一个 APT 软件管理器来下载相应的 deb 文件并传到
设备,然后以前面几种方式来安装。
总体来说,deb 的安装都是依赖于 dpkg -i 命令来安装,只不过有些是在命令行下输入命令,有些是提供了图形界面。但除了 Cydia 安装一种方式之外,其余几种安装方式都存在一些共有的问题:
∙不会自行搜索依赖关系,必须手动提供所依赖的 deb;
∙Cydia 会读取安装脚本里的一些特殊语句,比如仅在全新安装时执行而不在升级时执行,安装完成后重启 SpringB oard 或设备等等。
当然了,deb 软件的卸载也比较简单,有两种方式:
∙Cydia 里卸载,优点是卸载过程和提示信息很详细,全图形界面操作,同时也提供了重新安装的选项;
∙以 dpkg -r Package_ID 命令或 dpkg -P Package_ID 命令来卸载(详情后面会说);
∙Cydelet e 来卸载,优点是可以直接在桌面上卸载有图标的软件,但对那些没有图标的无能为力。其
实,不管是安装还是删除,都可以才要全手动的方法。即,解包 deb 之后,自己将文件放到相应位置,然后设置权限等并执行脚本。但这样有必要么?
deb 的安装过程如下:
1.读取数据库并锁定,避免同时有两个安装程序在运行
2.读取 control中的 Package(软件包标识)和版本信息,并搜索数据库,若已存在,则卸载之后
再安装;
3.检查 Depends, Pre-Depends, Conflic ts 和 Replace s,如果检测到已存在 Conflic ts 中存在的
软件,则报错并终止安装。如未到 Pre-Depends指定的软件,则报错并终止安装。如到
Replace s 中指定的软件,则卸载之;
4.将数据写入 /var/lib/dpkg/status文件中;
5.执行 preinst脚本(如果有);
6.解包 ,将文件放置于相应位置,并将文件列表写入 /var/lib/dpkg/info/XXX.list;
7.运行 postins t 和 extrain st_ 脚本(如果有);
8.如果之前的安装都没有出错,即安装成功,那么会在 status文件中写入 Status: install ok
install ed 信息,否则会写入其它状态数据,比如 Unpacke d (未解包数据)、Failed-config(脚本未能成功执行)、Half-install ed(安装失败等);
9.重新加载数据库并解除锁定。
deb 的卸载过程如下:
1.读取数据库并锁定;
2.根据软件标识搜寻数据库;
3.检查是否有软件依赖于待卸载的软件,如果有则提示,并中断卸载;
4.执行 prerm 脚本(如果有);
5.读取 /var/lib/dpkg/info/XXX.list 文件,并删除 list 文件中记录的全部文件和非空文件夹;
6.运行 postrm脚本;
7.如果卸载命令是 dpkg -r,则保留 status中的记录并改为 Status: Not install ed;如果卸载
命令是 dpkg -P,则删除全部数据;
8.如果卸载过程没有错误的话,重新读取数据库并解除锁定。
由于 deb 安装的软件可能会在运行时在 /var/mobile/Documen ts 下放置存档文件,或在
/var/mobile/Library/Prefere nces 下放置设置文件,而这些文件并没有记录在 list 文件里,所以卸载的时候不会被删除。
.ipa
使用过 Mac OS 的人可能都知道,Mac 下的软件大部分都只有一个.app 目录,里面包含了程序全部资源和可执行文件。简单来说,Mac 下的软件就像是 Windows下的绿软件一样,解压后即可使用,不需要安装,卸载的话也只用删除程序文件即可(这里不涉及 pkg 格式安装包)。而 ipa 格式可以视为这
种 .app 软件的衍生物。
ipa 文件实质是一个 zip 压缩包(不是 rar 或 7z 包),包含 3 个组件:
∙payload目录下的 .app 目录,这个是软件的主程序;
∙iTunesA rtwork,实质是一个无后缀名的 png 图片,用来在 iTunes中显示图标;
∙iTunesM etadat a.plist,记录购买者信息、售价等数据。
由于 zip 包不能记录权限和所有者等信息,所以苹果规定了 ipa 的安装方式,即全部 ipa 都会解包安装在 /var/mobile/Applica tions目录下,全部文件和目录的所有者及用户组均设为mobile(ID 为501),主程序(可执行文件)的权限设为 0755 (所有人都可以执行,但只有所有者可以修改),可执行文件在plist 中定义。全部目录权限设为 0755,而其它所有文件都设为 0644(仅所有者可以修改,其余人只允许读取,全部人都不允许执行)。
ipa 解包后并非直接放置于 Applica tions目录下,而是放在一串由随机码构成的目录下,其作用在于,只允许这个软件运行在一个特定的沙盒(Sandbox)中,不能干扰其他软件。因此那串随机码目录下,除了ipa 本身的三个组件之外,还有三个目录:
∙Library,一般是用了储存设置文件等数据;
∙Documen ts,存储数据,多用了保存存档;
∙tmp,临时文件夹。
由于这个软件只能在这个特定的目录下运行(当然了,部分程序会调用系统的通讯录、相机等组件,但仍然是受限制的),从而保证了整个系统的安全性和稳定性。
由于 Unix 系统下对权限的规定相当严格,所以“越权”的行为是绝对不允许的。举个例子,mobile用户无权删除root 所有的文件,因为 root 的权限高于 mobile。所以有些人在修改 ipa 安装后的文件时,
比如进行或者修改存档,发现不能删除干净软件,或不能保存,这是因为删除时不能删除 root 所有的文件,程序本身也无法对 root 所有的存档文件进行写入操作。
安装包的特点
.ipa
∙丰富的资源:App Store 上那么多资源,apptrac kr 等网站也提供了很多破解版。
∙完善的更新、后期服务。
∙只能使用最小权限,保障安全性。
∙不涉及系统级的操作,所以一般不容易造成死机或白苹果(有些是因为资源消耗太大所以卡死)。
∙便捷的安装方式,无论是直接在设备上用App Store安装,还是用 iTunes来同步,抑或是用Install ous 和 91 这类第三方软件来安装,都是很方便快速的安装方式。
∙超级简单的卸载方式:还有什么比只需要点一个 X 就能卸载更简单呢?
∙完全删除,不会留下任何垃圾文件(如存档、设置文件等)
∙总体来说破解还是比较容易的,但现在越来越多软件加入了防破解措施。
之前提到过,ipa 软件是被安装在一个类似于沙盒的环境中,除了能对 /var/mobile/Media/DCIM 目录(拍照、截图存放目录)进行操作,或是调用壁纸、铃声、相机等组件,不能对系统进行任何干涉,这样在最大程度上保证了系统的稳定运行,也不会干扰其它软件的正常使用。但问题是,由于 ipa 软件的权限很低,想要对系统进行修改,尤其是应用补丁时,ipa 就无能为力了。
ipa 软件官方的安装方式有两种,一是在 App Store 这个软件中下载安装,二是用 iTunes同步。
前者的问题主要是网络问题,网速不好很容易安装失败;GPRS之类的上网安装又很耗流量。后者的问题主要是不能在不同系统下使用(包含不同电脑和同一部电脑上的不同系统),在其它系统上同步会抹掉原有的软件。当然了,iTunes每次同步时间比较长也是经常被人诟病的。尤其是当安装软件比较多的时候,每次同步之前的备份需要很长很长时间,这个很恶心(不过可以直接X 掉备份操作)。
由于以上两种方式存在一些问题,所以很多人会选择使用 Install ous 或 91 来安装 ipa,这也确实是个不错的选择。
Install ous 一般没什么问题,但对部分验证比较严格的 ipa 处理不是很好。虽然 Install ous 基本能代替 iTunes,但毕竟不完全等同。最典型的就是Install ous 安装 Microso ft 官方出的 Live Messeng er (正版,非破解版)时不能运行。实际上 Install ous 对很多未破解的正版软件支持不是很好。
至于91,经常被人批评。91 虽然可以安装ipa,但除了 Install ous 都有的正版软件的支持问题外,由于91的安装机制有缺陷,软件不能实现多语言,只会使用英文界面,而忽略掉 zh_CN.lproj,zh_TW.lproj 这些语言包。这对那些用希望使用版的人来说实在是一个悲剧。所以通常是要避免使用91来安装 ipa 的。
至于卸载,三种方法:
∙设备上按住图标直到开始晃动,点击图标左上角的 X 即可卸载;
∙于 iTunes中取消选中,然后同步
发布评论