Как стать автором
Обновить

Комментарии 31

Это вы так за полгода поднаторели?
ну я имел недюжий опыт написания программ по диззасемблированию ASN.1 кода и написанию патчей под ASA для оборудования Ericsson AXE 10
Как же давно я ждал эту статью на Хабре!
Жду продолжения :)
именно поэтому я начал писать сей труд, потому что пришлось ко всему приходить методом проб и ошибок
Всегда вызывают уважение разработчики, которые создают альтернативные, лучшие прошивки для сообщества, и в основном бесплатно. К сожалению, не у всех хватает сил поддерживать их долгое время (относится и к прошивкам, и к модам).
Вы совершенно правы. Поддерживать накопленный опыт не хватает времени, поэтому решил поделиться опытом здесь. Мне кажется это самое подходящее место.
В свое время я сознательно выбрал себе новым телефоном Siemens M75 как раз по причине того, что прошивки Сименса патчились вдоль и поперек. Времена популярность Сименс-клаба и базы патчей от Кибаба. Когда пришло время менять телефон, взял HTC Hero — были кастомные прошивки. Всегда привлекал этот факт :)
Спасибо автору за статью! Будет от чего оттолкнуться, когда появится время самому поковырять стоковую прошивку.
Я искренне надеюсь, что вам этого не предстоит. Я активно начал заниматься кастомами в январе этого года будучи на отдыхе в Тайланде, что чуть было не привело к большому скандалу со стороны моей спутницы ))))
Думаю, что можно подгадать время, когда она будет спать :)
Я по той же причине дважды выбирал фотоаппараты Canon.
А нельзя заменить только некоторые стандартные ресурсы без прошивания (и, желательно, без рутования)? Я хочу переместить в Jelly Bean некоторые картинки (только несколько файлов .png) с Ice Cream Sandwich, такие как скошенный переключатель on/off, зелёные checkbox и radiobutton и синюю подсветку основных кнопок.
рут — это немного другое — предоставление административного доступа к системным файлам.
Да, без рута можно заменить ресурсы, и довольно легко.
Для этого надо пересобрать образ ядра, то есть сделать unsecured boot, а затем также заменить оригинальные пакеты модифицированными.
У меня было в планах написать как это сделать )))
Давно хотел порыться в недрах телефона. Сейчас обладаю HTC Desire. Прошивка RuHD2, в целом ничего так, но есть косяки мелкие. Теперь и самому можно поправить.
Интересно было бы увидеть следующие статьи:
1) подробная настройка окружения для работы (под Linux), линки на проверенные временем утилиты. Краткое описание для чего каждая нужна. Своего рода самоучитель по последовательности использования этих утилит. Возможно и отладчик какой опишете, чтобы не сразу кирпич получить… (Может qemu справится с запуском прошивки.)
2) методы пересборки ядра со своими настройками, способы внедрения нового ядра в прошивку
3) методы превращения кирпича обратно в живое тело.
4) odex <-> deodex, список типовых терминов с определениями (чтобы легче было читать специализированные форумы), типовое расположение файлов в ФС андройда. Список твиков, которые можно провернуть «на коленке».

Ну, для разминки хватит! :)

PS. за статью спасибо!
Вы хотите все сразу ))). Часть вопросов, которые вы задаете — уже давно были освещены на хабре.
1) я для того чтобы иметь две или более систем использую Citrix XenClient. Самоучитель? Тут лучше задавать конкретные вопросы.
2) если вы когда-нибудь собирала ядро из исходников для linux, то вопросы отпадет сам по себе. Тут не расскажешь всего как конфигурировать ядро, как собирать… это практика мой друг.
3) кирпичи тоже бывают разные. этот как с машиной: чего-то не заводится… А что делали до этого?
4) вот хорошая ссылка
1) Я имел в виду полный набор. Типа утилита1 — делает odex-deodex(линк), утилита2 — делает то-то (но не рекомендую, ибо есть такие-то косяки) и т.д… В статье у вас есть определенные упоминания, что и как. Я же говорю про обзорную статью: какие утилиты вы пользуете, где взять, зачем нужны. В конкретных командах уже разобраться можно. Просто часто бывает делаешь какую-то муторную работу руками, а оказывается есть для этого отличный инструмент, типа android-kitchen, который вы упомянули в статье.
2) Да, собирал. И неоднократно. Вопрос больше о порядке загрузки самого устройства, порядка впихивания ядра в прошивку, структуры прошивки в целом. Есть же понятия «загрузчик», «ядро», «система». При включении сразу загрузчик стартует? А есть ли какой-то аналог BIOS на arm-устройствах? Я больше про это спрашивал, какой конфиг задать и как ядро собрать — это действительно вопрос практики.
3) Что-то в стиле howto… Если сломался так, то просто войдите в режим рекавери и сделайте хард ресет. Если сломался вот так, то по проводу заново вкатите в тело загрузчик. Ммм… Обощу: интересует инфа, куда стоит лезть начинающему прошивкокопателю, а что трогать категорически нельзя (например, загрузчик, какие-то модули системы)?
4) Спасибо.

А в целом, хочется видеть статью, благодаря прочтению которой, снизится порог вхождения в прошивкокопание. Хотя, скорее, это будет тянуть уже на более монументальный труд типа книги «Кастомизируем Андроид для чайников».
Спасибо за ваш комментарий.

Я обязательно опишу все тулзы которыми пользуюсь. Статей будет еще 3-4 как минимум, так как нужно осветить многие нюансы, допустим как снять чистый дамп, как делать unsecured boot, как писать update скрипты и т.п.

