image

Статья написана 10 лет назад! Но до сих пор та же самая версия Андроид осталась свободной и открытой. Многие компании продолжают в своих устройствах ориентироваться на Андроид 4.4.

Китайские и Тайваньские производители Android-устройств поставляют исходный код и свои добавления без документации. Сейчас (Прим. автора: на момент осени 2012 года) в регионе Тайбэй и Шеньчжень наблюдается взрывной рост технопарков. Зачастую, сотрудники многочисленных компаний только сейчас начали работать с кодом. И, как правило, проектные сроки очень сжатые. Документации нет совсем.

Постараемся разобраться, из каких частей состоит дерево исходного кода типичного Android-устройства и какие любимые места модификации кода у производителей софта из ЮВА.

WP9900 автомобильная навигационная приставка (Android)

В этой статье информация по типичному устройству WP9900 компании Wonde Proud Technology Co., Ltd. (Тайвань) на A8 / Cortex 1 Ghz.

Обычно код передаётся как есть одним большим архивом. В нашем случае запакованный архив занимал около 6 гигабайт. А в распакованном виде — 8 800 Мб. Это был каталог с названием Android_2.3.7.1. Можно догадаться, что это Android 2.3.x «Gingerbread» или «Имбирный пряник». Цифра 1 в версии, вероятно, является релизом самого производителя.

В крупных компаниях существует понятие платформы — это определённый зафиксированный набор версии «железа», версии ядра Linux и версии ОС Android. Практика такова, что с новой версией железа обычно переходят к новым версиям программного обеспечения. В данном случае это 1 версия железа и видимо, 1 версия Android платформы для производителя.

Внутри следующие каталоги


  • bionic — версия открытой стандартной библиотеки языка Си под лицензией BSD;
  • bootable — каталог с загрузчиком, программой recovery.c и installer.c;
  • build — каталог для сборки Android;
  • cts — Compatibility Test Suite, тест совместимости для Андроид;
  • dalvik — исходный код виртуальной машины Java для Андроид;
  • development — программы и утилиты необходимые для разработчика;
  • device — платформозависимые библиотеки для различных устройств (HTC, Samsung и т.д.);
  • external — различные системные утилиты из наследия Linux, которые использует ОС Android;
  • frameworks — фреймворк ОС Android, среда в которой работают приложения;
  • hardware — исходный код драйверов и модулей Linux специфичных для железа платформы;
  • image — место куда копируются готовые образы для прошивки устройства;
  • kernel — исходный код ядра Linux;
  • libcore — исходный код библиотек на языке Java для ОС Android;
  • ndk — Native Development Kit, исходный код для разработки приложений на Си под ОС Android;
  • out — директория для результатов работы системы сборки;
  • packages — исходные коды пакетов приложений (APK);
  • prebuilt — кросскомпиляторы под различные платформы (toolchain);
  • sdk — Software Development Kit, среда для сборки приложений и библиотек;
  • system — системные утилиты и библиотеки для ОС Android на языках Си и Си++;
  • Data — закрытые специфичные для производителя железа библиотеки;
  • cp_image.sh — скрипт для копирования имиджей и создания файла обновления устройства;
  • mk_image.sh — скрипт для сборки всего программного обеспечения;
  • touch_android.sh — скрипт для удаления собранных образов.

Что же меняют в коде программисты из Китая и ЮВА?


Так как исходного кода очень много, мы ограничимся подробным изучением только отдельных каталогов в дереве исходников. Эти места чаще всего модифицируются в процессе творчества инженеров из ЮВА.

packages/apps — это каталог где хранятся исходники и бинарники пакетов приложений для ОС Android.

Чаще всего приложения пишутся на Java. Обычно модификации или переделке в первую очередь подвергаются Launcher, Video, Radio, Settings и другие специфичные для устройства пакеты приложений.

frameworks/base/services/java/com/android/server — директория где хранятся исходные коды отдельных процессов жизнедеятельности ОС. В частности, там есть класс (PackageManagerService.java) для установки APK пакетов, связывания с ним дополнительных библиотек, предоставления системных прав приложению.

frameworks/base/packages/SystemUI — место где находятся системные пакеты, которые модифицируют статус бар и доступ к USB.

Вообще в каталоге frameworks/base/packages находятся приложения для установки внешних соединений и прав доступа к системе. Также внутри исходников фреймворка frameworks/base/core/java/android в отдельной директории, например, по имени производителя устройства размещается небольшой набор классов, который напоминает по функциональности backdoor (от англ. back door, чёрный ход).

Перечислим функции этих небольших Java классов: настройки по умолчанию в системе, доступ к GPS, доступ к bluetooth, доступ к удалённому FTP, снимок с экрана устройства, доступ к базе данных телефонной книги и цифровым ключам. Вот такие <сарказм>обоснованные</сарказм> модификации фреймворка делают наши коллеги из ЮВА.

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

В каталоге hardware собраны разнообразные драйвера от внешних устройств, которые поставляются другими крупными производителями из Китая. Вот например каталог для библиотеки, которая обеспечивает функционирование 3G модема — hardware/ril/reference-ril. Если заглянуть внутрь, то можно обнаружить привязку к конкретному модему.

По нашему предположению, именно такие незначительные изменения в библиотеке очень помогают производителям из ЮВА искусственно заставлять покупателей приобретать полностью весь набор периферийных устройств с наценкой.

kernel — тут находиться исходный код ядра Linux, как правило сильно пропатченый. Часто это 10-15 различных патчей. Никакой документации или намёков на то, какая последовательность патчей была использована. Только в логах загрузки можно обнаружить отдельные модули ядра. Без этих модулей собранное из публичных исходников ядро скорее всего не будет работать на устройстве. Обычно это поддержка видеовыходов, питания, тачскрина, bluetooth, и других специфических протоколов.

Заключение


Как правило, все эти дополнения не проходят никаких процедур тестирования, что соответственно влияет на итоговое качество продукта. Отсутствие документации лишь усугубляет ситуацию.

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

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


  1. unsignedchar
    14.10.2021 22:48

    Хотелось бы пожелать производителям ЮВА

    Не уверен, что хоть кто-то из них читает этот блог ;) И зачем им документировать свои разработки? Устройства ихние и так продаются.


    1. ignat99 Автор
      14.10.2021 22:55

      Считаю что выкладывание в открытый доступ исходников с хорошей документацией в виде мануала это стратегия для долгоживущего проекта.

      Кстати, программу приведенную выше по ссылке можно пересобрать под Андроид. У меня в исходниках (основанных на OpenCPN) есть версия wxWidget под Андроид. Если Бог даст, нужно будет попробовать собрать, тем более что это необходимо для некоторых наших устройств на Android 4.4.

      Возможно, индустриальные Китайские решения, продаются гораздо хуже чем ширпотреб. Именно из за невозможности модификации и послепродажного обслуживания. И совершенно неадекватной цены на исходники. Для каждой мелкой програмульки ещё 10 лет назад цены начинались от 20 000$.