Linux админ, врач-исследователь
35,8
рейтинг
20 ноября 2013 в 12:00

Администрирование → Обновляем Nexus 4 до Android 4.4 в Linux из песочницы tutorial

Наверное, я не одинок в своем нежелании ждать OTA обновления телефона. Интересно же посмотреть, что нового в версии Android 4.4. Ниже я постараюсь описать максимально подробно процесс обновления прошивки в Linux системах. Надеюсь, это может быть кому-то полезно, так как большинство инструкций почти исключительно для Windows. Также постараюсь описать неочевидные грабли для некоторых ревизий Nexus 4.

image

Наступаем на грабли в Windows 7 x64/x86


Почитав мануалы, вытащил образ Kitkat для Nexus 4 и Android SDK со всеми инструментами. Однако, к моему удивлению, проблема возникла там, где я ее никак не ожидал — не определялись драйвера для Windows 7 x64. Вначале попробовал установить пакет драйверов из Android SDK (достаточно отметить Google USB Driver Package для установки). Не распознается. Затем попробовал вытащить только пакет драйверов отсюда developer.android.com/sdk/win-usb.html. Результат тот же самый. Для очистки совести установил Universal Naked Driver 0.72 отсюда 4pda.ru/forum/dl/post/3529212/Universal_Naked_Driver_0.72.zip. В 32-битной системе результат аналогичный.
Телефон приобретался непосредственно в период аттракциона невиданной щедрости на Google Play через форвардера. Было куплено 2 телефона 8 Gb версия для меня (ну нет у меня потребности хранить большие объемы мультимедиа) и 16 Gb версия для брата. Я был крайне удивлен, когда его телефон сразу же определился в системе. Сразу возникла мысль о идентификаторе устройства.

Пара слов о USB-идентификаторах


Каждое устройство USB имеет свой уникальный Vendor ID. Эти идентификационные номера выдаются некоммерческой организацией USB Implementers Forum (USB-IF). Внутри Vendor ID устройства подразделяются по Product ID. Так, как производителем Nexus'ов является Google, то все его устройства имеют VID 18d1. С PID оказалось несколько сложнее. Если заглянуть внутрь android_winusb.inf, на который ориентируется операционная система мы можем увидеть список устройств, для которых предназначен данный драйвер.
;Google Nexus One
%SingleAdbInterface%        = USB_Install, USB\VID_18D1&PID_0D02
%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_0D02&MI_01
%SingleAdbInterface%        = USB_Install, USB\VID_18D1&PID_4E11
%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_4E12&MI_01

;Google Nexus S
%SingleAdbInterface%        = USB_Install, USB\VID_18D1&PID_4E21
%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_4E22&MI_01
%SingleAdbInterface%        = USB_Install, USB\VID_18D1&PID_4E23
%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_4E24&MI_01

;Google Nexus 7
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_4E40
%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_4E42&MI_01
%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_4E44&MI_01

;Google Nexus Q
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_2C10
%SingleAdbInterface%        = USB_Install, USB\VID_18D1&PID_2C11

;Google Nexus (generic)
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_4EE0
%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_4EE2&MI_01
%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_4EE4&MI_02
%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_4EE6&MI_01


Nexus 4 не упоминается, но 16 Gb версия совпадает по идентификационным номерам с Google Nexus (generic). Однако, с моим телефоном все оказалось не так. VID был d001, что не давало системе увидеть драйвер для него.

Ищем новые грабли в Linux


