★☆语言支持☆★
PKG文件的第一行将指明应用程序的语言。每种语言用两个字母表示,如下 :
;Languages
&EN,FR
语言代号:
|
★☆包头☆★
PKG文件的下一个组成部分是包头。它详细什么包的名字,应用程序的UID,版本信息荷包的类型:
#{"DummyLC","BetaLC"},(0x0010D003),1,01,12,TYPE=SISAPP
第一部分{"DummyLC","BetaLC"}是应用程序的名称。必须为语言行的每中语言指定相应名称,DummyLC是应用程序的英文名称;而BetaLC 是法语名称。
接下来是应用程序的UID(0x0010D003)。如果你打算发布你的应用程序,这个值应该从Symbian公司获得(参考为你的应用程序请求UID)。
接下来的3个值,描叙主次和bulid版本号(这个版本是1.01,Build 12)。
最后的一个值可选,它指定SIS的类型,可能的值如下:
SISAPP:包含一个应用(如果没填将被指定)。
SISSYSTEM:包含一个共享/系统组件,像DLL或者OPX,他们可以被其他的应用程序所使用。当最终的应用程序卸载的时候组件也将被卸载。
SISOPTION:包含一个扩展或可选的组件(动态载入代码,数据文件,等)。用户可以选择是否安装或者稍后删除,该组件不依赖主程序而工作。
SISCONFIG:配置一个已经存在的应用程序或服务. 该包不能够包含任何新文件,就算有也只能显示在安装时期,或者添加一个已存在的组件。该包安装后也不会出现在卸载中。
SISPATCH:增补已经存在的组件,它可以被用户卸载。
SISUPGRADE 更新已经存在的组件。该包安装完后也不列在卸载程序中,用户要重装或者卸载必须改变其关联的程序。
★☆产品/平台兼容性☆★
接下来的行指定应用程序目标平台或产品:
(0x101F6F88), 0, 0, 0, {"Series60ProductID","Series60ProductID"}
0x101F6F88 代表是Series 60 v0.9。它支持大多数的的现有S60设备。当然,如果你使用一些特定的API,你将使用响应的代号代替。查看我们的通用产UID页面获得更多代号。
0, 0, 0 是主版本号、次版本号和build号。你不用修改它。
{"Series60ProductID","Series60ProductID"} 是平台识别串。你在S60设备上应该使用“Series60ProductID”。注意:该字符串将重复你语言行所指定的语言中。
SDK版本 | UID | Series60 SDK 0.9 (Symbian 6.1) | Series60 SDK 2.0 (Symbian 7.0) | Series60 SDK 2.0 (Symbian 8.0) | |||
手机型号 | UID | 手机型号 | UID | 手机型号 | UID | ||
Series60 0.9 | 0x101F6F88 | Nokia 7650 | 0x101F6F87 | Nokia 6600 | 0x101F7963 | Nokia 6630 | 0x101F7964 |
Series60 1.0 | 0x101F795F | Nokia 垃圾0/3660/3620 | 0x101F7962 | Nokia 6620 | 0x1020216B | ||
Series60 1.1 | 0x101F8201 | Nokia N-Gage | 0x101F8A64 | Nokia 7610 | 0x101FD5DB | ||
Series60 1.2 | 0x101F8202 | Nokia N-Gage QD | |||||
Series60 2.0 | 0x101F7960 | Siemens SX1 | 0x101F9071 | ||||
Series60 2.1 | 0x101F9115 | Sendo-X | 0x101FA031 | ||||
Series60 2.2 | 0x10200BAB | BenQ P30 | 0x101FD279 | ||||
UIQ 2.0 | 0x101F617B | ||||||
UIQ 2.1 | 0x101F61CE |
三版和二版的PKG文件头不同之处: &ZH #{"理财日历 - JCRst汉化"}, (0xFF00394F),2, 0, 0, IU,TYPE=SA ......................这些和S60v2是一样的 :"LevelUp" %{"bbs.dagamer.com"} ........................这两行是S60v3比v2多出来的 [0x101F7961], 0, 0, 0, {"Series60ProductID"} ..................................这是S60v3的UID和平台信息 以上为S60v3的PKG文件头,下面是安装包中的文件,和S60v2是一样的: "C:"bin"LevelUp_Expense_Calendar_v2"TextFileIndex10.txt"-"", FT, TE "C:"bin"LevelUp_Expense_Calendar_v2"TextFileIndex11.txt"-"", FT, TE ............................ 下面是完整的S60v3 pkg文件: &ZH #{"理财日历 - JCRst汉化"}, (0xFF00394F),2, 0, 0, IU,TYPE=SA :"LevelUp" %{"bbs.dagamer.com"} [0x101F7961], 0, 0, 0, {"Series60ProductID"} "C:"bin"LevelUp_Expense_Calendar_v2"TextFileIndex10.txt"-"", FT, TE "C:"bin"LevelUp_Expense_Calendar_v2"TextFileIndex11.txt"-"", FT, TE "C:"bin"LevelUp_Expense_Calendar_v2"private"10003a3f"import"apps"ExpenseCalendar_reg.RSC"-"!:"private"10003a3f"import"apps"ExpenseCalendar_reg.RSC", FF "C:"bin"LevelUp_Expense_Calendar_v2"private"FF00394F"backup_registration.xml"-"!:"private"FF00394F"backup_registration.xml", FF "C:"bin"LevelUp_Expense_Calendar_v2"resource"apps"ExpenseCalendar.mif"-"!:"resource"apps"ExpenseCalendar.mif", FF "C:"bin"LevelUp_Expense_Calendar_v2"resource"apps"ExpenseCalendar.rsc"-"!:"resource"apps"ExpenseCalendar.rsc", FF "C:"bin"LevelUp_Expense_Calendar_v2"resource"apps"ExpenseCalendarIco.mif"-"!:"resource"apps"ExpenseCalendarIco.mif", FF "C:"bin"LevelUp_Expense_Calendar_v2"resource"help"ExpenseCalendar.hlp"-"!:"resource"help"ExpenseCalendar.hlp", FF "C:"bin"LevelUp_Expense_Calendar_v2"sys"bin"ExpenseCalendar.exe"-"!:"sys"bin"ExpenseCalendar.exe", FF |
★☆显示文字通知☆★
在安装过程中,可以显示一些文字窗口。这里可以显示,程序使用的授权,一些发布通知等(新版本的特性等)
以下是 FILETEXT的使用:
;
"release.txt" - "", FILETEXT, TEXTCONTINUE
上面一行自定了:release.txt文件的内容将在安装过程中被显示。该文件跟PKG文件在同一个目录下(如果不是同一个目录你必须指定路径),在这个例子中,该文件不会被安装在手机上。
TEXTCONTINUE:指定用户只能操作“继续”
TEXTSKIP:出现“是”和“否”文字对话框。如果“是”,对话框消失,继续安装程序,如果“不是”对话框消失,安装继续,接下来的文件和组件将不被安装。
TEXTEXIT:出现“是”和“否”文字对话框。选折“是”继续安装,选折“否”将取消安装,所有的文件将被删除。
TEXTABORT : 出现“是”和“否”文字对话框。选折“是”,对话框取消,安装继续;选择“否”,安装被取消,通常导致部分被安装。
这部分也可 以集成在文件部分。TEXTSKIP选项可以用来询问用户选择文件是否想被安装。
参数值(缩写) | 参数值(全称) | 说明 | |
文件类型 | FF | FILE | 标准程序文件(默认值) |
FT | FILETEXT | 文本文件,如果指定了文件为文本类型,则在安装过程中会显示一个窗口来显示文本信息。 如果文本信息窗口的类型不指定,则默认为TEXTCONTINUE 如果指定了文件为文本文件,则手机端目标路径处可以选择留空 (如果你希望该文本文件安装到手机上的话则需填写路径) | |
例1: "D:"sis"files"Readme.txt"-"!:"System"Apps"MyApp"Readme.txt",FT | |||
例2: "D:"sis"files"Readme.txt"-"",FT | |||
FN | FILENULL | 卸载指定文件,该类型不需要源文件路径参数 实例(安装时卸载指定路径下的setting.ini文件: ""-"!:"System"Apps"MyApp"setting.ini",FN | |
FM | FILEMIME | 指定安装文件的MIME类型,我们一般用不到,不做说明 | |
FR | FILERUN | 指定是运行文件。文件可以是exe文件,app文件或文本文档 如果文件被指定了非FILERUN的类型,则可根据需要省略操作参数1和操作参数2 | |
文本信息窗口类型 | TC | TEXTCONTINUE | 只显示一个确认按钮,用户按下后会继续程序的安装 |
TS | TEXTSKIP | 显示一个确认按钮和一个取消按钮,用户按下确认按钮会继续安装 按下取消也会继续完成安装程序(但pkg文件内此文件行以下指定的安装文件将不会被安装) | |
TE | TEXTEXIT | 显示一个确认按钮和一个退出按钮,用户按下确认按钮会继续安装 按下退出按钮则会退出安装程序(已安装的文件会自动删除) | |
TA | TEXTABORT | 显示一个确认按钮和一个退出按钮,用户按下确认按钮会继续安装 按下退出按钮则会退出安装程序(之前已安装的文件不会被删除) | |
操作参数1 | RI | RUNINSTALL | 指定文件在安装时运行 |
RR | RUNREMOVE | 指定文件在卸载时被运行 | |
RB | RUNBOTH | 指定文件在安装时运行,卸载时也运行 | |
操作参数2 | RS | RUNSENDEND | 运行指定文件,自动运行指定文件,运行完后自动关闭文件来完成安装程序(只有指定为操作参数1为RUNINSTALL参数时才能使用此参数) |
RW | RUNWAITEND | 运行指定文件,等待用户按键确认安装程序的完成 |
★☆语言依存文件☆★应用程序可以包含一些语言依赖的文 件(数据文件, 资源 文件等),你能指定那些依赖的文件被安装:
;
{
""Symbian"6.1"Series60"Epoc32"release"thumb"urel"DummyLC.r01"
""Symbian"6.1"Series60"Epoc32"release"thumb"urel"DummyLC.r02"
}-"!:"system"apps"DummyLC"DummyLC.rsc"
如果用户选择英文, DummyLC.r01将作为 DummyLC.rsc文件被安装;用户选择法文DummyLC.r02将被安装。有趣的是,仅仅只有一个文件将被安装到手机上,他们总是一个名字,内容和用户语言一致。
如果用户使用了存储卡,"!:" 用来指定,用户能选择的目标位置,如果不想用户选择路径,你可以用绝对路径来替换它(例如:C:)。
在这一步你要注意大括号中的所有内容,用来指定语言选项。
★☆独立语言文件☆★文件中的接下来这部分将不论用户使用什么语言,将安装这些文件:
;
""Symbian"6.1"Series60"Epoc32"release"thumb"urel"DummyLC.app" - "!:"system"apps"DummyLC"DummyLC.app"
""Symbian"6.1"Series60"Epoc32"release"thumb"urel"DummyLC.aif" - "!:"system"apps"DummyLC"DummyLC.aif"
上面的内容将添加SIS文件中的2个文件到手机上, DummyLC.app 和 DummyLC.aif 他们位于 C:"Symbian"6.1"Series60"Epoc32"release"thumb"urel" 文件夹下面。这些文件将被安装到手机设备的所安装盘符的 "system"apps"DummyLC 目录下。
★☆安装时运行一个文件☆★
在运行一个安装或卸载程序时运行一个文件有时显得非常有用。典型用处:
1. 安装完后启动一个服务(recognizer 注册者也可以用到)。
2. 卸载后做一些清理工作等等。
可以用 FILERUN 命令来实现:
;
""Symbian"6.1"Series60"Epoc32"release"thumb"urel"RunMe.exe" -"!:"system"apps"DummyLC"RunMe.exe",FILERUN,RUNINSTALL
在上面的例子中,RunMe.exe将在安装的过程中自动被执行。
其他的命令:
RUNREMOVE:在卸载的时候执行
RUNBOTH:安装和卸载的时候都执行
★☆安装一个共享组件☆★
一个SIS文件,它包含一个组件可以共享给其他应用程序:
;
@"..".."Common"DLL"Install"newlcdll.sis",(0x1000EB00)
这个共享组件将被包含在应用程序中,和该应用程序一起安装,除非它已经被安装。当有一个应用程序在使用该共享组件时,它都不能被卸载。
接下来的代码也能使用指定的外部组件
(0x1000EB00), 1, 0, 12, {"NewLC DLL","NewLC DLL"}
上面的代码将请求安装已经存在的组件,它的UID是“ 0x1000EB00” 版本1.0 Build 12,然而,如果手机上不存在这个DLL,用户将不能安装该安装包。
★☆可选附加组件☆★
如果包含可选附加组件,则SIS文件类型需要相应变成 TYPE=SISOPTION
单语言:
!({"Add-on 1 (20kb)"},{"Add-on 2 (20kb)"})
Add-on 1 (20kb)是第1个附加组件的显示标题, Add-on 2 (20kb)是第2个附加组件的显示标题;依此类推可设置多个附加组件
多语言:
!({"Add-on 1 (20kb)","附件1 (20kb)"},{"Add-on 2 (20kb)","附件2 (20kb)"})
Add-on 1 (20kb)是第1个附加组件的第1种语言的显示标题,附件1 (20kb)是第1个附加组件的第2种语言的显示标题
Add-on 2 (20kb)是第2个附加组件的第2种语言的显示标题,附件2 (20kb)是第2个附加组件的第2种语言的显示标题
依此类推可设置多个附加组件;多语言安装程序需要按语言支持区段的语言顺序来依次(就是按&EN,ZH那个部分的顺序)输入各语言版本下的标题,标题名称用“,”分割。
★☆条件判断☆★
如果安装程序内包含可选附加组件,则需要此区段的信息,反之则省略
!({"Add-on 1 (20kb)"},{"Add-on 2 (20kb)"})
IF option1
"PCSourceFile"addon"MyPic1.gif"-"!:"System"Apps"MyApp"addon"MyPic1.gif"
ENDIF
IF option2
"PCSourceFile"addon"MyPic2.gif"-"!:"System"Apps"MyApp"addon"MyPic2.gif"
ENDIF
IF option1和ENDIF之间的信息是选择Add-on 1 (20kb)后的安装结果
IF option2和ENDIF之间的信息是选择Add-on 2 (20kb)后的安装结果
依此类推,有几个附件就按照数字的顺序写几个IF option(Add-on 1,Add-on 2 ,Add-on 3 相应的应该有IF option1,IF option2,IF option3)
★☆运行时产生的文件☆★
应用程序可能也会产生一个数据文件在运行的时候(例如,参数,高分榜等)。
为了确保这些文件在你卸载应用沉许时也被删除,你需要使用 FILENULL 选项:
;
""-"C:"system"apps"DummyLC"DummyLC.ini",FILENULL
注意:在更新版本时, DummyLC.ini 将不会被删除。这样做是为了确保想ini 这样的文件(记录一些相关参数)在更新时不会被删除。