C++ для Symbian S60: синтаксис PKG-файла

Раньше мы упоминали PKG-файл, который позволяет превратить скомпилированную программу для телефона и набор дополнительных файлов в единый SIS-файл. Теперь рассмотрим его синтаксис подробнее.

Как уже упоминалось ранее, чтобы создать SIS-файл, – необходимо запустить команду makesis, указав в качестве параметра путь к PKG-файлу (или просто имя, если мы находимся в папке, где лежит PKG-файл). Для этого, естественно, нужно создать этот самый PKG-файл. А создать его можно в любом текстовом редакторе.

Важно:

1. PKG-файл предпочтительнее всего создавать в кодировке UNICODE. Это позволит избежать больших проблем с нелатинскими символами.

2. Все инструкции в PKG-файле регистронезависимые.

Вот файл helloworldbasic_gcce.pkg, позволяющий создать helloworldbasic_gcce.sis, для установки helloworld на телефон:

;Language - standard language definitions

EN

; standard SIS file header

#{"HelloWorldBasic"},(0xA000017F),1,0,0

;Localised Vendor name

%{"Vendor-EN"}

;Unique Vendor name

:"Vendor"

;Supports Series 60 v 3.0

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

;Files to install

"..\..\..\epoc32\release\gcce\urel\HelloWorldBasic.exe"                 -"!:\sys\bin\HelloWorldBasic.exe"

"..\..\..\epoc32\data\z\resource\apps\HelloWorldBasic.rsc"              -"!:\resource\apps\HelloWorldBasic.rsc"

"..\..\..\epoc32\data\z\private\10003a3f\import\apps\HelloWorldBasic_reg.rsc"  -"!:\private\10003a3f\import\apps\HelloWorldBasic_reg.rsc"

"..\..\..\epoc32\data\z\resource\apps\helloworldbasic_aif.mif"         -"!:\resource\apps\helloworldbasic_aif.mif"

"..\..\..\epoc32\winscw\c\private\A000017F\hello.txt"                  -"!:\private\A000017F\hello.txt"

;required for application to be covered by backup/restore facility

"backup_registration.xml"                                  -"!:\private\A000017F\backup_registration.xml"

Строки, начинающиеся с ; (точки с запятой), это комментарии, которые никак не влияют на SIS-файл. Рассмотрим все прочие строки.

Набор языков

EN - инструкция, задающая набор языков в вашей программе.

Языки перечисляются через запятую, например: EN,RU.

Если здесь указано несколько языков – при установке sis будет показано меню, позволяющее пользователю выбрать язык.

Заголовок (header)

#{"HelloWorldBasic"},(0xA000017F),1,0,0 - имя вашей программы, её UID и версия.

Если в первой инструкции было указано несколько языков – нужно указать имя программы для каждого из них. Для инструкции EN,RU – выглядеть будет так: #{"Hello World","Привет, мир" },(0xA000017F),1,0,0.

Версия программы – это последние 3 числа через запятую, в нашем случае версия будет 1.0. Обратите внимание, что последняя цифра версии – это так называемый билд (build), который пользователь при установке не видит, увидеть его можно только в диспетчере приложений. Версия 1,5,0 будет отображена при установке как 1.05.

Кроме того, здесь же могут быть указаны дополнительные опции:

Таблица 1.