После этого последовало несколько нелогичное решение попробовать обновить прошивку в Linux окружении, так как ядро уже включает в себя необходимые драйверы для телефона. Развернул Kubuntu 13.10, чтобы получить ядро посвежее. Далее все по инструкции ниже:
1) На телефоне в разделе «Для разработчиков» разрешаем отладку по USB.
2) Определяем PID:VID устройства
meklon@meklon-kubuntu:~$ lsusb
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 002: ID 18d1:d001 Google Inc. 
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 003: ID 09da:9033 A4 Tech Co., Ltd X-718BK Optical Mouse
Bus 004 Device 005: ID 046d:c225 Logitech, Inc. G11/G15 Keyboard / G keys
Bus 004 Device 004: ID 046d:c221 Logitech, Inc. G11/G15 Keyboard / Keyboard
Bus 004 Device 002: ID 046d:c223 Logitech, Inc. G11/G15 Keyboard / USB Hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Нас интересует именно этот фрагмент — 18d1:d001 Google Inc.
2) Linux не даст нам просто так доступ к нашему устройству. Для начала необходимо создать правила для udev (подробнее о системе ru.wikipedia.org/wiki/Udev).
Создаем файл с правилами для нашего Nexus:
sudo nano /etc/udev/rules.d/51-android.rules

Вносим туда следующие строки:
#Nexus 4
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="d001", MODE="0660", GROUP="androiddev", SYMLINK+="android%n"
3) Изменяем атрибуты:
chmod a+r /etc/udev/rules.d/51-android.rules

4) Перезапускаем udev:
sudo service udev restart

5) Создаем группу androiddev и добавляем текущего пользователя:
sudo groupadd androiddev && sudo useradd -G androiddev username

Это необходимо для полноценного доступа на запись и исполнение к нашему устройству.
6) Добавляем необходимые для работы инструменты (вам не нужен полноценный SDK, если вы не планируете разработку на телефоне)
sudo add-apt-repository ppa:nilarimogard/webupd8
sudo apt-get update
sudo apt-get install android-tools-adb android-tools-fastboot

7) Для нормальной работы, начиная, кажется с версии 4.2, необходимо на самом телефоне подтвердить, что данный ПК является доверенным для отладки. При начале работы с adb не забудьте положительно ответить на этот вопрос на телефоне. Проверяем видимость устройства:
# adb devices
List of devices attached
xxxxxxxxxxxxxxx          device

Все прошло успешно. В противном случае (старая версия adb, недоверенный ПК и т. п.) будет что-то вроде:
# adb devices
List of devices attached
xxxxxxxxxxxxxxx          offline

8) Перезагружаем телефон в режим fastboot. На Nexus 4 это достигается нажатием одновременно увеличения и уменьшения звука вместе с power. Также можно отправить из консоли adb restart fastboot. Проверяем список подключенных устройств с помощью lsusb и обнаруживаем, что product id изменился! Значит, опять нужно править /etc/udev/rules.d/51-android.rules. В моем случае это был 4ee0.
#Nexus 4
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="d001", MODE="0660", GROUP="androiddev", SYMLINK+="android%n"
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee0", MODE="0660", GROUP="androiddev", SYMLINK+="android%n"

Перезагружаем udev.
9) В режиме fastboot adb не работает, поэтому проверяем список подключенных устройств следующим образом:
fastboot devices

Если вместо вашего устройства висит Waiting for devices, значит, нужно правильно подобрать Vendor ID/Product ID в udev конфиге.
10) Качаем тот самый свежий образ с developers.google.com/android/nexus/images
Распаковываем. В моем случае должны быть следующие файлы:
bootloader-mako-makoz20i.img
radio-mako-m9615a-cefwmazm-2.0.1700.84.img
image-occam-krt16o.zip
flash-all.sh

11) Далее у нас два пути. Первый — разблокировка загрузчика с вайпом системы и полная прошивка. Второй — апдейт имеющейся системы.

Первый вариант:

1) Телефон в режиме fastboot.
2) Проверили, что телефон виден fastboot devices
3) Разблокируем загрузчик:
fastboot oem unlock

Соглашаемся на телефоне с вайпом данных
4) Полная прошивка. Проще всего запустить готовый скрипт flash-all.sh
sudo sh flash-all.sh

5) Если все прошло хорошо — телефон в итоге включается девственно чистым с новой версией.

Второй вариант:

