寫的很好,特意轉過來,做一個備份。
以下博文轉至Darren(博友):http://blog.csdn.net/xjtursh/archive/2008/08/05/2768902.aspx
關於pkg文件的一些高級選項....ZZ from wiki.forum.nokia.com 收藏
文字告示
在安裝過程中你可以指定一個文件文件顯示給用戶。這個文件本身不會被拷貝到目標設備,用於顯示基本的自述信息或許可協議。爲此,添加下行到pkg文件:
"license.txt" - " ", FILETEXT, TEXTCONTINUEFILETEXT指出在安裝期間顯示該文件。TEXTCONTINUE會提供一個可以關閉這個文本文件的繼續按鈕然後繼續安裝。代替TEXTCONTINUE,你可以指定爲下面之一:
• TEXTSKIP 顯示一個是/否選項。 若選擇是,安裝繼續。 若選擇否,則跳過下一段說明,安裝仍正常繼續向前。
• TEXTEXIT 顯示一個是/否選項。 若選擇是,安裝繼續。若選擇否, 安裝停止並刪除任何已安裝文件。
• TEXTABORT 顯示一個是/否選項。但當選擇否時,安裝只停止,不刪除任何已安裝文件。移除運行時生成的文件。
多語言文字告示
文字告示的語言能被自定義取決於設備的缺省語言。例如:
IF (LANGUAGE=2) ; 若語言是法語,則顯示mytext.t02
"mytext.t02"-"", FILETEXT, TEXTABORT
ELSEIF (LANGUAGE=3) ; 若語言是德語,則顯示mytext.t03
"mytext.t03"-"", FILETEXT, TEXTABORT
ELSE ; 否則顯示mytext.t01
"mytext.t01"-"", FILETEXT, TEXTABORT
ENDIF當設備上的缺省語言是法語時上例將顯示mytext.t02;德語時mytext.t03;任何其它語言時mytext.t01。
順便提及,你也必須在PKG中定義語言:
;Language - standard language definitions
&EN,GE,FR移除運行時生成的文件
當經由程序的sis文件卸載程序時,卸載程序會移除所有被安裝程序按照pkg文件中的文件說明行拷貝到電話的那些文件。但在運行時生成的文件又該如何呢?
若應用程序創建的文件名在安裝時已知,那麼它們必須作爲'空文件(null files)'添加到.pkg文件。在.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, RWRR (RUNREMOVE)參數在移除(卸載)時要運行的文件。RW (RUNWAITEND)指明(系統)移除工具應啓動這個程序然後等待,直到繼續安裝之前運行完。
嵌入SIS文件
能在你的sis文件包含另一個sis文件,如下面的代碼:
@”sis file name”,(UID)例如: @”prog1.sis”,(0x12341234) prog1.sis,具有UID 0x12341234,在碰到這行時安裝。注意: 在卸載時,這個嵌入的sis直到系統判斷出沒有其他當前已安裝部件使用它(也就是,沒有其他已安裝部件在其pkg文件也包括該sis)纔會被卸載。
在安裝或卸載時運行可執行文件
你能指定要運行的可執行文件,通過在可執行文件描述行尾部添加FILERUN (FR)和RUNINSTALL (RI)關鍵字。
例如:
"/Symbian/6.1/Series60/Epoc32/release/armi/urel/myprogram.exe"-
"!:system/programs/myprogram.exe",FR,RI將安裝myprogram.exe並在安裝期間執行。RUNINSTALL關鍵字可用下面的任何一個替代:
• RUNREMOVE (RR) 使得只在卸載期間才執行。
• RUNREMOVE (RR) 使得可執行文件在安裝和卸載期間都執行。
這三個選項中任一個可進一步與關鍵字 RUNWAITEND (RW)配合使用,RUNWAITEND (RW)使得安裝等到執行結束方可繼續。若未指定,那麼安裝將在可執行文件啓動後馬上繼續。
依賴行(Requisite Lines)
你可以用依賴行指出一個特定的部件必須已經安裝當前的安裝方能繼續。使用下面的格式:
{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的部件,其UID爲0x101F6F88、版本號0.0.0或更高,必須存在安裝方能繼續。
從S60第三版開始,S60產品Id必須寫在方括弧中。例子:
[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"}設備Id列表可在S60 Platform and device identification codes中找到。
安裝設備相關文件
安裝依賴於用戶設備的文件是可能的。例如,遊戲開發人員可以爲支持3D加速器的設備創建一個特殊的DLL。對於無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設備Id列表可在S60 Platform and device identification codes中找到。
安裝平臺相關文件
安裝依賴於操作系統的文件是可能的。例如,3rd FP2版去掉了一些Bluetooth庫,因此必須安裝不同的文件。通過檢查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