PDA

Просмотр полной версии : Замена Splash экрана в Android


AngelOfGrief
12.05.2013, 20:23
Предупреждение: данные действия вы выполняете на свой страх и риск! Неправильные действия могут привести к неработоспособности вашего устройства!

Сегодня озадачился сменой загрузочных картинок в Android.

При загрузке андроида последовательно используется 3 экрана:

1) Splash (обычно логотип фирмы-производителя)
2) Logo (по умолчанию зелёный робот)
3) Анимация

На рутованном девайсе заменить анимацию -- самое простое (это файл bootanimation.zip, состоящий из серии зипованных PNG файлов).
Но я хотел получить п. 1 и п. 2 без перепрошивки и пересборки ядра. Как ни странно, оказалось, что заменить п. 1 проще.

Нужен SSH доступ к девайсу. Смонтированные ROM-имиджи находятся в папке /dev/mtd. Чтобы узнать какой из них за что отвечает пишем в шеле:

cat /proc/mtd

Мой медиаплеер Iconbit Toucan Nano выдаёт что-то вроде (ненужное опущено):

mtd0: logo
mtd1: boot
mtd2: system
mtd3: cache
mtd4: userdata
mtd5: ubootenv

Далее через SFTP (я использовал обычный Far Manager с установленным WinSCP плагином) копируем "файл" mtd0 в компьютер. У меня получился файл размером ровно 4 мб внутри которого безо всяких заголовков тупо лежал 24-битный стандартный BMP файл с логотипом Iconbit, а лишнее пространство было просто заполнено нулями (ну это же всё-таки дамп флэша).

Открыв файл в Фотошопе я не меняя разрешения отредактировал его так как хотелось и сохранил в формате 24 бит. Получилось около 1 мб. При помощи утилиты hiew заполнил пустое место нулями.

Для прошивки флэша из командной строки Андроида (т.е. линукса) используется утилита flash_image. В моём девайсе её не оказалось, но я нашёл её в инете и она чудным образом у меня заработала. )) Утилита во вложении.

flash_image имя_раздела путь/имя_файла

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

flash_image logo /sdcard/logo/logo1.img

У меня была какая-то непонятность с записью во флэш. Если просто указываешь эту команду, она выполняется, но старые данные не стираются. Однако, если указать в качестве параметра какой-то короткий файл (например 600 кб), то утилита выдаёт ошибку, что файл якобы не найден (хотя он там есть), а в "файле" /dev/mtd/mtd0 после этого оказываются нули. Вот теперь уже можно записывать нужный нам файл. После записи можно проверить результат снова скопировав /dev/mtd/mtd0 на компьютер, там уже должны быть новые данные.

Далее пишем в шеле reboot и наслаждаемся новым Splash-экраном. ))

Часть 2 (лого) находится во втором разделе (boot), но там свой формат, его нужно сначала распаковать, а затем корректно пересобрать. Если это сделать неправильно, можно превратить девайс в "кирпич".

tsynik
12.05.2013, 21:14
Добавлю, по своим экспериментам с лого, что иногда нужно так же удалять первые несколько байтов заголовка BMP, и оставлять только RAW данные изображения, чтобы все было красиво. Иначе первые несколько пикселей будут мусором (у меня было заметно на черном фоне). В остальном все верно. Еще, форматы BMP в разных устройствах разнятся, но как правило это 24bit R8 G8 B8. Так же, logo бывает зашито в uboot.

AngelOfGrief
12.05.2013, 21:45
Я теперь пытаюсь понять что находится внутри boot.img чтобы убрать "зелёного робота". По описанию в инете там должно быть ровно 2К системной инфы, а затем image рам-диска с заголовком 00 00 00 00 1F B8. Но у меня там ничего такого нет... Непонятно.

wave_is
12.05.2013, 22:25
хорошая работа.
но я считаю что карпк должен слипнуть/просыпаться, а не загружаться при подачи питания.

AngelOfGrief
13.05.2013, 00:40
Ну это нужно сложнее тогда реализовывать. А что если машина брошена дней на 7? На месяц? Помимо слипа нужно тогда делать и полное отключение при более длительном простое. В штатных навигациях так и делается.

А мой девайс загружается быстрее чем за 1 мин. По-моему, нормально...

kristal0211
13.05.2013, 07:52
Эх, вот бы на Nexus 7 такое замутить, очень хочется убрать Logo.

wave_is
13.05.2013, 09:39
Ну это нужно сложнее тогда реализовывать. А что если машина брошена дней на 7? На месяц? Помимо слипа нужно тогда делать и полное отключение при более длительном простое. В штатных навигациях так и делается.

А мой девайс загружается быстрее чем за 1 мин. По-моему, нормально...

я часто на месяц машину не бросаю.
за ночь слипа у меня теряется 2%, за сутки тогда порядка 5, за неделю 35
полное отключение произойдет само при просадке родной батареи или если интеграция без батареи, то лучше всегда вешать АКБ машины через умный БП

но это все конечно холивар.

Реально согласен, обе позиции имеют право на жизнь

kristal0211
13.05.2013, 10:20
Кто сможет такое сварганить для Nexus 7, тут владельцев очень не мало, и думаю это многим понадобиться, дабы полностью сделать вид в авто, законченного продукта.

MaLiVer
13.05.2013, 10:29
Ну на Nexus 7 анимацию меняли в другой теме и это получалось. Осталось только знак андроида при старте

kristal0211
13.05.2013, 10:48
Ну на Nexus 7 анимацию меняли в другой теме и это получалось. Осталось только знак андроида при старте

Там меняли, но путем пересборки ядра, что очень не безопасно. Здесь я так понял белее гуманный способ.

AngelOfGrief
13.05.2013, 11:11
Эх, вот бы на Nexus 7 такое замутить, очень хочется убрать Logo.

А в чём сложность? Девайс рутованный? Тогда по моей методике.

AngelOfGrief
13.05.2013, 19:10
Там меняли, но путем пересборки ядра, что очень не безопасно. Здесь я так понял белее гуманный способ.

Просто в моём девайсе логотип находится на отдельном разделе. У кого есть Nexus 7 попробуйте через шелл ввести команду cat /proc/mtd и напишите сюда что выводится. Вообще данный метод должен подходить для любого девайса на Андроиде, просто название и расположение разделов может быть другим.

Но в принципе речь идёт не о пересборке ядра (это нечто другое), а просто о пересборке прошивки где вы один файл заменяете другим. Опасности никакой в этом нет, если девайс "окирпичился", просто заливаете старую прошивку через бутлоадер флэшки и всё. Прошивка -- это же файл update.zip где и находится всё это добро.

gmsers
25.11.2016, 17:17
Объясните как и чем открыть файл mtd

oleg707
25.11.2016, 18:31
Там меняли, но путем пересборки ядра, что очень не безопасно. Здесь я так понял белее гуманный способ.

неправильно. лого гугла не в ядре, а в буте. Поменять нереально:spiteful:
Поэтому мне лого гугла при холодном старте не мешает (привык).

halfpipe
10.02.2018, 17:46
Как в khadas vim поменять лого при начальной загрузке, используя данную рекомендацию http://docs.khadas.com/develop/BuildBootLogo/? Бутанимацию заменил.

(vS)
11.02.2018, 02:51
в другой ветке спроси, есть автор модифицированных прошивок

vitak
11.02.2018, 10:53
Как в khadas vim поменять лого при начальной загрузке, используя данную рекомендацию http://docs.khadas.com/develop/BuildBootLogo/? Бутанимацию заменил.

Ну так как в ссылке написано так и менять.