1) Переходим в режим bootloader из fastboot. Для этого выбираем соответсвующий пункт качельками громкости и включаем его кнопкой power.
2) В результате любуемся картинкой прибитого андроида с открытым животом и… Все. В моем варианте дальше не получилось. По идее на этом этапе необходимо нажать одновременно громкость вверх и power, чтобы открылось меню, где выбирается «Apply update from ADB». У меня телефон просто включался. Но, допустим вам это удалось.
3) На компьютере в окне командной строки ввести следующую команду:
adb sideload xxxxxxxx.zip

где xxxxxxxx.zip – это имя zip файла c прошивкой. После этого пройдет штатное обновление.

Эпилог


Успешно перешел на ART с Dalvik. Вроде все стало гораздо быстрее открываться, но точных измерений не проводил. Сенсор стал приятнее и точнее. В целом явных изменений на поверхности не видно. ART надо тестировать, но пока ничего не падает. Перекомпиляция заняла около 20 минут на 120+ приложений.

PS. Помните, что любые неосторожные действия могут привести к «brick»-состоянию. Автор не несет ответственности за неправильные действия пользователей. Пожалуйста, всегда читайте инструкции на профильных ресурсах.
Гуменюк Иван @Meklon
карма
469,5
рейтинг 35,8
Linux админ, врач-исследователь
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Администрирование