Инструкция Имя Описание   TYPE=<Тип установки> Тип установки:
  • SA – установка приложения. Перед установкой предыдущая версия программы будет удалена. Этот тип используется по умолчанию, и задавать его явно не нужно.
  • SP – Патч. SIS является дополнением к уже установленной программе, если она не установлена – выдаётся ошибка. Файлы становленной ранее программы будут заменены на файлы из текущего sis.
  • PU – Частичное обновление. Если файлы из этого SIS-файла уже есть на диске – они заменяться не будут.
      IU IUNICODE Устаревшая инструкция, указывает на то, что PKG-файл в UNICODE. С юникодом и так работает. SH SHUTDOWNAPPS Перед установкой закрывает все запущенные на телефоне приложения. Может потребоваться в случае, если в SIS-файле несколько программ. Вообще считается опасной настройкой. NC NOCOMPRESS Файлы не будут сжиматься при упаковке в sis. По умолчанию файлы сжимаются. Зачем нужно не сжимать – не знаю.

      Например, #{"HelloWorldBasic"},(0xA000017F),1,0,0, TYPE=SP,SH. Обновляем helloworld, при этом предварительно выгружаем все запущенные приложения.

      Производитель

      %{"Vendor-EN"}

      :"Vendor"

      В установочных файлах Symbian 6-7 этих двух инструкций не было, поэтому если их написать – будет выдана ошибка и sis не соберется.

      Для более поздних версий – эти инструкции обязательны.

      Здесь указываются сведения о разработчике программы. На Symbian 9, если sis был подписан сертификатом self-signed, эти строки игнорируются, но указать их всё равно нужно.

      Первая строчка, которая начинается с %, – локализованное имя разработчика, его можно указать для каждого из языков, например: %{"English vendor","Русский производитель"}.

      Вторая строчка – нелокализуемое имя, здесь недопустимы языковые варианты.

      Платформа для установки

      [0x101F7961], 0, 0, 0, {"Series60ProductID"} - инструкция, в которой задаётся самая младшая версия платформы, где может устанавливаться собранный SIS-файл. Если версия платформы, где, устанавливается SIS-файл, ниже указанной – будет выдано сообщение: "Приложение не совместимо с телефоном. Продолжить?"

      Значения, которое можно указывать в квадратных скобках, приведены в самой первой статье, в таблице 1.

      Для S60 1st – 2nd – первая часть инструкции задаётся в круглых скобках, например для S60 1.2 так: (0x101F6F88), 0, 0, 0, {"Series60ProductID"}.

      Также с помощью этой инструкции можно разрешить установку программы только в том случае, если на телефоне установлено какое-то необходимое приложение не ниже заданной версии: (0x2000015a), 8,65,0,{"Opera"}.

      Это означает: sis можно устанавливать только в том случае, если на телефоне есть браузер Opera.

      Для приложений UID задаётся в круглых скобках на всех платформах.

      Есть ещё возможность задать диапазон необходимых версий – вот так: (0xA0004641), 0,16,0 ~ 1,0,0, {"DEd"}.

      Что означает: для установки SIS-файла требуется DEdit версии не ниже 0.16 и не выше 1.0.

      Список файлов для установки

      Теперь собственно файлы, которые нужно поместить в SIS-файл на компьютере и извлечь из SIS-файла на телефоне.

      Задаются в виде: "файл на жёстком диске" – "файл на телефоне".

      Путь к файлу на жёстком диске может быть абсолютным – с буквой диска:

      C:\Symbian\9.1\S60_3rd\epoc32\release\gcce\urel\HelloWorldBasic.exe

      или относительный, как в примере:

      "..\..\..\epoc32\release\gcce\urel\HelloWorldBasic.exe

      Относительный путь задаётся от текущего PKG-файла, в данном случае путь означает "подняться на 3 папки вверх (окажемся в корне SDK), затем перейти в epoc32\release\gcce\urel\".

      Если файл находится в одной папке с PKG-файлом – достаточно указать его имя:

      "HelloWorldBasic.txt"-"!:\sys\bin\HelloWorldBasic.txt"

      Путь к файлу на жёстком диске не может содержать русских символов. Путь к файлу на телефоне может содержать русские символы только в том случае, если PKG-файл в кодировке UNICODE.

      Путь на телефоне может начинаться с буквы диска (C: или E:) или с ! (восклицательного знака). Если хотя бы один путь в PKG-файле начинается  c восклицательного знака – при установке пользователю будет предложено выбрать диск для установки, а все файлы, у которых путь начинается с восклицательного знака, установятся на выбранный диск.

      Все несуществующие папки будут созданы.

      Если файл не должен устанавливаться, но предполагается, что он будет создан программой в процессе работы, – его рекомендуется удалять при деинсталляции программы. Это задаётся в PKG-файле инструкцией:

      "" - "!:\System\TempFile.txt"

      т.е. локальный путь пустой.

      Если в первой инструкции было задано несколько языков, можно задать файл для каждого из них. Тогда файл будет установлен в зависимости от выбора пользователя:

      {"readme_en.txt" "readme_ru.txt"}-"!:\System\apps\MyApp\readme.txt"

      Кроме того, для каждой пары файлов можно задать дополнительные опции:

      Таблица 2.

      Полное имя Аббревиатура Описание FILENULL FN Создаёт пустой файл на телефоне. ""-"C:\private\\deleteme", FN FILETEXT FT Показывает содержимое текстового файла при установке программы.  Файл должен быть в UNICODE. На телефон файл можно не устанавливать, для этого нужно оставить путь назначения пустым. Для этой инструкции доступны дополнительные опции:
      • TS – Прочитав текст, пользователь может ответить "Да" или "Нет".
      • Если пользователь ответил "Нет" – следующий файл не будет установлен. Таким образом можно подтверждать установку любого файла  с подробным описанием.
      • TE – Опять выбор "Да" и "Нет", если нажать "Нет" – установка прервётся и все установленные файлы будут удалены TA – Снова варианты "Да" и "Нет", если пользователь нажмёт "Нет" – установка прервётся, но файлы удалены НЕ БУДУТ и установка будет считаться успешной.
      • "text\textfilec.txt"-"", FT, TS
      FILERUN FR Позволяет запустить программу из SIS-файла во время установки или удаления. Дополнительные опции:
      • RI – запускать программу только во время установки. Это по умолчанию – и указывать явно не нужно RR –запустить программу только при удалении.
      • RB – запустить программу при установке и при удалении.
      • И, наконец, если после одной из этих опций задать инструкцию RE – программа будет закрыта после установки.
      • "\epoc32\release\arm4\urel\zoom.exe"-quot !:\sys\bin\zoom.exe", FR, RB
      FILEMIME FM Во время установки открывает файл в ассоциированном с ним приложении. Можно задать тип файла в MIME-формате. "mypicture.gif"-"!:\Images\mypicture.gif", FM, "image/gif"

      Обратите внимание: если новая версия программы устанавливается поверх предыдущей – программа установки вначале удаляет все файлы, установленные с предыдущей версией, а потом ставит новые.

      Например, нужно установить какой-то INI-файл, содержащий значения по умолчанию, а если такой файл уже есть и, возможно,  изменён пользователем, то оставить старый. Такая логика не получится, программа установки вначале снесёт существующий файл, а потом установит новый.

      Решить эту проблему силами одного только PKG-файла мне не удалось. Потребовалось такое шаманство:

      1. В PKG-файле:

      ; Устанавливаем пустой текстовый файл - он будет индикатором первого запуска

      "empty.txt"-"!:\System\Apps\MyApp\FirstRun.flg"

      ; Устанавливаем ini, но с расширением txt

      "config.ini"-"!:\System\Apps\MyApp\config.txt"

      2. В программе реализуем такую логику: если во время старта программы найден файл System\Apps\MyApp\FirstRun.flg – переименовываем config.txt в config.ini и удаляем FirstRun.flg.

      Теперь понятно, что было написано в helloworldbasic_gcce.pkg, и читатель может самостоятельно написать PKG-файл.

      Но это ещё не все доступные инструкции.

      Условия

      Файлы можно ставить или не ставить в зависимости от различных условий. В общем случае это выглядит так:

      IF(Условие 1) Набор_файлов_1

      ELSEIF (Условие 2) Набор_файлов_2

      ELSE Набор_файлов_3

      ENDIF

      Например, часто используемое условие – проверка существования файла:

      IF EXISTS("c:\test.txt")

      "text\exists.txt"-" c:\test.txt "

      ELSE

      ; Ничего не ставим

      ENDIF

      С помощью условия можно ставить файлы в зависимости от модели телефона, это выглядит так:

      ; Если sis устанавливается на Nokia 6600, установим my.exe

      IF (MachineUid = 0x101fb3dd)

      "my.exe"-" c:\my.exe" FR,RI

      ENDIF

      Вот теперь и пригодились эти непонятные MachineUID'ы из таблицы в первой статье .  

      Чтобы выполнить установку некоторых файлов в зависимости от версии SDK, нужно поступить чуть хитрее. Видели в таблице загадочное поле "Файл в папке Z:\System\Install"? Так вот, здесь оно и пригодилось:

      ; Ставим специфический файл для 3rd FP1:

      IF EXISTS("Z:\System\Install\Series60v3.1.sis")

      "file3.1.txt"-" c:\file3.1"

      ENDIF

      Обратите внимание: на платформе  2nd Ed, FP3 например, в Z:\System\Install\ находятся также SIS-файлы для всех младших версий. Т.е. условия:

      IF EXISTS("Z:\System\Install\Series60v2.8.sis")

      "file2_fp3.txt"-" c:\file2_fp3"

      ENDIF

      IF EXISTS("Z:\System\Install\Series60v1.2.sis")

      "file1.2txt"-" c:\file1.2"

      ENDIF

      установят и файл file2_fp3, и файл file1.2. Чтобы поставился файл именно для текущей версии SDK, делаем так:

      IF EXISTS("Z:\System\Install\Series60v2.8.sis")

      "file2_fp3.txt"-" c:\file2_fp3"

      ELSEIF("Z:\System\Install\Series60v1.2.sis")

      "file1.2txt"-" c:\file1.2"

      ENDIF

      Также при установке файла можно проверить наличие той или иной программы на телефоне:

      IF PACKAGE(0x2000015a)

      "file_for_Opera1.txt"-"!:\file_for_Opera1.txt"

      "file_for_Opera2.txt"-"!:\file_for_Opera2.txt"

      ENDIF

      Различных возможных условий много, можно ставить разные файлы в зависимости от типа процессора, его скорости, цветности монитора и многих других факторов. Не буду их все здесь перечислять.

      Выбор дополнительных файлов для установки

      Позволяет вывести во время установки меню, в котором пользователь может отметить нужные ему пункты.






Рекомендуемый контент




Copyright © 2010-2017 housea.ru. Контакты: info@housea.ru При использовании материалов веб-сайта Домашнее Радио, гиперссылка на источник обязательна.