Namespaces

Variants
Actions

Please note that as of October 24, 2014, the Nokia Developer Wiki will no longer be accepting user contributions, including new entries, edits and comments, as we begin transitioning to our new home, in the Windows Phone Development Wiki. We plan to move over the majority of the existing entries over the next few weeks. Thanks for all your past and future contributions.

PKG高级选项

From Wiki
Jump to: navigation, search
Article Metadata

文章
翻译:
hoolee
最后由 hamishwillee 在 22 Dec 2011 编辑


Contents

文本警告

在安装时你可以指定一段文本显示,这段文本不会复制到手机上,只是在安装时显示需知信息或相关协议。在pkg中增加如下代码:

"license.txt" - "", FILETEXT, TEXTCONTINUE

FILETEXT 表明这个文件在安装时显示. TEXTCONTINUE提供了一个“继续”按钮用来关闭文本内容,继续安装程序。


你也可以将TEXTCONTINUE替换为如下选项:

TEXTSKIP 显示“是/否”选项,如果选择是,那么就会继续安装,如果选择否,那么下段文本就会跳过,但安装还是会正常继续。

TEXTEXIT 显示“是/否”选项,如果选择是,那么安装就会继续,反之安装就会终止,任何你已安装的文件会被移除。

TEXTABORT 显示“是/否”选项,如果选择否,那么安装会终止,但是已经安装的将不会删除,删除运行时生成的文件。

多语言文本提示

文本提示的语言可以根据手机缺省语言自己适配,如:

IF  (LANGUAGE=2) ; If the language is French, then display mytext.t02
"mytext.t02"-"", FILETEXT, TEXTABORT
ELSEIF (LANGUAGE=3) ; If the language is German, then display mytext.t03
"mytext.t03"-"", FILETEXT, TEXTABORT
ELSE ; Otherwise display mytext.t01
"mytext.t01"-"", FILETEXT, TEXTABORT
ENDIF

上述示例当手机缺省语言为法语时将显示mytext.t02,当为德语时则显示mytext.t03,其他语种则为mytext.t01

此外,你需要有相应语言定义在PKG

;Language - standard language definitions
&EN,FR,GE

删除运行时生成的文件

当你要卸载一个sis文件时,卸载程序将会移除所有在安装时已经拷贝到手机上的文件。但那些运行时生成的文件怎么办?

如果程序生成文件名在安装时就要知道,那么需要在pkg文件中增加'null files',pkg中这些文件的格式(与语言无关)如下:

"" - "C\system\data\my_runtime_generated_file", FILENULL

这里my_runtime_generated_file是个程序生成的文件,FN(FILENULL)参数表示这个文件尚未存在,所以没有包含在sis文件中。是程序运行时才会生成的,而在程序卸载时将会被删除。注意源文件并不重要,只要为空即可("")。同样注意这个文件在升级为新版时不会被删除,这样就可以确保一些如ini等存储程序参数的文件不会在升级时丢失。

FILENULL选项在Symbian OS v9.x中并不支持,建议开发者在程序的data cage中生成文件,这样可以在卸载时彻底删除。

如果程序生成文件的数目(或文件名)不可知,这样的情况就比较复杂了。有一个解决方案,sis可以包含一个卸载程序,可以用来查找并删除相关文件。这样程序需要在卸载时自动运行它:

"\epoc32\release\armi\urel\uninst.app"  - "!:\system\apps\myapp\uninst.app", RR, RW

RR (RUNREMOVE)参数设置该文件在卸载时自动运行. RW (RUNWAITEND)表明系统将会等待该程序完成后才继续卸载过程。


内嵌SIS文件

你可以包含另一个sis文件,按照如下代码设置:

@”sis file name”,(UID)

例如@”prog1.sis”,(0x12341234)表示安装prog1.sis,它的UID为0x12341234。注意在卸载时,这里内嵌的sis将要等系统判定没有其他程序使用它才会被删除(即没有其他安装组件包括这个内嵌sis在他们的pkg文件中)

在安装或卸载时运行执行文件

你可以在指定可执行文件那行的末尾添加FILERUN (FR)RUNINSTALL (RI)让它在安装时运行

例如:

"\Symbian\9.1\S60_3rd_MR\Epoc32\release\gcce\urel\myprogram.exe"-"!:\sys\bin\myprogram.exe",FR,RI

将会安装myprogram.exe,并在安装过程执行它。这里RUNINSTALL关键字也可以被下列选项取代:


RUNREMOVE (RR) 指定程序只在卸载时执行它;

RUNBOTH (RB)在安装和卸载时都要执行这个程序

上述三个选项最好配以RUNWAITEND (RW)关键字,它指明安装程序要等候该程序执行完毕再继续。如果没有指明这个关键字,那么程序启动后,安装就将继续了。

  • FILERUN (FR) RUNINSTALL (RI) 选项无法工作于自签名软件. ,它需要一个受信签名(Open Signed Online or Open Signed Offline during R&D stage and Symbian Signed when

released),否则程序所需能力将不能得以安装。

必备程序选项

你可以指定一个必备程序选项,它表明系统必须先安装有它,才能继续下面的安装,它的格式如下:

{UID}, Major_Version_#,Minor_Version_#,Build_#,{“Product Name”}

它表明这个组件的UID和名称,以及所需最早版本号,否则将不能继续下面的安装。

例如:

{0x10000123},1,0,0,{"MyDll"}

