PKG高級選項

文本警告

在安裝時你可以指定一段文本顯示,這段文本不會複製到手機上,只是在安裝時顯示需知信息或相關協議。在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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章