Комментарии (82)

  • +8
    Искренне надеюсь, что данная статья окажется кому-то полезной. Спасибо большое за инвайт.
  • +8
    Лень. Дождусь обновления по воздуху :)
    • +1
      Тут смысл был в том, что я не мог обычными методами получить доступ к телефону. В случае нештатной ситуации я мог бы остаться без инструментов для восстановления. OTA проще, да)) В этом принципиальный плюс всех Nexus.
    • 0
      Когда, кстати, ожидается?
    • +1
      Крайне удивлён поведением Google в данной ситуации. Раньше был ананс => неделя или две ожидания => OTA.
      А тут уже месяц ждём.
      А я вот устал ждать. Скачал c Google Developers образ да прошил.
      Супер особых изменений не заметил. Обещали энергопотребление пофиксить. Как хватало его до вечера, так и хватает.
      • 0
        ART вместо Давлика, отключение Google Now, понижение частот, изменение уровней яркости экрана, игры с автостартом продлевают жизнь ещё на полдня-день.
        • +1
          C ART есть проблема — WhatsApp, Titanium Backup и ещё пачка менее нужных (но всё-же) приложений не работает.
          • 0
            Видимо, в мой стандартный набор проблемные приложения не входят. Вы не думали, что проблема может быть из-за обновления мажорной версии Android?
            • 0
              С далвиком всё работает по-прежнему
          • 0
            Да, под ART еще не все приложения переключились, но это дело времени. После выхода Андроида 4.3 тоже не все приложения работали. Буквально следующие обновления для них решали проблему.

            Ну а возвращаясь к вопросу энергопотребления, вот вам сегодняшний скриншот. Я очень доволен оптимизацией, ибо раньше с утра до ночи телефон уходил в ноль.
            image
      • 0
        Главное изменение это ART, но его как я понял нужно включать вручную. Вы переключились на ART?
        • 0
          Да. это делается в настройках разработчика. после чего телефон перезагружается и начинает «пересборку мира» под ваше железо. процесс занимает около пятнадцати минут зависимости от количества установленных приложений.
  • 0
    Что, кстати, странно — это то, что после обновления прошивки Product ID изменился на другой. Я всегда считал, что идентификаторы к железу привязаны. Не просветит ли кто по данному вопросу из специалистов по железу?
    • 0
      Насколько позволяет мой опыт (простите, я не специалист по железу), я понимаю это так — в режиме fastboot мы общаемся не с обычным контроллером, который работает с драйвером Андроида, а с неким модулем самого процессора, минуя всё железо, которое находится под контролем мобильной ОС. Именно поэтому возможно накатить аварийный образ восстановления, переразбить память и так далее. Соответственно, и id оборудования тоже меняется.
      • 0
        Это логично. Спасибо. Тут весь нюанс, что поменялся ID в обычном режиме. Теперь надо переписывать правила udev. Я думал это жестко зашитый идентификатор.
        • 0
          Прошу прощения, невнимательно прочитал ваш вопрос. VID остался тот же (что вполне логично, так как физическое оборудование не менялось), а поменялся PID, что вполне допустимо (на один VID приходится 64к PID).

          Даташит на популярную микросхему, страница 33. Надеюсь это прояснит вопрос. Несомненно, обновление манипулировало данными на действительно низком уровне, однако это вполне реализуемо.
    • 0
      VID/PID не пришиты к железу, это что-то вроде договоренности. У любой флэшки (и любого китайского хлама) можно поменять VID/PID, найдя софт для контроллера. Видимо, с телефонами не сложнее.
      • 0
        Хм… А как тогда с драйверами, если любой китаец сможет произвольные номера ставить? Думаю, пользователь будет не рад, если его китайская камера подтянет драйвера от сканера, например.
        • 0
          Китайцы стараются ставить идентификаторы, наиболее распространенные среди данного класса устройств — UVC-камера, USB-хаб и т. д. Поставить другие PID/VID можно, но тогда придется снабжать пользователя драйверами. Кроме того, «попасть» в сканер или принтер случайно довольно сложно, этих PID/VID великое множество.
        • 0
          А куда деваться? VID стоит $5000, продажа PID'ов запрещена

          $5000 для многих разработчиков — вполне себе деньги, так что пора готовится к глюкам.
          • 0
            Как можно запретить продажу PID, если сертификация открытая вроде? Ведь одного VID с 64000 PID'ов хватит очень многим энтузиастам. Какой-нибудь FSF или его аналог мог бы…
            • 0
              Читать нонче уже не модно? Вторая ссылка как раз и ведёт на статью про то, как люди решили скинуться и купить складчину один VID, чтобы потом с него раздавать PID'ы. Финал всей это истории вот тут: если вы хотите что-то сделать «для себя» и обещаете никогда ничего не продавать, то вам, так и быть, выдадут VID/PID для экспериментов, если же вы хотите «испечь» партию из сотни каких-нибудь Arduino модулей — вынь да положь $5000!

              Собственно на Хабре об этом уже тоже писали, просто сходу как-то не нагуглилось.
              • 0
                Прошу прощения, спасибо за мы ссылки.
  • 0
    А с galaxy все очень плохо, насколько я понял?
    • 0
      В целом, да. Я уже столкнулся с этим, когда Samsung бросил поддержку Galaxy S. Но на Samsung Galaxy S4 4.4 обещали. Рекомендую проглядывать профильные разделы по прошивкам — 4pda.ru/forum/index.php?showtopic=283211
    • 0
      Вы о каком Galaxy? У Galaxy Nexus проблема с драйверами. TI забросил OMAP и, похоже, у них просто не осталось людей, способных полноценно портировать драйвера на новую версию Android'а.

      Скорее всего сообщество создаст такого себе Франкенштейна из Android 4.3 и Android 4.4, но Google этим заниматься не хочет (или не может).

      Остальные версии тоже зависят от доброй воли производителей железа :-( Опять-таки что-то-такое-на-коленке изобразить можно и без них, но вряд ли Samsung (или кто-либо другой) рискнёт такой прошивке дать статус официальной. Правда для части телефонов и CPU/GPU связку тоже делает Samsung, так что там всё только от желания их левой пятки зависит.
      • 0
        TI недавно выпустил новую версию драйверов. Другое дело, что они, к сожалению, выпустили их после релиза 4.4.
      • 0
        Именно о galaxy nexus от самсунга
    • 0
      Если вы про i9000, то для него есть полностью рабочий 4.3 и кто-то уже запускал неофициальные билды 4.4. Думаю, CM скоро подтянется, в прошлый раз было отставание около месяца от появления CM на 4.3 для топовых устройств.
    • 0
      C s3 точно все плохо. Даже 4.3 еще нету.
      Было выпущено обновление в начале месяца, но из-за множества багов его опять отозвали. Сидим на 4.1.2. Печаль.
      • 0
        Ставил 4.4 (бета цианогена) на S3, правда, T-mobile (SGH-T999) — в целом проблем или глюков не нашёл. Программы работают, игры играют, система переключается на ART даже с odexed google-паком. Результаты синтетики (AnTuTu) практически не изменились, дёрганий интерфейса не обнаружил (хотя оно и до этого отлично работало).
        • 0
          Вам сильно повезло)) быстро собрали.
  • 0
    Касательно убунты все уложилось в установку android-tools-adb, android-tools-fastboot, android-tools-fsutils из репозитариев, ну и собственно запуском через sudo sh файлика из архива c прошивкой.

    ЗЫ.
    ОТА на 4й нексус уже пошло в массы.
    • +1
      Не дождался)) Тут скорее акцент на пляски с PID:VID.
    • 0
      >ОТА на 4й нексус уже пошло в массы.

      Только что проверил, ничего не прилетело.
  • 0
    Где Вы были пару дней назад)
    Кстати, новый лаунчер является эксклюзивом для Nexus 5, если прошить четвёрку, то будет использоваться старый. Поэтому советую скачать отдельно com.google.android.launcher и установить. Радочий стол станет гораздо красивее и удобнее.
    • 0
      Надо поковыряться) Спасибо за идею. Я не знал, что ланчеры разные. Внешне ничего не поменялось почти. Ну и «OK, Google» для поиска не работает.
      • 0
        Меня это тоже сначала неприятно удивило. Но теперь рабочий стол выглядит так же, как и в Nexus 5.
        • 0
          Хм… Симпатично. Ссылкой не поделитесь? В выдаче разнообразный мусор показывает. Был бы очень благодарен))
          • 0
            Я брал отсюда. Не лучший файлообменник, но всё же)
      • 0
        «Ok, Google» без нажатий вообще, работает только в новом лаунчере и только если поставить в настройках поиска «English (US)».
        Ну и с заблокированного экрана и с залоченого телефона (как в Moto X) это, понятное дело, не работает (но это даже и на Nexus 5, вроде бы, не работает)
  • 0
    • 0
      В данной ситуации эта ссылка была бесполезна. Я брал драйвера оттуда. Не сходились идентификаторы в описании драйвера и в моем Nexus 4.
      • 0
        Delete
      • 0
        Вы все варианты установки пробовали? Windows вовсе не требует, чтобы inf файлы были правильно написаны в этом смысле. Можно даже загрузить драйвер монитора LG вашей любимой мышке Razer, главное галочку соответствующую поставить.
        Кроме того, я знаю, что у N4 есть проблема с adb в одном из двух режимов подключения по USB
        • 0
          Каюсь, глубоко не копал. У меня года 3 Linux — основная ОС. Хотелось получше понять особенности работы с перепрошивкой именно в нем. Если у вас есть готовое решение для Windows — я с удовольствием включу его в дополнение к статье. Допускаю, что многие не захотят использовать Linux.
  • +2
    Интересно, у меня никаких проблем с USB не было в Mint 15. Прошился легко по первому варианту.
    Отдельно скачал лаунчер новый от нексуса 5. Можно скачать в этой теме — forum.xda-developers.com/showthread.php?t=2506488
    Нужен только GoogleHome.apk. Запустил один раз на телефоне, а потом выбрал в качестве дефолтного.
    • 0
      У аналогичного Nexus 4, только с 16 Гб, проблем тоже не было. Google что-то колдовал с ID. Проблема не в ОС, а в аппарате конкретном. 11 ревизия, если кому интересно.
    • 0
      Очень душевный ланчер. Спасибо огромное)) Что радует, ярлыки корректно перенес, не надо перенастраивать.
    • 0
      Как у Вас обстоят дела с энергопотреблением? У меня вот с gel намного быстрее садиться начал.
      • +1
        Gel это ланчер от Nexus 5? Тогда не знаю. Только поставил. Зато после замены Dalvik на ART субъективно на 15-20% упало. Стало явно лучше. Но замеров точных не делал. Глюков нет. Ssh работает, это главное))
        • 0
          Не знал про ART. Спасибо за наводку, тоже перешел.
      • 0
        Пока не заметил разницы. На день хватает.
  • –2
    Гугл убрал 4.4 для Nexus 4 с сайта не просто так. Прошился позавчера, аппарат упорно отказывался засыпать, за ночь сожрал 50% батарейки, Wakelock detector отказался ставиться на 4.4, решил забить на разбирательства и вернулся на цианоген 10.2. Ну как вижу уже вернул, но что-то желания дальше пробовать отпало.
    • 0
      Видимо, у меня более свежий билд. Все стабильно. Прошивка висит на официальном сайте.
  • 0
    Вы могли бы просто прописать PID в inf файл вручную и скормить этот драйвер системе, этот способ тоже работает.
    • 0
      Хм… Мы не ищем лёгких путей)) Неспортивно же. Зато появился повод получше изучить эту процедуру в Linux. Все повода не было.
      Спасибо за совет.
  • +1
    В Windows драйвер не цепляется автоматом, просто идем в диспетчер, выбираем драйвер вручную и игнорируем сообщение что могут быть проблемы. Всё готово, отлично работает, есть adb, fastboot и mtp.

    В linux, не обязательно так глубоко копать, достаточно выполнить sudo flash_all.sh и всё.
    • 0
      уточню, у меня 16Gb версия, поэтому все проверено на личном опыте.
    • 0
      проверил только что на 8Gb версии, все точно так же.
      • 0
        У меня PID d001 был. 11 ревизия, судя по fastboot. Допускаю, что не все телефоны такие как у меня. Собственно и пост по обходу таких граблей.
        • 0
          HW ревизия у меня тоже 11.
  • 0
    У меня все прошло без таких заморочек, но это скорее потому, что 16Gb модель. Свой нексус7(2013) вообще обновил минут за 10 через sideload.
    Накатил еще GEL (Google Experience Launcher) а-ля Nexus 5 на оба девайса и вообще стала красота.

    Заметил одну особенность — стандартная Camera App стала запускаться значительно дольше: 3-4 секунды против 1-2 на стоковой 4.3
  • 0
    Кстати вышло обновление образов с багфиксами — www.androidpolice.com/2013/11/19/google-releases-kitkat-4-4-bugfix-update-krt16s-for-nexus-devices-factory-images-binaries-and-aosp-are-already-up/
    Придется перепрошивать.
    • 0
      Блин. Спасибо. Впрочем глюков не заметил никаких. подожду багфикс, наверно по OTA.
  • 0
    На nexus 7 2012 нет опции «Select Runtime» в опциях разработчика :( А так хотелось ART попробовать.
    Может кто-то знает где можно взять свежий билд aosp для данного планшета? Тут code.google.com/p/android/issues/detail?id=62375 пишут что там есть эта опция.
  • 0
    Скажите, а вот эти fastboot и sideload — специфика нексусов?
    • 0
      Я не разработчик, не так глубоко вникал, но, насколько я понимаю, это базовый нативный способ работы с Android. Все остальное — костыли от производителя или энтузиастов.
  • 0
    Если не ошибаюсь, под линуксом было достаточно запустить adb server через sudo ( sudo adb kill-server && sudo adb start-server) и не пришлось бы трогать udev
    • 0
      Хм… Надо зарываться в документацию. Я не разработчик под Android, изучал кучу разрозненной документации и обрывков на форумах.
  • 0
    Дождался OTA, Nexus 4 перестал запускаться. Описал проблему здесь
  • 0
    Доки Android говорят нам, что idProduct можно не указывать…
    • 0
      Однако без этого не взлетало. Может вы и правы, а я где-то ошибся. Но везде, где я встречал — productID был в примерах.
      • 0
        Ну у меня в Xubuntu всё заработало.
        • 0
          Значит, спишем на высокий радиус кривизны моих рук))
  • 0
    Недолго жила ваша статья про сами-знаете-что :) Пожалуйста, по возможности пришлите ее копию мне на lorien_elf@rambler.ru.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.