Пишем свою ОС: Выпуск 1
Данный цикл статей посвящён низкоуровневому программированию, то есть архитектуре компьютера, устройству операционных систем, программированию на языке ассемблера и смежным областям. Пока что написанием занимаются два хабраюзера — iley и pehat. Для многих старшеклассников, студентов, да и профессиональных программистов эти темы оказываются весьма сложными при обучении. Существует много литературы и курсов, посвящённых низкоуровневому программированию, но по ним сложно составить полную и всеохватывающую картину. Сложно, прочитав одну-две книги по ассемблеру и операционным системам, хотя бы в общих чертах представить, как же на самом деле работает эта сложная система из железа, кремния и множества программ — компьютер.
Каждый решает проблему обучения по-своему. Кто-то читает много литературы, кто-то старается поскорее перейти к практике и разбираться по ходу дела, кто-то пытается объяснять друзьям всё, что сам изучает. А мы решили совместить эти подходы. Итак, в этом курсе статей мы будем шаг за шагом демонстрировать, как пишется простая операционная система. Статьи будут носить обзорный характер, то есть в них не будет исчерпывающих теоретических сведений, однако мы будем всегда стараться предоставить ссылки на хорошие теоретические материалы и ответить на все возникающие вопросы. Чёткого плана у нас нет, так что многие важные решения будут приниматься по ходу дела, с учётом ваших отзывов.
Возможно, мы умышленно будем заводить процесс разработки в тупик, чтобы позволить вам и себе полностью осознать все последствия неверно принятого решения, а также отточить на нем некоторые технические навыки. Так что не стоит воспринимать наши решения как единственно верные и слепо нам верить. Еще раз подчеркнём, что мы ожидаем от читателей активности в обсуждении статей, которая должна сильно влиять на общий процесс разработки и написания последующих статей. В идеале хотелось бы, чтобы со временем некоторые из читателей присоединились к разработке системы.
Мы будем предполагать, что читатель уже знаком с основами языков ассемблер и Си, а также элементарными понятиями архитектуры ЭВМ. То есть, мы не будем объяснять, что такое регистр или, скажем, оперативная память. Если вам не будет хватать знаний, вы всегда можете обратиться к дополнительной литературе. Краткий список литературы и ссылки на сайты с хорошими статьями есть в конце статьи. Также желательно уметь пользоваться Linux, так как все инструкции по компиляции будут приводиться именно для этой системы.
А теперь — ближе к делу. В оставшейся части статьи мы с вами напишем классическую программу «Hello World». Наш хеллоуворлд получится немного специфическим. Он будет запускаться не из какой-либо операционной системы, а напрямую, так сказать «на голом железе». Перед тем, как приступить непосредственно к написанию кода, давайте разберёмся, как же конкретно мы пытаемся это сделать. А для этого надо рассмотреть процесс загрузки компьютера.
Итак, берем свой любимый компьютер и нажимаем самую большую кнопочку на системном блоке. Видим веселую заставку, системный блок радостно пищит спикером и через какое-то время загружается операционная система. Как вы понимаете, операционная система хранится на жёстком диске, и вот тут возникает вопрос: а каким же волшебным образом операционная система загрузилась в ОЗУ и начала выполняться?
На картинке изображена поверхность дискового накопителя. У дискеты 2 поверхности. На каждой поверхности есть кольцеобразные дорожки (треки). Каждый трек делится на маленькие дугообразные кусочки, называемые секторами. Так вот, исторически сложилось, что сектор дискеты имеет размер 512 байт. Самый первый сектор на диске, загрузочный сектор, читается BIOS’ом в нулевой сегмент памяти по смещению 0x7С00, и дальше по этому адресу передается управление. Начальный загрузчик обычно загружает в память не саму ОС, а другую программу-загрузчик, хранящуюся на диске, но по каким-то причинам (скорее всего, эта причина — размер) не влезающую в один сектор. А поскольку пока что роль нашей ОС выполняет банальный хеллоуворлд, наша главная цель — заставить компьютер поверить в существование нашей ОС, пусть даже и на одном секторе, и запустить её.
Как устроен загрузочный сектор? На PC единственное требование к загрузочному сектору — это содержание в двух его последних байтах значений 0x55 и 0xAA — сигнатуры загрузочного сектора. Итак, уже более-менее понятно, что нам нужно делать. Давайте же писать код! Приведённый код написан для ассемблера yasm.
Эта короткая программа требует ряда важных пояснений. Строка org 0x7C00 нужна для того, чтобы ассемблер (имеется в виду программа, а не язык) правильно рассчитал адреса для меток и переменных ( puts_loop, puts_loop_exit, message ). Вот мы ему и сообщаем, что программа будет загружена в память по адресу 0x7C00.
В строках
происходит установка сегмента данных ( ds ) равным сегменту кода ( cs ), поскольку в нашей программе и данные, и код хранятся в одном сегменте.
В строке « times 0x1FE-finish+start db 0 » производится заполнение остатка кода программы (за исключением последних двух байт) нулями. Делается это для того, чтобы после компиляции в последних двух байтах программы оказалась сигнатура загрузочного сектора.
С кодом программы вроде разобрались, давайте теперь попробуем скомпилировать это счастье. Для компиляции нам понадобится, собственно говоря, ассемблер — выше упомянутый yasm. Он есть в большинстве репозиториев Linux. Программу можно откомпилировать следующим образом:
Полученный файл hello.bin нужно записать в зарузочный сектор дискеты. Делается это примерно так (разумеется, вместо fd нужно подставить имя своего дисковода).
Поскольку далеко не у всех остались дисководы и дискеты, можно воспользоваться виртуальной машиной, например, qemu или VirtualBox. Для этого придётся сделать образ дискеты с нашим загрузчиком и вставить его в «виртуальный дисковод».
Создаём образ диска и заполняем его нулями:
Записываем в самое начало образа нашу программу:
Запускаем полученный образ в qemu:
После запуска вы должны увидеть окошко qemu с радостной строчкой «Hello World!». На этом первая статья заканчивается. Будем рады увидеть ваши отзывы и пожелания.
История: Как два разработчика устали от Android и создали собственный смартфон
Основатель Zilta Лари Нумминен, главный разработчик компании Джукка Кекалайнен и её менеджер по маркетингу Артём Климкин рассказали изданию Fastcompany о том, как и почему они создавали собственный смартфон.
Подобно большинству специалистов, занятых в сфере технологий, Лари Нумминен и Джукка Кекалайнен основали свою компанию Zilta, чтобы c помощью программного обеспечения облегчить жизнь людям. В случае Zilta основатели хотели сделать смартфоны простыми и доступными для тех, кто не дружит с техникой. Для этого они создали приложение для Android, игравшее для новичков роль домашнего экрана с простым доступом к самому необходимому — однако вскоре они столкнулись с проблемой. Их приложение не могло компенсировать неудобство в использовании смартфонов на базе Android. Поэтому они решили заняться бизнесом и воплотить в жизнь смартфон Zilta.
Почему они отказались от крупных платформ, и как они создали собственное техническое обеспечение, чтобы сделать платформу лучше существующих?
Рождение нового смартфона
«Когда люди знакомятся с новой технологией, они вынуждены обучаться, и, создавая трудные в использовании смартфоны, мы только усложняем им жизнь, — отвечает Лари Нумминен на вопрос о том, что не так с современными смартфонами. — На последние два смартфона, которые я приобрел, было заранее установлено более 35 приложений, которые навязчиво привлекали внимание пользователя. В действительности мы регулярно используем совсем небольшое количество приложений, а те, кто профессионально не связан с технологиями, редко ищет, что бы ещё установить».
Zilta надеется решить эту проблему с началом продаж в текущем году. Люди, которые не разбираются в технологиях, смогут понять принцип работы с новым смартфоном за считанные секунды. В основе его — упрощенная операционная система, созданная по модели Android 4.4, разбивающая рабочий стол на шесть частей, пять из которых отведены под чаще всего используемые функции: почта, фото, контакты, браузер, сообщения; шестая часть — под дополнительные приложения и настройки.
Звучит знакомо — все потому, что Нумминен и Кекалайнен в стремлении удовлетворить потребности пользователей вдохновлялись ранними телефонами.
«Образцом для подражания были старые Nokia из 90-х, у которых функций было всего ничего, зато телефоны выполняли их отменно, — говорит Нумминен. — Вообще, и сейчас некоторые люди пользуются классическими моделями Nokia».
«У нас было общее представление о том, как наш смартфон будет выглядеть и каким будет на ощупь», — говорит менеджер по маркетингу в Zilta Артем Климкин. Вместе с Нумминеном, Кекалайненом и еще четырьмя участниками проекта, включая двух разработчиков для Android, UX дизайнера и дизайнера по продукту, он и составляет всю команду сотрудников компании. «Принцип работы нашего устройства полностью основан на законе Парето, по которому большая часть результата исходит из минимального количества усилий. Поэтому на экране «Домой» у смартфона Zilta всего 6 кнопок, которые пользователи могут формировать исходя из 80% своих запросов».
Используем приложение, чтобы (непреднамеренно) протестировать операционную систему
Команда создателей Zilta, как ни странно, сперва даже не задумывалась о создании смартфона. Начав разработку, они полагали, что Zilta станет лишь одним из тысяч приложений в Google Play, правда, единственным, которое решит основную проблему гаджетов на Android.
«Для начала мы сконцентрировались на создании «смартфона для пожилых», но потом осознали, что выбрали правильную стратегию, — говорит Нумминен. — Мы увидели, что в среднем наши пользователи куда моложе, чем ожидалось: в основном 55-64-летние. Кроме того, бессмысленно определять продукт демографическими данными. Встречаются как и продвинутые 90-летние пользователи, так и абсолютно безграмотная в работе с техникой молодежь».
Но что гораздо важнее осознания бессмысленности затеи затачивать под демографию, команда обнаружила, что приложение не добирается до пользователей, для которых в первую очередь оно и было разработано.
«Несмотря на хорошие показатели загрузок, — признается Нумминен. — все потенциальные покупатели, с которыми мы беседовали лично, сказали, что вообще не загружают приложения; они покупают телефоны, где все основное установлено заранее».
В таком случае, какой смысл стартапа с приложением, которое облегчает использование смартфона для миллионов пользователей, если эти миллионы никогда не скачают это приложение на только что купленный гаджет?
По словам Нумминена, ответ на этот вопрос таков: самим сделать смартфон.
Коммодитизация ломает барьеры на рынке технического обеспечения
Zilta вышла на рынок технического обеспечения не только из-за нежелания целевой аудитории загружать приложение.
«Другая причина, по которой мы решили уйти от приложения к техническому обеспечению, заключается в том, что изначально наши бета-тестеры пользовались не теми смартфонами, — говорит Нумминен. — У многих из первых бета-тестеров были либо высокотехнологичные дорогие девайсы, либо устройства с заметными недоработками вроде до нелепого маленькой оперативной памяти. Если все представленные в магазине телефоны выглядят одинаково, кто покажет покупателю старше шестидесяти, какой из них действительно ему подходит?»
Многие стартаперы, связанные с разработкой ПО, быстро переходят в другой проект, когда понимают, что для того, чтобы их целевая аудитория начала пользоваться разработанным ими приложением, нужно самостоятельно выпускать как ПО, так и само устройство. Однако Нумминен и команда Zilta воспринимали это как вполне логичное и выполнимое решение, исходя из положения вещей на рынке смартфонов.
«Железо» для смартфонов становится общедоступным. Вопрос в том, что с ним делать, — говорит Нумминен. — Я провожу аналогию с Ford Model T — в 1922г., после того, как автопроизводитель кардинально поменял производственный процесс, эта модель занимала 60% автомобильного рынка в США. Пару лет спустя появилось 109 различных автомобильных брендов, ведь все хотели отличаться друг от друга. Мы считаем, нечто похожее можно наблюдать со смартфонами — каждую неделю мы узнаем о новых брендах, вроде Oppo, OnePlus One и так далее».
Будьте осторожны в выборе «железа»
Поскольку команда Zilta создала свою собственную ОС (на базе Android 4.4 KitKat), ей, как никому другому, были известны требования к «железу», подходящему для их операционной системы и отвечающему потребностям клиентов. Разработчики выбрали 5-дюймовый экран с чипом MediaTek MTK 6582, четырехъядерный процессор на 1.3 Ггц, 1 Гб RAM, 4 Гб ROM и батарею емкостью 1800 мА·ч, чтобы телефон получился и достаточно мощным, и энергосберегающим. Вдобавок, они оснастили Zilta задней камерой в 5 МП, фронтальной в 2 МП и возможностью использовать две SIM-карты.
Но у команды разботчиков софта, запустивших Zilta, не было ресурсов, опыта или денег, имеющихся у компаний вроде Apple, которые могут построить собственный завод и наладить производство. Это означало, что такие новички в бизнесе должны были полагаться на уже существующие предприятия, чтобы вывести Zilta на рынок.
«Как только мы определились с характеристиками «железа» для нашего смартфона, мы стали думать, кто мог бы запустить его в производство, — говорит главный разработчик и один из основателей Zilta Джукка Кекалайнен. — Мы разузнали о OEM-производителях (оригинальный производитель оборудования) и ODM-производителях (контрактный производитель электроники). Мы знали, что было необходимо найти ODM-завод, который мог производить и подгонять телефон под наши требования».
Как и многим стартаперам в данной сфере, Кекалайнену сперва пришел в голову сайт alibaba.com. Кекалайнен нашел и аналогичный ресурс, dhgate.com. Оба сайта представляют собой оптовые торговые площадки по типу eBay, на которых можно приобрести что угодно, начиная от кукол в виде Стива Джобса, заканчивая замысловатыми деталями для компьютеров, сделанными по спецзаказу на заводах и получаемых через интернет-магазины этих заводов.
«Я составил список из примерно 15 заводов, найденных в поиске или через аккаунты продавцов на этих сайтах, и стал рассылать им сообщения по электронной почте, — делится Кекалайнен. — В первую очередь я обращал внимание на пункт «минимальное количество единиц в заказе», то есть на то, насколько большие партии они могут продавать. Адекватные ответы мы получили от примерно десяти заводов из списка, где минимальный заказ составлял в основном 2000–10000 единиц, что для такой маленькой компании, как наша, было очень затратно. Еще два завода могли сделать 300 или 500 телефонов, но качество фотографий образцов не внушало доверия».
Перед тем, как решиться на достаточно крупный заказ для одного из этих заводов, Кекалайнен заказал на пробу два телефона в качестве тестовых экземпляров — что было правильным ходом. Ирландский отдел импорта забраковал телефоны с пометкой «контрафакт».
«До смешного ужасный опыт, — говорит он. — Около месяца мы ждали эти телефоны, и когда ирландская таможня их забраковала, у нас в офисе появилась шутка — «Где наши контрафактные телефоны?»
В конце концов, они решили идти другим путем. Кекалайнен связался с местным импортером с более чем 10-летним опытом поставок через компании, наладившие сотрудничество с проверенными производителями в г. Шеньчжэн.
«Он нашел ODM-производителя, который мог сделать телефон в соответствии с нашими требованиями, и в качестве образца достал уже выпускаемую ими модель, — говорит Кекалайнен. — Мы проверили «железо» — качество было даже лучше, чем мы ожидали».
Кекалайнен согласен, что для стартапов, которые используют в качестве производителей заводы в Китае, может быть дешевле напрямую связываться с этими заводами, но советует потратить лишние средства и сотрудничать с экспертом, имеющим налаженные каналы поставок из Китая, дабы партия товаров не была задержана на таможне с пометкой «контрафакт».
Получили готовый продукт? Это только начало
Компании Zilta уже удалось найти подходящий завод, она даже получила прототипы своего первого смартфона, теперь команда вносит последние изменения в софт и заканчивает работу над «железом» перед выходом Zilta в продажу, планируемым на декабрь, за €139 ($189USD или примерно 6500 рублей).
Несмотря на то, что ПО и «железо» почти готовы, семеро сотрудников компании теперь вынуждены задумываться о том, что разработчиков обычно не волнует: о дистрибуции. В конце концов, у них нет Google Play или App Store, где ПО можно хранить и мгновенно распространять, отдав магазину 30% выручки.
«Мы сами будем заниматься дистрибуцией, но мы также будем вести переговоры с потенциальными партнерами в системе поставок, — говорит Нумминен. — Для начала, будем привозить продукцию в Ирландию, а отсюда сами организовывать доставку. На данный момент, мы оформляем предзаказы только по Евросоюзу, поэтому все заточено под Единое экономическое пространство Европы. Со временем мы, конечно, подумаем о возможностях за границей, но, как маленькая команда, сейчас мы сконцентрированы на том, чтобы доставить первую партию к Рождеству».
Что касается других стартаперов, которые хотят заняться «железом» — Нумминен уверяет, что все не так страшно, как может показаться. Секрет в том, чтобы все разузнать и не бросаться подписывать контракт на производство, не изучив сперва продукт. В доказательство того, что в наше время разработчикам софта заняться «железом» стало проще, чем когда-либо, Нумминен приводит в пример такие компании, как Fairphone, которая собрала деньги на первую партию своих «этичных» смартфонов на краудфандинговых ресурсах, и Jolla, которая собрала деньги на производство своей собственной линии смартфонов.
«До этого мы никогда не производили и даже не задумывались о производстве «железа», — говорит он. — Но мне кажется, барьеры, которые мешали людям начать работать в этом направлении, рушатся. Разрабатывать или сочетать работу над «железом» и софтом сейчас как никогда просто».
Создаем Android-прошивку из подручных материалов
Содержание статьи
Любой пользователь Android имеет свое представление о том, как должна выглядеть операционная система, какие функции выполнять и какой набор ПО в ней должен быть установлен по умолчанию. Однако далеко не все знают, что создать собственную прошивку не так уж сложно. Для этого совсем не обязательно разбираться в ядре Linux, уметь компилировать исходники Android или понимать, как устроен смартфон.
Введение
Существует три способа создания собственной прошивки для Android-коммуникатора: 1. Допиливание и компиляция операционной системы из исходников, публикуемых компанией Google или командой CyanogenMod. 2. Модификация стоковой прошивки коммуникатора. 3. Модификация сторонней прошивки, созданной с помощью первого или второго способа.
Первый способ является наиболее правильным и гибким, однако он зачастую требует достаточно глубоких знаний об особенностях Android и умения редактировать исходники системы так, чтобы они после этого работали на устройстве. Эта тема выходит за рамки нашей статьи, поэтому сборку исходников Android мы рассматривать не будем, а остановимся на двух других способах, точнее на третьем.
Сторонние прошивки (так называемые моды) существуют практически для любого Android-устройства, с момента выхода которого на рынок прошла хотя бы неделя. Обычно они уже включают в себя все необходимые модификации, необходимые для корректной работы прошивки на коммуникаторе, а потому представляют собой отличную площадку для экспериментов над системой. Их можно модифицировать практически до неузнаваемости, включать в состав ОС любое ПО, изменять ее внешний облик, создавать множество низкоуровневых настроек с помощью простого текстового редактора и файлового менеджера. Эти действия не требуют глубоких знаний ОС и могут быть выполнены любым читателем журнала.
Выбираем подопытного
Итак, предположим, что наш коммуникатор уже зарутован и в загрузочную область записана консоль восстановления ClockworkMod, позволяющая устанавливать на аппарат любые прошивки без всяких ограничений (о том, как это сделать, мы писали в статье «Тотальное подчинение», опубликованной в октябрьском номере ][). Теперь мы хотим установить на устройство другую прошивку, да не абы какую, а с собственными модификациями, настройками и набором ПО. Поэтому нам нужен каркас, а именно чужая прошивка, стабильно работающая на нашем устройстве. Где ее взять?
Главное место обитания всех ромоделов — это, конечно же, форумы xda-developers.com. Там можно найти все что угодно для коммуникаторов, работающих под управлением iOS, Windows Mobile, Windows Phone и Android. Открываем сайт в браузере, жмем на раздел Forums и ищем в списках форумов свой коммуникатор. Далее заходим в соответствующий раздел Android Development и внимательно просматриваем список тем, содержащих в названии слово «[ROM]». Лучше найти какую-нибудь чистую прошивку с названием вроде «Pure Android 2.3 Rom» или порт CyanogenMod, хотя, в сущности, подойдет и любая другая (правда, возможно, придется отменять авторские изменения). Открываем тему, проматываем первый пост, находим где-то в конце ссылку на скачивание и загружаем ROM на свой комп.
Моды анимации загрузки с xda-developers
Хакер #156. Взлом XML Encryption
Общая структура каталогов и важные файлы
Набор файлов и каталогов, образовавшийся в результате выполнения предыдущей команды, и есть, в сущности, операционная система Android, причем ровно в том виде, в каком она будет размещена в NAND-памяти устройства. В зависимости от версии Android и фантазии автора, она может содержать разные наборы каталогов и файлов, однако в ней всегда присутствуют три обязательных объекта: META-INF, файл boot.img и директория system.
Первый каталог содержит метаинформацию о прошивке, включая файлы сертификатов автора, манифест со списком файлов и их контрольными суммами, а также скрипт обновления, который может создавать в NAND-памяти новые файлы, менять права доступа и выводить прогресс-бар, который видят пользователи во время установки прошивки.
Файл boot.img содержит загрузочный образ, который включает в себя ядро Linux и образ initrd. Его можно распаковать, однако для нас он не несет особой пользы, так как почти любые системные параметры можно изменить с помощью файлов настроек и файловой системы /proc. Если же тебе требуется ядро, собранное с особыми параметрами, например с активированным планировщиком BFS или поддержкой NFS, то почти наверняка его можно найти на том же xda-developers и прошить с помощью ClockworkMod.
ClockworkMod Recovery: кастомное меню восстановления для Android
Наконец, каталог system — это то, ради чего все и затевалось. Содержимое этого каталога и представляет собой операционную систему Android без ядра Linux. Он содержит все, что нужно для работы ОС, а потому знать его структуру просто необходимо. Выглядит она так:
Kоманда setprop
Приведенные в статье настройки build.prop можно применить и в уже работающей системе с помощью команды setprop:
Собственный набор ПО
Каталог /system/app содержит все предустановленное в прошивку ПО. Удаляя и добавляя пакеты в этот каталог, мы можем изменить набор приложений, доступных «из коробки». Например, ни для кого не секрет, что стандартный ланчер Android (да и ADWLauncher в CyanogenMod) тормозит и имеет многочисленные недостатки. ОK, заменим его на LauncherPro:
И это все. Не надо ничего устанавливать, не надо нигде ковыряться, просто закидываем нужное приложение в каталог — и готово. Даже имя не имеет значения, Android сам найдет нужное приложение и установит его в качестве домашнего экрана. Таким же образом можно поместить в прошивку любую другую программу или удалить ее оттуда.
Полезно поместить в прошивку одно из приложений для поиска утерянного смартфона (например, prey), тогда даже в случае сброса до заводских настроек оно останется в ОС и будет работать. Также можно заменить некоторое системное ПО, например добавить Dialer One вместо стандартного Phone.apk или Go SMS вместо sms.apk.
Как насчет системных Linux-приложений, например ssh-сервера или mc? Здесь тоже все просто. Собрать софтину для Android и процессора ARM можно с помощью комплекта NDK от Google, но большинство нужных приложений уже собрано до нас. Например, мы хотим предустановить mc в свою прошивку. Идем на xda-developers и выполняем поиск по запросу Midnight Commander. На первой же странице находим apk-пакет с установщиком и распаковываем его с помощью все того же unzip:
Видим в списке распакованных файлов assets/kits/mc-4.7.5.4-arm.tar.jet. Это архив tar.gz, который распаковывается в корень системы после установки apk-пакета (а точнее, после установки apk, запуска приложения и нажатия кнопки Install). Мы можем сразу распаковать его в нашу прошивку и получить предустановленный mc:
Теперь для запуска файлового менеджера на устройстве достаточно открыть терминал и набрать mc. Другие приложения могут распространяться в zip-архивах для прошивки с помощью ClockworkMod Recovery. Поместить их в свой мод еще проще, для этого достаточно перейти в корень прошивки (в данном случае
/rom) и распаковать архив с помощью unzip.
Свежераспакованная прошивка
Внешний облик
Собственную прошивку чаще всего создают для того, чтобы изменить внешний облик Android по своему вкусу. Проделать эту операцию в Android, опять же, очень просто. Все настройки графического интерфейса Android хранятся в файле framework/framework-res.apk. Его можно распаковать с помощью утилиты apktool:
В результате в текущем каталоге должен появиться каталог framework-res, содержащий все файлы пакета. Наиболее интересные подкаталоги внутри него — это res/drawable-* и res/layout-*. Первый содержит все графические элементы в виде png-файлов для разных разрешений и положений экрана. Например, drawable-land-mdpi — это каталог с графическими ресурсами для экранов среднего разрешения, находящихся в горизонтальном положении (во время поворота экрана ОС переключается на использование других файлов). Разумеется, любой файл можно отредактировать или заменить другим.
Распаковываем framework-res.apk
Каталоги layout содержат описания графических элементов в формате XML (на самом деле они хранятся в бинарном формате AXML, но apktool преобразовал их в обычный XML). Формат описания достаточно прост и понятен, но с наскоку с ним разобраться трудно, особенно если не знать, где что находится. Поэтому мы снова обратимся к услугам обитателей форума xda-developers, которые уже успели придумать массу различных модификаций для графического интерфейса Android. Их легко найти с помощью поискового запроса «framework-res mod имя_устройства».
Обычно такие моды распространяются в виде готового файла framework-res.apk, который можно просто положить в свою прошивку. Если же ты хочешь найти конкретные отличия в содержимом, то мод можно распаковать и сравнить с твоим framework-res с помощью diff:
К сожалению, в рамках одной статьи мы не можем рассмотреть хотя бы часть внутреннего устройства framework-res, поэтому за более подробной информацией обращайся к соответствующей теме форума 4PDA.
goo.gl/tlHRo — набор советов по изменению framework-res.apk.
goo.gl/fTvz8 — простая анимация загрузки с логотипом Android.
goo.gl/Ya1fX — анимация загрузки с плазменным кругом.
goo.gl/P6JR — анимация загрузки в стиле IBM PC.
goo.gl/sGXwa — анимация загрузки Android Honeycomb.
После внесения модификаций можно собрать framework-res.apk с помощью все того же apktool. Однако для этой операции требуется утилита aapt из комплекта Android SDK, которую apktool использует для окончательной упаковки apk-файла. Ее можно получить и отдельно:
Теперь можно собрать файл:
Следующий этап — это изменение анимации загрузки. Она хранится в виде обычных png-файлов, упакованных в архив system/media/bootanimation.zip. Распакуем его:
Внутри находится файл desc.txt, описывающий анимацию в следующем формате:
Стандартный вид этого файла:
Это значит, что изображение имеет размер 480 x 800, а скорость смены изображений (FPS) составляет 30 штук/с. Далее идет описание первой части анимации, файлы которой находятся в каталоге part0. Она проигрывается один раз (цифра 1 после p). Следующая часть (part1) проигрывается бесконечное число раз, пока аппарат не загрузится. Обычно каталог part0 содержит изображения, соответствующие первой части анимации, а part0 — все остальные изображения, которые проигрываются в цикле. Сами изображения должны быть одинакового размера, а их названия должны содержать числа в возрастающем порядке, например 0001.png, 0002.png и т. д.
Так как анимация загрузки имеет очень простой формат, ее довольно легко сделать. Достаточно преобразовать видеоролик в png-изображения с помощью mencoder (в desc.txt необходимо выставить значение FPS 24):
Но и это будет лишним. Участники форума xda-developers наделали столько анимаций, что необходимость работы руками отпадает вовсе. Ссылки на интересные анимации приведены в конце статьи.
Низкоуровневые настройки
Последнее, о чем я хотел бы рассказать в статье, — это редактирование низкоуровневых настроек. В Android для этого есть файл system/build.prop, который хранит информацию о сборке прошивки и настройки для конкретных устройств. Добавив в этот файл те или иные строки, можно изменить функционирование Android, ускорить его работу или уменьшить расход батареи. Ниже приведены наиболее интересные настройки.
Стандартный build.prop для Motorola Defy
Помимо всего этого, многие пользователи также рекомендуют применять следующие комбинации флагов:
Все эти строки необходимо просто поместить в файл system/build.prop и сохранить.
Сборка
ОК, мы внесли необходимые изменения, внедрили свои приложения, твикнули систему и теперь должны создать готовый к прошивке образ ОС. В этом нам поможет утилита testsign. Сначала следует запаковать прошивку с помощью zip:
Теперь необходимо подписать архив, чтобы Recovery смог его установить:
После этого закидываем архив my-rom-signed.zip на карту памяти устройства и выключаем аппарат. Чтобы попасть в Recovery, включаем аппарат с зажатой клавишей уменьшения громкости (для некоторых устройств процедура может отличаться).
Теперь переходим в пункт «Install zip from sdcard», а затем в «Choose zip from sdcard», находим my-rom-sign.zip на SD-карте и выбираем Yes. После завершения установки выбираем «Reboot system now».
Выводы
Android — гибкая платформа, и в этой статье описаны далеко не все возможности по ее модификации. Более глубокая модификация может включать в себя замещение ядра, изменение экрана блокировки и стандартных приложений, активацию таких возможностей, как автоматическая установка приложений на карту памяти, внедрение механизма загрузочных скриптов (/etc/init.d), и многое другое. Обо всем этом мы поговорим в следующих статьях.
Евгений Зобнин
Редактор рубрики X-Mobile. По совместительству сисадмин. Большой фанат Linux, Plan 9, гаджетов и древних видеоигр.