表明组件名为MyDll,UID为0x10000123,以及最小版本号1.0.0,表明系统至少要安装有该版本。 必备程序选项也可以如下,这里表明所需的目标平台:

(0x101F6F88), 0, 0, 0, {"Series60ProductID"}

这里所需的组件就是Series60ProductID, 而版本号至少为0.0.0或更高,都是安装所必需的条件。

从第三版开始,S60平台标识将显示在方括号中,具体如下:

[0x101F7961], 0, 0, 0, {"S60ProductID"}


语言支持

程序可以多个语言版本,而只要一个sis包即可。当用户安装sis文件时,将被提示选择安装语言。要增加语言,就要在你的pkg文件里添加语言支持行。它以&开始,包含下列语言列表中的一个:

  • AM– US English
  • AS – Austrian German
  • AU – Australian English
  • BF – Belgian French
  • BL – Belgian Flemish
  • CS – Czech
  • DA – Danish
  • DU – Dutch
  • EN – UK English
  • FI – Finnish
  • FR – French
  • GE – German
  • HK – Hong Kong Chinese
  • HU – Hungarian
  • IC – Icelandic
  • IF – International French
  • IT – Italian
  • JA – Japanese
  • NO – Norwegian
  • NZ – New Zealand
  • PL – Polish
  • PO – Portuguese
  • RO - Romanian
  • RU – Russian
  • SF – Swiss French
  • SG – Swiss German
  • SK – Slovak
  • SL – Slovenian
  • SP – Spanish
  • SW – Swedish
  • TC – Taiwan Chinese
  • TH – Thai
  • TU – Turkish
  • ZH – Prc Chinese

下面是一个实例:

&EN, FR, FI

它表明sis包含有英语,法语和芬兰语,如果没有语言项,则&EN是默认的。


手机支持

我们有可能需要指明安装程序只为部分手机支持。如,如果一个程序需要WiFi,那么就只能安装到有wifi的手机。如果到非wifi手机,那么安装将显示一个警告表示程序不兼容。

下列代码演示了程序只能安装到Nokia N80, N93, N93和N95手机上。

[0x200005F9], 0, 0, 0, {"Nokia N80 ID"}
[0x20000600], 0, 0, 0, {"Nokia N93 ID"}
[0x20000605], 0, 0, 0, {"Nokia N93i ID"}
[0x2000060B], 0, 0, 0, {"Nokia N95 ID"}

手机型号的标识可以参考S60 Platform and device identification codes.


安装特定手机所需文件

可能我们的部分安装文件需要依赖用户手机而定,例如一个游戏开发者可能需要生成一个指定的DLL,以便支持3D加速。那么对没有3D加速的手机,

就只能安装标准的DLL,示例代码如下:

IF (MachineUID=0x20000600) OR (MachineUID=0x2000060B)
 
 ; If the device is Nokia N93 or N95, then install files in this block.
"\epoc32\release\armv5\urel\mydll_3d" -"!:\sys\bin\mydll.dll"
 
ELSE
 
 ; Otherwise install any files in this block.
"\epoc32\release\armv5\urel\mydll" -"!:\sys\bin\mydll.dll"
 
ENDIF

手机标识代码可以在这里找到S60 Platform and device identification codes.


安装指定平台的文件

可能我们部分安装文件依赖于手机的操作系统,例如第三版FP2就去掉了一些蓝牙连接库,这样的不同导致我们在安装时也需要区别对待,手机平台可以在z:\system\install文件夹中获取:

if exists("z:\system\install\Series60v3.2.sis")
"\Epoc32\release\gcce\UREL\Common_0x123123123_fp2.dll"-"C:\sys\bin\common_0x123123123.dll"
else
"\Epoc32\release\gcce\UREL\Common_0x123123123.dll"-"C:\sys\bin\common_0x123123123.dll"
endif


安装条件

下列函数也可以使用在pkg中:

  • package()用来测试一个安装包是否存在;
  • exists()用来测试给定文件是否存在
  • appprop()获得注册表中的相关属性
  • DevProp()函数用来询问手机能力值,注意不是直接提供的名字属性

package():如果指定UID已经安装将返回true,否则返回false,下列代码表示如果UID为0x11223344那么将安装foo.txt文件

IF package(0x11223344)
"foo.txt"-"c:\foo.txt"
ENDIF

exists(): 如果test.txt存在则返回true,将安装新的

if exists("c:\test.txt")  
"text\exists.txt"-"!:\private\0x01234567\exists.txt"

appprop(): 该函数的第一个参数是package UID.第二个参数是获取的propid(property id). 下列代码测试了其他包的能力

;Dependencies
(0x10000003), 1, 2, 3, {"Depend-EN"}
 
if (appprop(0x10000003,0) = 1)
"text\appprop1.txt"-"!:\Documents\appprop1.txt"
elseif (appprop(0x10000003,0) = 2)
"text\appprop2.txt"-"!:\Documents\appprop2.txt"
endif

DevProp(): 手机支持能力函数,它提供了直接访问HAL API的能力,即HAL::Get()函数。这个函数可以有条件项使用,用来询问手机的能力。注意这个能力不是名字属性

+(0=1,1=2,3=-1)
 
if DevProp(1)
"text\appprop1.txt"-"", FT, TC
endif


外部链接


内部链接

This page was last modified on 22 December 2011, at 05:02.
183 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×