у меня больше дилемма как и в какой последовательности освещать материал. Хочется самого вкусного написать, но оно не будет понятным если не дать какие-то базовые объяснения, а «простыни гладить» не очень хочется.

Было бы хорошо, если вы напишите что хотите видеть в следующей статье, чтобы первая стала более понятной )))
В первую очередь — порядок загрузки устройства.
Во вторую — структура прошивки.
В третью — структура каталогов в андроид. Где что лежит. И что нельзя трогать, чтобы не получить кирпич.
Может быть, указать какие части прошивки отличаются от девайса к девайсу, а что не меняется.
Быть может приведете пример, как на скажем в CM10 вкрутить HTC Sence или Sony TimeScape.
Я бы хотел попробовать тебе на htc desire впихнуть timescape. Было бы интересно.
Еще у меня есть неиспользуемый n900, туда бы тоже можно было бы андроид вмонстрячить — посмотреть как будет работать. Тем более был какой-то порт на него.
Кстати, может быть еще поясните, как народ впихивает проприетарные драйвера — как там с бинарной совместимостью?
Может быть еще: как собрать андроид из исходников с нуля…

Правда, те вопросы, что я вам накидал — хватит на пять статей точно.
Так что смело начинайте цикл статей! ;)

PS. всё равно по ходу статей будут возникать новые вопросы.
В майском номере Хакера есть весьма интересная статья почти что в нашу тему. Называется она «Робот на поводке».
Рекомендую почитать. Рассказывается про использование утилит pm и am, ну и прочих программок в андроиде.
Кстати, я тут пока игрался с телефоном после прочтения статьи, наткнулся на build.prop. Погуглил — а там, оказывается, внутри много вкусностей спрятано!
Здорово, что появилась эта статья. Уверен, за ней пойдут подобные.

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

Я не критикую, а просто спрашиваю, посколько недопонимаю. Вот вы там исправляли какой-то страшный код, похожий на байт-код. А почему нельзя было взять файл джава, который содкржит вот этот код:
public static boolean isChina()
    {
      if ((HtcBuildFlag.Htc_PROJECT_flag == 216) || (HtcBuildFlag.Htc_PROJECT_flag == 218) || (HtcBuildFlag.Htc_PROJECT_flag == 23));
      while (((HtcBuildFlag.Htc_PROJECT_flag == 1) && (2 == HtcBuildFlag.Htc_LANGUAGE_flag)) || (HtcBuildFlag.Htc_PROJECT_flag == 27))
        return true;
      return false;
    }


заменить в нем тело метода на

{ 
return false; 
}


перекомпилировать файл, запаковать как было и потом запушить?

Спасибо.
Скомплиированный код Java, как и код многих других языков программирования нельзя декомпилировать в оригинальной состояние. Это не PHP или Perl, тут машинный код. Декомпилировать можно, но результат не всегда будет отображать действительность. С помощью декомпиляции или дизассемблирования можно прочитать логику или алгоритм, но не исходный код. У вас есть допустим Windows 7/8, соответственно вопрос, почему нельзя взять и заменить код на нужный чтобы не требовал активации? Ну потому чьл у вас нет исходников, чтобы взять их скомпилировать и заменить. Единственная возможность — сделать патч.
хм… Ну я думал для виндовс нет исходников, потому что она платная. А андроид же вроде опенсорс… Да? И его исходники раз уж не декомпилировать, то найти можно.

Разве не так? Например, откуда тогда взялся тот код, что я цитировал

public static boolean isChina()
    {
      if ((HtcBuildFlag.Htc_PROJECT_flag == 216) || (HtcBuildFlag.Htc_PROJECT_flag == 218) || (HtcBuildFlag.Htc_PROJECT_flag == 23));
      while (((HtcBuildFlag.Htc_PROJECT_flag == 1) && (2 == HtcBuildFlag.Htc_LANGUAGE_flag)) || (HtcBuildFlag.Htc_PROJECT_flag == 27))
        return true;
      return false;
    }


Я конечно может загоняю. Объясните
нет нет нет, все в порядке. спрашивайте.

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

код что вы процитировали — как раз таки тот самый случай. Библиотека HTCExtension — это собственная разработка HTC, как дополнение к существующему открытому коду андроида. Его никто не будет публиковать, и открытый код в свободном доступе вы не найдете.

Единственное, что иногда делают производители — это публикуют исходные коды ядра, для того чтобы разработчики могли делать собственные прошивки.
Спасибо )
Все встало на свои места… У меня в голове, разумеется )
Исходные коды ядра публикуются, потому что linux под GPL, и общественность давит на компании (а так да, они бы и рады не публиковать). Сам Андроид под лицензией Apache, которая позволяет не делиться модификациями, поэтому всё, что над ядром, HTC не открывает.
Извините, а что за девайс такой без поддержи аккаунта гугла?
Любые телефоны, продающиеся на территории Китая не имею поддержки гугла, точнее имеют, но он запрещен.
В моем случае это HTC One SU (t528w)
Заказывал с Китая HTC Sensation XE, все работает «из коробки».
В Китае есть такие отстраненные территории как Гон-Конг и Тайвань. На них запреты не распространяются, в отличие от Китая континентального.
У вас в начале раздела «Непосредственно модификации» -> «Создание патчей» ближе к концу речь идет о файле HTCExtension.jar. Но ведь код находится в файле HTCExtension.apk и соответственно команда для использования backsmali тоже должна дергать APK файл, а не JAR.
Вобщем путаница небольшая получилась видимо.
Или вы это специально в образовательных целях?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации