Symbian:
Symbian C++程序安装包为sis或者sisx后缀的文件。开发者需要编译生成需要安装的二进制文件(如exe文件、res文件等),然后编写pkg文件,最后使用makesis命令行工具生成sis包,并使用signsis工具签名。pkg文件列出所有需要包括在sis包中的文件,包括文件的源路径及安装到手机上之后的目标路径,也可以指定少许的其他属性。例如,exe在安装过程中是否执行,在卸载程序过程中是否执行等。
sis包中包含的常见文件:
exe文件:可执行文件,由C++代码编译生成。
res文件:资源文件,一般包括字符串资源、UI元素及布局信息、菜单信息等,res文件由工程中的rss等文件由资源编译器编译生成特定格式的二进制文件。
mbm文件:图形资源文件,由图形资源编译器编译生成特定格式的二进制图形资源文件,Symbian只支持bmp文件。
其他文件:你可以直接包含原始的资源文件在sis包中,由程序在运行时动态加载。(不过这意味着你要手动编写更多的代码)
Symbian C++程序包sis文件,一般需要签名才能在手机上安装。sis包的签名可以限制以下几点:
1. 是否赋予可执行文件对应的权限。Symbian下系统相关的操作有权限限制,编写一个可执行文件代码时,需要在工程文件中指定执行权限。用以签名的证书文件中需要包括允许对应权限的信息,签名后才能在手机上正常安装,否则即使安装成功,执行时功能也会不正常。Symbian下的权限需要向厂商(如Nokia)申请,比较高的权限(例如AllFiles、TCB)等权限,厂商会严格审核。这个过程是人工进行的,你需要填写申请表,厂商决定是否通过。Symbian签名证书的申请,一般由公司等团体申请,个人开发者一般申请不到比较高的权限。Symbian签名是需要付费的,一般一个完整程序需要300欧。(目前有说上传Ovi Store的程序,可以获得Nokia的免费签名,但是这种免费签名能获得多高的权限,我还不清楚)
2. 可用以识别程序的开发者。sis包在提交签名前,需要用企业的ACS证书签名,这样程序中就包括了开发者的身份信息。
3. 可用以保证sis包的完整性。如果你在sis包签名之后,对sis包做出某些修改,安装时系统会检测到,并使安装失败。
4. 可用以确定sis包可以安装到哪些手机。厂商正式签名的sis包是可以安装到所有手机的,开发过程中一般使用开发者证书签名。开发者证书中包括了部分手机的IMEI信息,之后包括在开发者证书中的手机,才能正常安装开发者签名的sis包。
================================================================================
Android:
Android的安装包为apk文件,实际为zip包。其中包括了程序配置文件AndroidManifest.xml,原始的各种资源文件及java代码编译生成的class文件(打包并优化成dex文件)。对于资源文件,打包工具会生成一个resources.arsc文件,猜想该文件中应该包括了程序中的资源ID与元素的资源文件的对应关系。
Android的安装包夜需要签名,但是其签名只用来加入程序开发者信息,并保证安装包的完整性(即签名后不可修改)。Android签名并不用来限制程序的执行权限,程序的执行权限会显示在Android Market中的程序信息中,也可以在安装后可以在系统信息中看到。如果用户觉得实用了不该使用的权限,可以选择不安装或者卸载。Android签名也并不用来限制哪些手机可以安装程序,只要签名过的程序,在任何兼容的Android手机上安装。
Android签名自由,免费。
================================================================================
iOS:
iOS的安装包为bundle,实际就是一个目录。目录下包括Objective-C代码生成的可执行文件,原始的资源文件,另外还有签名信息。
其中重要文件包括:
1. Info.plist,程序属性文件,其中指定了程序入口——可执行文件的名字,主资源xib文件的名字等信息。启动程序时,系统根据这个文件中的信息,决定,加载哪个可执行文件及资源xib文件。
2. 可执行文件,Objective-C代码编译生成。
3. MainWindow.xib,主UI xib文件,程序启动时加载。
4. 其他xib文件,运行时被代码加载。
5. 其他资源文件,例如字符串资源,图片等。
iOS程序的签名分为三类:开发者证书+开发Provisioning文件、发布证书+AdHoc Provisioning文件、发布证书+AppStore Provisioning文件。当注册iOS开发者账号后,就可以申请证书,证书本身不需付费,但是iOS开发账号每年需要99美元。注册iOS账号后,可以登录iOS Development Protal/iTunes Connect管理开发相关证书、发布程序及查看程序销售情况等。
上面提到的证书跟其他地方的证书没什么区别,包括开发者的身份信息。Provisoning文件是会被安装到iOS设备上,程序安装到iOS设备上时,设备上必须存在匹配的Provisiong文件,程序才能安装成功,否则会提示“Invalid Signer”之类的错误。生成开发Provisioning文件或AdHoc Provisioning文件时,可选择加入到Provisioning文件中的iOS设备UDID列表。
开发者证书+开发Provisioning文件:一般用于开发过程中调试程序,其他Provisioning文件无法进行在线调试。
发布证书+AdHoc Provisioning文件:一般用于程序测试用,每个Provisioning文件可包括100个iOS设备的UDID。
发布证书+AppStore Provisioning文件:一般用于签名递交AppStore的程序,无法安装到设备上。
================================================================================
Windows Mobile:
Windows Mobile的安装包是cab文件,cab文件是用工具生成的包括可执行文件、资源文件等的压缩文件。为生成cab包,需要编写inf文件,inf文件中包括要安装的文件的源路径及安装好之后在手机上的目标路径,另外会包含一个setup动态链接库。setup动态链接库是安装微软定义接口实现的一个动态链接库,系统在安装及卸载过程中会调用这个动态链接库中对应的函数。
可执行文件:exe文件及其他必要的动态链接库。
资源文件:资源动态链接库,也可包括原始的资源文件,但是那就需要运行时的代码加载。
Windows Mobile的cab文件也是需要签名的,并且不管是cab文件,cab中包括的可执行文件都需要签名。不过签名不是必须的,如果不签名,在默认安全级别比较高的手机上,系统会弹出是否执行的提示,系统安全默认级别不高时,一般可正常执行。但是当调用到系统比较核心的功能时,未签名的程序可能会失败。(日本的WM手机默认安全级别都比较高,不签名无法执行)
Windows Mobile的签名能起到识别开发者身份、保证安装包完整性的作用,并不通过签名限制程序安装。Windows Mobile签名需要付费。
================================================================================
对比:
Symbian | Android | iOS | Windows Mobile | |
安装包结构 | 专有sis格式 | zip包及专有dex格式 | 目录 | 专有cab格式 |
签名复杂度 | 高 | 低 | 中 | 中 |
签名作用 | 识别开发者身份 保证安装包完整性 赋予安装包权限 |
识别开发者身份 保证安装包完整性 |
识别开发者身份 保证安装包完整性 |
识别开发者身份 保证安装包完整性 |
签名强制性 | 必须签名,并且开发者签名限制安装 | 必须签名,但是自己就可以签名 | 必须签名,并且开发者签名限制安装 | 不一定需要签名 |
安装包中的资源文件状态 | 一般为编译后的res文件及mbm文件 | 原始资源文件 | 原始资源文件 | 一般为编译后的资源动态链接库 |
是否需要安装包脚本文件 | 需要pkg文件 | 不需要,工程自动配置 | 不需要,工程自动配置 | 需要inf文件 |
签名是否付费 | 是,每个安装包约300欧元 | 否 | 否,但是iOS开发者账号年费需要99美元 | 是 |
安装卸载过程中能否有动作 | 是 | 否 | 否 | 是 |