Содержание
- Модификация стоковых прошивок для Android. Часть 3
- Кому и зачем это нужно?
- Миф 1-ый: стоковые прошивки работают быстрее
- Миф 2-ой: стоковые прошивки работают стабильней
- Миф 3-ий: если производитель так сделал, значит так оно надо
- Миф 4-ый: моды, твики, патчи и прочее тоже навязывают видение разработчика
- Кастомный Android: делаем свою прошивку из стоковой, не копаясь в исходниках
- Содержание статьи
- Структура ZIP-файла с прошивкой
- Xakep #283. Змеиная пирамида
- Распаковываем system.new.dat
- Скрипт
- Ручной способ
- Структура каталогов Android
- Удаляем и добавляем приложения
- Меняем анимацию загрузки
- Изменяем звуковое оформление
- Добавляем шрифты
- Меняем системные настройки (build.prop)
- Внедряем в прошивку Google Apps
- Свободное место
- Сборка
- Подводные камни
- Установка
- Выводы
Модификация стоковых прошивок для Android. Часть 3
В продолжение Части 1 и Части 2
Давеча столкнулся с мнение одного недовольного пользователя:
Лучше чем сток все-равно нет ничего. Лабание прошивок на кухне заметно отличается от производства их в стенах корпораций. Всегда был уверен что кастом — г… о полное. Лишний раз убедился. Подожду в Связном нормальный аппарат пусть и за большие деньги, но с нормальной желейкой, а не пилено-коцаной умельцами.
Кому и зачем это нужно?
В современной IT индустрии появилось такое новомодное понятие как user experience . В переводе на русский язык буквально означает пользовательский опыт.
Так недавно компания Microsoft выпустила новую версию своей популярной операционной системы Windows 8. Но! все пользователи плюются и с тоской в глазах вспоминают кнопку «Пуск», которую компания производитель решила убрать по прошествии 20 лет. Находясь под давлением сообществ и расстроенных пользователей, компания Microsoft все же решила вернуть эту кнопку обратно в новой версии своей операционной системы.
Абсолютно также поступают и производители мобильных устройств, порой изменяя, дополняя или навязывая новый функционал в своих графических оболочках. Многие из нас приверженцы одного бренда в силу именно пользовательского опыта и готовы привыкать к нововведениям, даже если они оказываются не совсем удобными. Со временем мы миримся и, в конце концов, забываем, что нам что-то навязали. Но вот выходит новая версия устройства или программного обеспечения и нами снова манипулируют.
Так вот в моем понимании модификация стоковых прошивок призвана вернуть или дополнить некий функционал, который производитель обошел стороной. Примеров тому полно.
Так, недавно, после очередного обновления, в статус баре моего телефона появилась иконка, сигнализирующая об интернет соединении.
Во-первых, ее смысл (обведено левым желтым кружком) для меня остается до сих пор загадкой. Зачем дублировать иконку, если сигнализация об интернет соединении уже имеется рядом с иконкой качества сигнала (обведено синим кружком)?
Если развернуть слайдер, то увидим следующую информацию:
Которая мне тоже абсолютно ни к чему! Это только занимает лишнее пространство бесполезной информацией как в статус баре, так и в слайдере.
Идем далее. Помимо этого, появилось нововведение, позволяющее в слайдере включить или выключить энергосбережение.
Теперь уже большая половина экрана заполнена каким-то бесполезным мусором. Но это еще не все! Производитель решил «упростить» мне жизнь и добавить кнопок для быстрого доступа к настройкам.
80% пространства для важных уведомлений заполнено хламом. Не знаю как вам, а меня это очень раздражает. И родными средствами эти вещи ну никак не отключить. Теперь попробуем получить какое-то уведомление. Например получим почту или сообщение.
Как мы видим, закончилось место в статус баре и некоторые уведомления не показываются и скрыты от глаз. Во-вторых, чтобы посмотреть все уведомления, мне надо еще и пролистать слайдер. От таких новшеств хочется плакать. А теперь давайте все это уберем и посмотрим на результат, если отключим всё, модифицировав прошивку (иконка дебага убрана через persist.adb.notify=0).
И о чудо. Я могу теперь даже управлять оповещениями прямо в слайдере. Признаться, я этого не знал, пока не модифицировал прошивку.
Оказывается если место в слайдере занято, то оповещения будут весьма короткими и малоинформативными.
Надеюсь теперь многим стало понятно что такое пользовательский опыт и зачем кому-то необходимо что-то модифицировать! Теперь попробуем развенчать мифы.
Миф 1-ый: стоковые прошивки работают быстрее
Абсолютно не верный домысел. Да, если сделать только DEODEX и больше ничего, прошивка будет работать медленней на 5-10%. Но цель создания модифицированных прошивок в первую очередь избавление от ненужных и бесполезных приложений, которые навязаны производителем в маркетинговых целях. В своих прошивках Я удаляю или заменяю на менее ресурсоемкими около 40 приложений. Что дает мне прирост производительности в 1,5 раза, так как все эти приложения не висят в памяти и не съедают процессорное время.
Миф 2-ой: стоковые прошивки работают стабильней
Мы говорим о модификации стоковых прошивок, прошу заметить! Портирование или разработка прошивок под ваш конкретный девайс — это уже другая тема, этой не касающаяся. Так вот, изначально берется прошивка, предназначенная именно для конкретного телефона и созданная производителем. Если у вас не кривые руки и вы знаете что и как делаете, то на стабильность это ни как не влияет.
Миф 3-ий: если производитель так сделал, значит так оно надо
Несколькими абзацами ранее я показал на примере, как производитель своими новшествами убил важный функционал.
Миф 4-ый: моды, твики, патчи и прочее тоже навязывают видение разработчика
Абсолютно нет! Все нормальные и порядочные разработчики дают возможность конечному пользователю включать или отключать модификации.
В моих прошивках все наработки можно управлять посредством приложения и отключив их все, ваша прошивка будет работать как стоковая.
Источник
Кастомный Android: делаем свою прошивку из стоковой, не копаясь в исходниках
Содержание статьи
Начнем с того, что тебе нужен Linux. В Windows ты сможешь только разобрать прошивку, но собрать обратно уже не получится по чисто техническим причинам. Теперь о прошивке. Обычно они распространяются в виде ZIP-архивов, прошиваемых через кастомные рекавери. Именно один из них нам и понадобится для опытов. Начинать путь ромодела я рекомендую с какой-нибудь максимально приближенной к AOSP кастомной прошивки, потому что в ней зачастую проще разобраться, чем в стоке.
Нужный ZIP можно найти на XDA Developers или 4PDA. Но имей в виду, что нужна прошивка конкретно для твоей модели аппарата, — у того же Galaxy S7 есть несколько модификаций для разных рынков, не всегда совместимых между собой.
Структура ZIP-файла с прошивкой
После загрузки распакуем архив с помощью любого архиватора. Внутри будет следующий набор файлов и папок:
- META-INF — папка с метаинформацией о прошивке (сертификат автора, манифест со списком файлов, их контрольными суммами), скриптом обновления (updater-script) и инсталлятором (update-binary), который выполняет команды скрипта по монтированию разделов, копированию файлов и другим действиям с NAND-памятью;
- boot.img — образ с ядром и RAM-диском (он прошивается в раздел boot);
- system.new.dat — это, грубо говоря, и есть сама прошивка, а точнее образ раздела system, содержащий операционную систему Android за вычетом ядра;
- system.transfer.list — содержит список команд, которые необходимо выполнить, чтобы поблочно скопировать содержимое system.new.dat в раздел system при установке прошивки;
- system.patch.dat — используется для OTA-обновлений, то есть выборочного внесения изменений в прошивку; если прошивка «полная», он имеет нулевой размер.
Содержимое ZIP-файла прошивки LineageOS для Nexus 5
Xakep #283. Змеиная пирамида
Распаковываем system.new.dat
Файлы system.new.dat и system.transfer.list представляют для нас наибольший интерес. Точнее, не они, а содержащаяся в них система. Но добраться до нее не так просто.
Скрипт
Самые ленивые могут разобрать прошивку с помощью скрипта System_Extractor-Linux.
- Распаковываем архив с прошивкой в любую папку.
- Качаем скрипт по ссылке и разархивируем в любую папку.
- Запускаем файл ext (если будет ругаться на отсутствие Java, просто пропусти, нажав y ; Java нужна только для запаковки).
- Теперь выбираем распаковку, нажав кнопку 1, а затем Enter.
- Новая папка с именем extract_* появится рядом с файлом ext и папкой tools . Копируем в нее файлы system.new.dat и system.transfer.list .
- После копирования файлов нажимаем Enter и ждем. Через некоторое время нужно будет опять нажать Enter, ввести пароль администратора и еще раз тапнуть Enter.
- Готово. Содержимое system в папке extract_*/output .
Скрипт для распаковки system.new.dat в Linux
Ручной способ
Распаковываем архив с прошивкой в любую папку (например, в rom ):
Скачиваем нужные нам инструменты в эту папку:
Он преобразует файл system.new.dat в raw-образ с именем system.img . Монтируем образ к подпапке mnt :
Содержимое образа system
Структура каталогов Android
После распаковки system появится следующая каталоговая структура:
- app — предустановленные приложения со стандартными привилегиями;
- priv-app — предустановленные приложения с повышенными привилегиями, в том числе некоторые компоненты системы;
- bin — бинарные файлы формата ELF, аналог каталогов /bin и /usr/bin в Linux. Содержит различные системные компоненты, используемые более высокоуровневыми компонентами системы;
- etc — файлы настроек. Полный аналог /etc в Linux, используемый, однако, только теми самыми системными компонентами. Приложения Android хранят индивидуальные настройки в каталогах /data/data/ ;
- fonts — шрифты. По умолчанию содержит только фирменные шрифты Roboto;
- framework — библиотеки Java-классов, используемых системой и приложениями. Тут же лежит файл framework-res.apk , содержащий полное описание интерфейса операционной системы, включая все графические файлы;
- lib и lib64 — Linux-библиотеки, используемые низкоуровневыми компонентами системы. Аналог каталогов /lib и /usr/lib в Linux, включая такие стандартные библиотеки, как libc, libz, libssl. На устройствах с архитектурой ARMv7 и ниже каталог lib64 будет отсутствовать;
- media — медиафайлы: рингтоны, звуки уведомлений, звуки интерфейса и анимация загрузки ОС;
- tts — файлы, необходимые синтезатору речи;
- usr — каталог, который обычно содержит файлы, необходимые для работы приложений из каталога bin. По сути, аналог /usr/share ;
- vendor — файлы, поставляемые производителем устройства. Обычно содержит бинарный firmware для различных железных компонентов, например модуля Wi-Fi;
- xbin — необязательный каталог; кастомные прошивки используют его для хранения таких вещей, как интерпретатор bash, SSH, PowerTOP, BusyBox, и других полезных инструментов;
- build.prop — файл, содержащий информацию о сборке, а также различные низкоуровневые настройки;
- addon.d — содержит скрипты, запускаемые после установки прошивки. Сюда же GApps прописывают свой скрипт, благодаря которому возрождаются после переустановки прошивки.
Ознакомившись с базовой структурой Android, начнем вносить изменения.
Удаляем и добавляем приложения
Все предустановленные программы можно найти в двух папках:
Друг от друга они отличаются привилегиями доступа. Если программы из app имеют такие же полномочия, как сторонние программы (например, установленные из Play Store), то приложения из priv-app могут использовать привилегированные API (права privileged). Подробнее об этом можно узнать из нашей статьи.
Для предустановки приложения в прошивку просто кинь ее APK-файл в /system/app/ . Можно, конечно, создать отдельную папку, но в нашем случае в этом нет смысла, потому что папка служит для хранения библиотек и odex-файлов, которых у нас попросту нет. Для удаления просто удали папку с ним.
Можно пойти дальше и поменять стоковые приложения на аналоги. К примеру, для замены календаря удаляем папку Calendar и копируем в /system/app наш любимый com.rpagyc.simplecalendar.apk . А можно и не копировать. Тогда прошивка будет без календаря.
Главное, помни: стоковые программы могут быть связаны между собой. Поэтому удаление одной проги вполне может привести к полной неработоспособности другой (к примеру, CalendarProvider и Calendar: удалив первый, ты сделаешь неработоспособным не только стоковый, но и любой другой календарь). К счастью, в чистых AOSP-прошивках взаимосвязей не так много.
Меняем анимацию загрузки
Анимация хранится в виде PNG-картинок, упакованных в архив /system/media/bootanimation.zip без сжатия. Внутри архива находятся:
- desc.txt — файл, описывающий анимацию;
- part0 — папка с файлами анимаций, которые воспроизводятся первыми;
- part1 — папка с файлами анимаций, которые воспроизводятся вторыми;
- .
- part? — крайняя папка, изображения с которой воспроизводятся в конце.
Файл desc.txt может содержать нечто вроде
Назначение этих строк интуитивно понятно: 1920 × 1080 — разрешение картинки, 60 — число кадров в секунду. Part0 и part1 указывают на папки, из которых будет воспроизводиться анимация, и последовательность воспроизведения. Вообще, может быть как одна часть, так и несколько (три и больше).
Изображения, находящиеся в папках part, пронумерованы пятью цифрами в порядке воспроизведения: 00000.png , 00001.png , 00002.png . Эти изображения можно поменять на свои, тем самым создав оригинальную анимацию. А можно просто удалить файл bootanimation.zip . Тогда девайс будет показывать анимацию из стандартного Android. Или воспользоваться уже готовой коллекцией анимаций на 4PDA.
Четыре части в bootanimation.zip для LineageOS
Изменяем звуковое оформление
Фактически все звуки, которые воспроизводит система, хранятся в папке /system/media/audio . Внутри нее ты найдешь следующие папки:
- alarms — мелодии будильника;
- notifications — звуки уведомлений;
- ringtones — мелодии звонка;
- ui — системные звуки, например низкий заряд батареи, фокусировка камеры, выбор элементов интерфейса.
В alarms, notifications, ringtones можно накидать сколько угодно любых мелодий. Взять их можно, например, здесь:
И маленький лайфхак: удаление файлов из папки ui приведет не к сбоям и ошибкам, а к исчезновению системных звуков. Поэтому ты можешь легко отключить звук создания снимка с камеры, снятия скриншота, просто потерев содержащие эти звуки файлы (их имена интуитивно понятны).
Добавляем шрифты
Шрифты хранятся в fonts . Найти архивы с файлами шрифтов можно на 4PDA и XDA. Для установки достаточно скопировать с заменой ttf-файлы из архива в папку fonts .
Меняем системные настройки (build.prop)
В образе system есть интересный файлик build.prop , содержащий множество полезной информации о железе устройства и настройках, устанавливаемых по умолчанию, для различных стоковых приложений. Справедливости ради замечу, что это не всегда так. Например, в Gigaset ME и ME Pro build.prop разделен на две части. В одной части содержатся настройки для Gigaset ME, а для ME Pro некоторые строки продублированы, но ключи (название смартфона и так далее) в них другие. Это было сделано, чтобы обеспечить более-менее корректную работоспособность одной и той же прошивки на разных аппаратах.
Дополнительный файл для Gigaset ME и ME Pro
Build.prop содержит (или может содержать) огромное количество настроек. Некоторые из них ничего не меняют, некоторые улучшают одно за счет ухудшения другого, но есть те, которые действительно полезны:
- ro.product.model и ro.product.manufacturer — модель смартфона и имя производителя. С помощью замены этих строк можно заставить Play Store думать, будто у тебя другой смартфон, что откроет доступ к большему количеству софта. Для всяких малоизвестных китайских смартфонов эти строчки могут стать спасительными;
- hw.qemu.mainkeys — принимает только два значения: 0 — показать наэкранные клавиши навигации, 1 — не показывать кнопки. Отсутствие строки соответствует 0;
- debug.sf.nobootanimation — значение 1 отключает анимацию загрузки, что немного поднимает ее скорость. Установка 0 или удаление строки возвращает анимацию на место;
- ro.telephony.default_network — говорит системе, в какой режим должна быть переключена мобильная сеть при загрузке;
- ro.sf.lcd_density — DPI дисплея, наиболее точное значение для дисплея можно посчитать через удобный сайт. Но никто не запрещает поставить и большее или меньшее значение по своему вкусу: более высокие значения делают элементы интерфейса крупнее, низкие — меньше;
- ro.config.vc_call_vol_steps — количество шагов громкости во время разговора (по умолчанию 8);
- ro.config.media_vol_steps — количество шагов громкости мультимедиа (по умолчанию 15).
Внедряем в прошивку Google Apps
Почти всегда кастомные прошивки поставляются без сервисов Google и магазина приложений. Разработчики предлагают нам установить их отдельно с помощью пакета GApps. Однако его можно интегрировать прямо в прошивку.
Для начала необходимо скачать пакет GApps. Я рекомендую брать архивы Open GApps. Выбираешь версию Android, архитектуру процессора и вариант комплектации (Pico, Nano, Stock. ), который определяет, сколько различных приложений Google содержит архив. Я рекомендую скачать версию Pico. Она содержит только Play Store и набор необходимых для его работы библиотек.
Интеграция GApps в прошивку выполняется так:
- Распаковываем ZIP-архив GApps с помощью любого архиватора.
- Переходим в папку Core.
- Видим множество архивов с расширением .tar.lz . Извлекаем с помощью lzip.
- После распаковки копируем файлы из папок в соответствующие папки в system. Что куда кидать, нетрудно догадаться по структуре каталогов в архиве. Например, configupdater (со скриншота) нужно кидать в папку priv-app .
- Переходим в папку GApps (находится рядом с Core) и проделываем пункты 3 и 4 для файлов в ней.
- Все, мы интегрировали GApps в нашу прошивку!
Структура каталогов configupdater-all.tar.lz
Свободное место
Необходимо понимать, что место для установки прошивок ограниченно. Нельзя установить прошивку, размер которой перевешивает размер раздела system устройства. Посмотреть его значение можно, используя ADB:
Инфа о разделе system
Второй вариант: поставить на устройство терминал и набрать команду
Размер раздела в байтах можно узнать, установив на смартфон BusyBox и выполнив в терминале команду
Или то же самое с помощью ADB:
Место, занимаемое прошивкой, будет приблизительно равно размеру system в распакованном виде. Вообще, при создании прошивки необходимо учитывать, что юзер также может прошить поверх нее различные модификации (SuperSU, Xposed) или перенести приложения в раздел system. Например, минимальный пакет приложений Google (Pico) требует минимум 150 Мбайт дополнительного пространства для установки.
При необходимости размер файла прошивки можно уменьшить, удалив не только ненужные программы из /system/app ( /system/priv-app ) и звуки вызова из system/media/audio и bootanimation.zip , но и:
- /system/tts/lang_pico — языки примитивного голосового движка Pico TTS, голосовой движок Google это не затронет;
- /system/usr/srec/config/ — офлайн-языки. Можно будет скачать потом онлайн, если понадобится.
Сборка
После внесения изменений нужно собрать все обратно. Сначала запакуем раздел system в system.new.dat . Скачиваем нужные нам инструменты:
Преобразовываем нашу папку обратно в RAW-образ. Назовем его system_new.img :
1073741824 меняем на размер раздела system в байтах. Желательно даже сделать его чуть меньше. Делаем из RAW-образа sparse-образ:
Преобразуем наш образ в system.transfer.list и system.new.dat , которые и нужно кидать в архив с прошивкой, но сначала удалим старые файлы:
Отделим файлы прошивки от лишней шелухи (файлов, которые мы загружали для работы. Для этого удобно пользоваться архивом с прошивкой). Удалили? Теперь нужно запаковать прошивку в ZIP-архив (любым архиватором).
Осталось подписать архив. Сделать это можно как на самом Android с помощью ZipSigner, так и на ПК (потребуется установленная Java):
Подводные камни
Во время сборки system.new.dat ты можешь столкнуться с несколькими проблемами, вызванными постоянными изменениями в механизмах формирования прошивок Android. Описанный выше способ должен хорошо сработать в случае основанной на Android 5.1 прошивки, в более новых могут возникнуть сложности, так что потребуется использовать другие версии инструментов сборки. К сожалению, мы не можем описать все нюансы сборки, поэтому, возможно, придется погуглить.
Установка
Для установки кастомной прошивки необходим кастомный рекавери TWRP, позволяющий устанавливать неподписанные или подписанные тестовым ключом прошивки (именно такую мы создали). В журнале мы неоднократно описывали процесс его установки, да и в ветках форума, посвященных твоему устройству, обычно есть достаточно информации для того, чтобы это сделать.
Выводы
Эта статья описывает лишь верхушку огромного айсберга под названием «модификация прошивок». «Серьезные» прошивки не только дополняют ядро и саму прошивку со стоковыми приложениями множеством функций (которые зачастую вырваны из других ядер и прошивок), организовывая или даже меняя принципы их взаимодействия, но и вполне могут кардинально менять принципы работы ОС. Правда, такая поделка — это уже не Android, а отдельная ОС, даже если Play-сервисы получится туда поставить (кстати, такие действия, мягко говоря, не поощряются Google). Ну и не забываем: все оболочки от производителей — TouchWiz, ZenUI, HTC Sense и так далее — всего лишь обычные кастомы, максимально привязанные к железу устройства и друг к другу.
Источник
Практически у каждого пользователя android смартфона появлялось желание создать или отредактировать прошивку под свои нужды и желания. В данной статье мы и рассмотрим принцип редактирования прошивки для CWM (в zip формате).
Подготовка:
В первую очередь необходимо определиться какую прошивку будем брать за основу. Лучше использовать офф. прошивку в зипе. Почти для каждого распространённого девайса существует чистая прошивка + root.
Когда прошивка выбрана её необходимо скачать в любое удобное вам место на ПК (распаковывать не стоит).
Также нам потребуется архиватор, советую использовать 7zip и лучший в своём роде текстовый редактор Notepad++.
Структура прошивки:
Открывая архив с прошивкой вы видите следующее:
META-INF — в папке хранятся скрипты установки прошивки.
system — папка со всеми файлами прошивки (приложения, твики, скрипты и т.д.).
boot.img — ядро системы.
Практически все манипуляции проводятся в папке system, её структура:
app — системные приложения.
bin — ресурсы самой системы.
etc — Скрипты, твики, конфиги, профили и настройки системы.
fonts — Системные шрифты.
framework — здесь хранятся главные файлы системы (графика, настройки текста анимации и т.д).
lib — библиотеки системы.
media — файлы мультимедиа (мелодии уведомлений, анимация загрузки, обои и т.д).
usr — настройки не изменяемые в дальнейшем системой (работают в режиме «только чтение»).
xbin — опять же системные конфиги и прочие твики.
build.prop — инфа о системе, настройки локали и производительности системы.
Приложения:
Перед тем как добавлять/удалять софт в систему, необходимо проверить деодексирована ли ваша прошивка (то есть проверить наличие файлов .odex в папке app. Если файлы есть, то необходимо от них избавиться вот по этой инструкции .
Добавляем софт в прошивку:
Прежде всего необходимо установить себе в смарт те программы которые вы хотите добавить в сборку. После установки достаём их из системы при помощи Root Exporer и его аналогов, находятся они по пути data/app, так же нам понадобятся их либы (если они конечно есть) они находятся по пути data/data. Находятся они в одноимённой приложению папке и имеют расширение .so . Затем изъятые .apk файлы кладем в архив по пути system/app и файлы с расширением .so (lib’ы) по пути system/lib.
Удаляем софт из прошивки:
Тут всё просто, заходим в папку app — определяемся что нам не нужно и удаляем весь ненужный софт (систему лучше не трогать).
Язык и версия прошивки:
Копируем файл build.prop на рабочий стол. Открываем его блокнотом и находим строчки:
ro.product.locale.language=en
ro.product.locale.region=US
для русского языка необходимо сделать так:
ro.product.locale.language=ru
ro.product.locale.region=RU
название своего мода вписываем в строку
ro.modversion=
в том же build.prop
Графика:
Вся графическая часть прошивки хранится в двух файлах framework-res.apk путь к файлу systemframework и SystemUI.apk по пути systemapp. А графическая часть приложения настройки хранится естественно в приложении Settings.apk.
Скрипты и твики (ускорение и оптимизация системы):
Большая часть настроек проводится в файле build.prop, по этому поводу можно прочитать здесь. Так же если ваше ядро поддерживает init.d есть ряд скриптов для оптимизации системы, один из них описан в этой статье (оптимизация оперативной памяти) и в данной статье Скрипты-твики для init.d
Замена шрифтов системы:
Как выше излагалось все шрифты содержаться в папке fonts, основные шрифты это: DroidSans.ttf и DroidSans-Bold.ttf их можно заменить любыми шрифтами переименовав их аналогично вышеуказанным и переместить с заменой в архив с прошивкой в папку fonts.
Ядро:
Теоретически достаточно заменить boot.img своим, но в некоторых случаях Ядра сопровождаются дополнительными скриптами. По этому советую ничего не делать если есть какие либо сомнения.
Содержание
- 1 Вступление
- 2 Сборка из исходников
- 3 Изменение уже готового файла
- 4 Редактирование с помощью компьютера
- 4.1 Необходимое программное обеспечение
- 4.2 Модификация прошивки
- 4.3 Прошивка устройства
- 5 Редактирование на устройстве
- 5.1 Изменение собственной прошивки
- 5.2 Изменение сторонней прошивки в ZIP-архиве
- 6 Заключение
Вступление
Нередко случается, что кому-то из пользователей Android не по душе стандартная прошивка его смартфона либо планшета. Например, по причине лишнего софта, из-за которого стремительно сокращается внутренняя память, либо просто не нравится функционал некоторых программ и хочется заменить их другими. Начинаются усиленные поиски пользовательских прошивок, но и они не всегда дают желаемый результат. Что делать?
Далеко не все знают, что прошивку можно допилить под свои личные потребности. Существуют несколько способов, как это можно сделать, каждый из них отличается уровнем сложности и необходимым набором инструментов. И, если вы не знаете, как собрать прошивку Android самостоятельно, эта статья для вас.
Сборка из исходников
Один из самых правильных способов является использование исходного кода, публикуемого командами разработчиков Google или Cyanogenmod. Но одновременно этот способ самый сложный, ведь для того, чтобы собрать прошивку Android из исходников, оптимизировать её и заставить работать на конкретном устройстве, нужно обладать довольно глубокими навыками программирования, разбираться во всех тонкостях работы мобильной операционной системы и железа устройства. Эти знания не приобретаются за день, поэтому в этой статье мы не будем подробно описывать этот способ.
Изменение уже готового файла
Если вы не слишком разбираетесь во всех тонкостях работы ОС, но хотите что-то изменить в своей прошивке, лучшим решением будет подправить уже готовое решение. Можно изменить как родную, встроенную прошивку, так и уже изменённую кем-то другим. Кастомизированных прошивок в интернете очень много, и вы вряд ли будете испытывать недостаток в их количестве. Итак, представляем пошаговую инструкцию по сборке собственной прошивки на основе уже существующего продукта.
Редактирование с помощью компьютера
Необходимое программное обеспечение
Нам понадобится компьютер, устройство, файл прошивки и специальная программа под названием Android Kitchen (известная также как кухня). Файл прошивки можно найти на специализированных форумах, наиболее известные — англоязычный XDA Developers и русскоязычный 4PDA. В разделе вашей модели устройства можно найти ссылки на самые популярные и проверенные прошивки как официальные стоковые, так и неофициальные пользовательские.
Далее нужно установить кухню на свой компьютер. Лучше всего работать под Linux, но необходимые библиотеки можно поставить и в Windows. В этом случае можно выйти из ситуации установив Cygwin. Загрузите архив и следуйте пошаговой инструкции, помещённой в архиве. Перед этим потребуется установить также Java Platform (JDK) с официального сайта (https://www.oracle.com/java/technologies/javase-downloads.html для Windows) или же в Центре приложений Ubuntu найти и скачать OpenJDK Java 6 Runtime либо похожее (для Linux). Второй вариант использования — установить Linux на виртуальную машину и управлять процессом через неё.
Модификация прошивки
Прошивки чаще всего распространяются в виде файла с расширением .img, реже — как ZIP-архив. В обоих случаях вам понадобится переместить файл с прошивкой в папку установленной кухни, чтобы она смогла импортировать её и начать с ней работу. Кухня должна быть установлена по пути c:/cygwin/home/user/ (при установке через Cygwin) или Файловая система/home/user/ (при работе через Linux).
- Запустите кухню через Cygwin или Linux-терминал с помощью команды cd kitchen, затем ./menu.
- Распакуйте архив в кухню, как уже писалось выше.
- После того как появится меню программы, перейдите в раздел 0. Advanced Options.
- После этого будет представлен список команд для модификации прошивки. Выберите именно ту, которая нужна вам. Можно добавить Busy Box, Root, Apps2SD, заменить стоковые приложения, различные анимации, освободить память устройства и многое другое.
- После окончания манипуляций запустите в главном команду 99. Build ROM from working folder (Построить прошивку с рабочей папки) и заберите ZIP-архив с OUTPUT_ZIP.
Прошивка устройства
Прошить устройство можно как через компьютер, так и без него. В первом случае нужно скачать программу для прошивки, обычно это Flash Tool или Odin, драйверы для вашей модели устройства и подготовить уже подправленный архив.
При прошивке через Recovery понадобится скопировать файл в корень карты памяти, загрузить устройство в режиме Recovery, отформатировать устройство и кэш, а затем установить прошивку из архива. После перезагрузки у вас будет изменённая лично вами прошивка.
Редактирование на устройстве
Самый простой способ из всех возможных. Не нужно никаких дополнительных приборов и манипуляций. Вам понадобится лишь устройство с рут-правами, приложение для создания резервных копий (лучше всего Nandroid backup) и файловый менеджер с функцией изменения системного раздела.
Изменение собственной прошивки
- Если на устройстве ещё не получен root, получите его. Как это сделать, можно прочесть на специализированных форумах в разделе, посвящённом именно вашему аппарату. Дело в том, что универсальные способы поддерживаются малым количеством устройств и большинство из них имеют индивидуальную процедуру.
- Установите Nandroid backup ) и сделайте с его помощью резервную копию системы своего девайса. Сохраните её в надёжном месте, например, в облачном хранилище. Для чего создавать копию? Вдруг что-то пойдёт не так или вы нечаянно удалите что-то нужное — будет возможность вернуть всё как было.
- Установите файловый менеджер, работающий с системным разделом, чтобы удалить ненужный софт и добавить свои приложения. Золотым стандартом является Titanium Backup.
- Выберите приложения, которые вы хотите удалить, и удалите их через файловый менеджер.
- Установите приложения, которыми вы хотите заменить удалённые, и через Titanium Backup сделайте их системными.
- Перезагрузите устройство и наслаждайтесь своими успехами.
Изменение сторонней прошивки в ZIP-архиве
- Скачайте интересующий вас файл прошивки в формате .zip.
- Установите файловый менеджер, умеющий работать с архивами, например, ES Проводник или Total Commander, и распакуйте содержимое архива.
- Удалите лишние или добавьте недостающие приложения, после чего запакуйте архив обратно и переместите в корень флеш-карты.
- С помощью Nandroid backup ) создайте резервную копию системы и скопируйте её на облачный диск.
- Прошейте устройство из режима Recovery.
Заключение
Как видите, сборка прошивки Android своими руками необязательно очень длительный и сложный процесс, требующий глубоких познаний. Понятно, что с нуля создать модификацию будет куда сложнее, но что-то подправить или заменить и удалить лишние программы под силу практически каждому. Надеемся, наша инструкция вам в этом помогла.
Собирали ли вы прошивку для Android самостоятельно? Что вы в ней меняли и каким образом это делали? Будет интересно, если вы поделитесь своими отзывами.
29.03.2015, 09:11
Brick Top
- Регистрация:
- 03.07.2013
- Сообщений:
- 13,825
- Репутация:
6951
Инструкция по созданию кастомной прошивки в виде zip архива для прошивки через кастомное рекавери при помощи Android Kitchen
Что нам понадобится:
1. Установленная и настроенная «кухня» для Android: Как установить Android Kitchen на Windows [Инструкция]
2. Прошивка для вашего устройства под SP Flash Tool (папка с файлами вроде recovery.img, system.img, scatter.txt и так далее)Инструкция по созданию прошивки для CWM/TWRP:
1. После того как установили Android Kitchen, берёте из папки с прошивкой файлы system.img и boot.img и копируете их в папку для работы с прошивками, а именно kitchenoriginal_update (если не понятно где это, то установите Android Kitchen по инструкции выше, все станет ясно после)
2. Далее запускаем Cygwin и Android Kitchen. Запускать Cygwin обазятельно на правах администратора, как всё это делается я описал в инструкции по настройке Android Kitchen, так что сначала установите «кухню», потом всё станет ясно
3. После того как вы вошли в меню Android Kitchen, выбираем первый пункт, то есть:
Код:
========================================================== Android Kitchen 0.224 - by dsixda (xda-developers.com) ========================================================== > MAIN MENU 1 - Set up working folder from ROM 2 - Add root permissions 3 - Add BusyBox 4 - Disable boot screen sounds 5 - Zipalign all *.apk files to optimize RAM usage 6 - Change wipe status of ROM 7 - Change name of ROM 8 - Show working folder information 0 - ADVANCED OPTIONS 00 - LEGACY OPTIONS (old and rarely used) 99 - Build ROM from working folder u - Kitchen Info/Update/Donate x - Exit Enter option: 1
4. После того как нажали 1 и Enter, появляется новое меню тут просто нажимаем Enter для продолжения, затем 1 и Enter, и после того как система определит наши system.img и boot.img (которые мы скинули в рабочую папку ранее), нам будет предложено переименовать ли папку куда будет распакованы все файлы прошивки для работы с ними, или не переименовывать, выберите «n», то есть не переименовывать):
Код:
CREATE WORKING FOLDER FOR ROM ========================================================== Ensure there is at least one ROM under the 'original-update' folder! Select an option: s - Show supported formats x - Abort, don't create working folder Or press Enter to continue ? <--- жмём Enter Please wait ... Available ROMs: (1) system.img and boot.img Enter selection number (default=1, cancel=0, r=refresh): 1 <--- жмём 1 и Enter Found original_update/system.img Found original_update/boot.img The new working folder will be named WORKING_032915_064017 Change the name (y/n)? (default n): n <--- жмём n и Enter5. Далее начинается распаковка прошивки, может занять некоторое время. Важно, во время распаковки появится окно распаковщика Ext2explore. Не закрывайте его, а внимательно прочтите что написано в окне Android Kitchen (если дружите с англ.):
Код:
###################################################################### READ INSTRUCTIONS BELOW TO EXTRACT FILES FROM ext4_system.img: 1) Ignore the 'Cannot Read Disk' warning dialog (press 'OK') if it appears! 2) When Ext2Explore appears, use 'File-> Open Image' to open: C:cygwinhomePC_UserkitchenWORKING_032915_064017systemext4_system.img 3) After it loads, right-click on the new icon displayed in the left frame, and select Save 4) Select C:cygwinPC_UserkitchenWORKING_032915_064017system 5) Wait for extraction to finish and then close Ext2Explore ######################################################################6. Итак делаем что написано, в открывшемся окне Ext2Explore выбираем File -> Open Image и выбираем C:cygwinhomePC_UserkitchenWORKING_032915_064017systemext4_system.img. После чего в левой части Ext2Explore, делаем правый клик по пункту и выбираем Save (см. скриншот ниже), после чего указываем путь для сохранения распакованных файлов, а именно C:cygwinPC_UserkitchenWORKING_032915_064017system (начнётся распаковка, которая может занять некоторое время, не прерывайте).
7. После того как распаковка окончена, закройте окно Ext2Explore и нажмите Enter в окне Android Kitchen. Начнется завершающая стадия распаковки прошивки после которой вам будет предложено посмотреть информацию о данной прошивке, для выбора опции нажмите «y»:
Код:
Finished setting up working folder! Would you like to view this ROM's info (y/n)? (default: y): y <--- Нажмите y и Enter
8. Для примера показана рабочая информация по прошивке взятой с Lenovo A369i:
Код:
Working folder information (v0.224) Android OS version : 4.2.2 Device : A369i Model : Lenovo A369i ROM Name : A369i_ROW_S201_140610 Rooted (Supersu app + su) : NO Rooted (unsecured boot.img) : NO BusyBox installed : NO BuxyBox run-parts support : NO Apps2SD (Apps to EXT) enabled : NO /date/app enabled : NO Custom boot animation allowed : NO Nano text editor installed : NO Bash shell support : NO /system/framework is deodexed : NO /system/app is deodexed : NO radio.img found : NO ROM will wipe all data : NO Press Enter to continue <--- Нажмите Enter
9. Всё, теперь прошивка, фактически готова. После нажатия Enter, вы будете возвращены в главное меню Android Kitchen, теперь выбираем пункт:
Код:
99 - Build ROM from working folder10. Далее вам будет предложено выбрать в каком режиме будет создана прошивка, рекомендую выбирать первый пункт:
Код:
1 = Interactive Mode - recommended for most users (Guide me through the build)11. Далее будет предложено оптимизировать все apk файлы при помощи «zipalign», можете нажать «y» или «n», не важно:
Код:
Would you like to optimize APK files by zipaligning them (y/n)? (default: y): y12. Дальше будет очень важный пункт здесь, нам надо нажать «y» (то есть yes, согласиться). Будет создан файл updater-sсript, который мы отредактируем уже потом, когда создадим прошивку, так что нажмите просто «y» и пусть «кухня сама всё сделает»:
Код:
Use updater-sсript in ROM's ZIP file (y/n)? (default: y) y13. По завершению создания updater-sсript, нам будет предложено отредактировать его сейчас и внести нужные изменения, но как я сказал ранее, редактировать его удобнее потом, после того как прошивка уже собрана, поэтому оставляет тут все как есть:
Код:
Proceed with the change (y/n)? y = Proceed; updater-sсript and update-binary will be used inthe ZIP file; update- will remain in working folder. n = Cancel; updater-sсript and update-binary will be deleted and not used. ? (default: y): y <--- Нажмите y и Enter
14. Далее начнется создание update.zip, после которого нам будет предложено подписать архив с прошивкой, соглашаемся на это (хотя по-идее можно и не подписывать, всё равно прошивку надо будет разбирать для редактирования updater-sсript):
Код:
It is recommended that you sign your ROM. Sign it (y/n)? (default: y): y <--- Нажмите y и Enter
15. Далее последний пункт где нам будет предложено изменить название прошивки, можно оставить как есть:
Код:
The new ROM will be named A369i_signed_032915_073536.zip Change the name (y/n)? (default: n): n <--- Нажмите n и Enter
16. Всё, прошивка создана, и находится в папке с кухней OUTPUT_ZIP/A369i_signed_032915_073536.zip. Копируем архив целиком и переносим в отдельную, удобную для вас папку. Теперь надо редактировать updater-sсript. Android Kitchen можно закрыть.
17. Распаковываем содержимое нашей прошивки в отдельную папку и видим следующее:
18. Заходим в папку META-INFcomgoogleandroid и открываем при помощь любого текстового редактора файл updater-sсript (бесплатный Note++ вполне подойдёт, при помощи блокнота лучше не открывать, там все в кучу сбивается, я использую Sublime Text 2). Находим в файле две следующие строки, которые нам надо поменять:
Код:
format("MTD", "system"); mount("MTD", "system", "/system");Меняем их на следующие строки:
Код:
format("ext4", "EMMC", "/dev/block/mmcblk0p4", "0", "/system"); mount("ext4", "EMMC", "/dev/block/mmcblk0p4", "/system");Важно: я специально выделил красным цветом самое важное. Это точка монтирования «system» на моём устройстве, на Lenovo A369i, для вашего устройства эти данные могут отличаться. Поэтому, чтобы узнать какой блок у вас отвечает за «system», нам надо выполнить команду «dumchar_info» через adb, как это сделать написано более подробно здесь: Как получить dumchar_info (информация о блоках системы), читаем только первый пост и устанавливаем только adb драйвера и adb инструменты, остальное не надо.
Итак после того как вы получили данные из dumchar_info, посмотрите путь куда у вас смотнирован «android» (это и есть system в dumchar_info) и отредактируйте две строки в updater-sсript соответственно:
Код:
android 0x0000000028a00000 0x0000000004960000 2 /dev/block/mmcblk0p4
Важно: точку монтирования раздела можно получить без dumchar_info, а просто через MTK Droid Tools (нажмите на ссылку)
19. Всё, после того как вы отредактировали updater-sсript, закройте его и сохраните изменения. Теперь нам надо запаковать прошивку, просто возьмите и выделите все три файла прошивки и добавьте их в архив (обязательно zip архив, а не rar или 7z):
20. Почти всё, но не совсем. Далее пробуем прошивать прошивку через кастомное рекавери. Обязательно сначала сделайте в рекавери полный бэкап!. Если вылетает ошибка Status 0 или Status 1, то, скорее всего у нас неправильный update-binary, который находится там же где и updater-sсript, то есть META-INFcomgoogleandroid. Поэтому пробуем менять update-binary и снова запаковывать прошивку и снова пробывать поставть. Лучше всего взять update-binary из другой кастомной прошивки на ваше устройство, но если нету, я залил во вложений другие update-binary, которые должны подойти, пробуйте их. Вообще update-binary, это файл который трансформирует в понятные для системы команды, указания из updater-sсript, то есть указания по установке прошивки.
21. Всё, ваша первая кастомная прошивка на MediaTek устройство готова
. Можно конечно еще было добавить root и busybox и еще чего в Android Kitchen, но я через эти пункты не шел, там все понятно в принципе в меню, если захотите добавите сами.
Cкачать:
update-binary.zip
Содержание
- Как прошить Android-аппарат через заводское рекавери
- Как прошить устройство через модифицированное рекавери
- Установка CWM Recovery
- Прошивка через CWM
- Прошивка через TWRP Recovery
- Вопросы и ответы
Каждый, кто делает первые шаги в изучении процедуры прошивки Android-девайсов, изначально обращает внимание на самый распространенный способ осуществления процесса – прошивку через рекавери. Android Recovery – среда восстановления, доступ к которой на самом деле есть практически у всех пользователей Андроид-устройств, в независимости от типа и модели последних. Поэтому метод прошивки через рекавери, может рассматриваться, в качестве самого простого способа обновить, изменить, восстановить или полностью заменить программное обеспечение девайса.
Как прошить Android-аппарат через заводское рекавери
Практически каждое устройство, работающее под управлением ОС Андроид, оснащено производителем специальной средой восстановления, предоставляющей в некоторой степени, в том числе и обычным пользователям, возможности манипуляций со внутренней памятью девайса, а точнее – ее разделами.
Следует отметить, что перечень операций, проведение которых доступно через «родное» рекавери, устанавливаемое в девайсы производителем, весьма ограничен. Что касается прошивки, доступна установка только официальных прошивок и/или их обновлений.
В некоторых случаях через заводское рекавери можно установить модифицированную среду восстановления (кастомное рекавери), что в свою очередь расширит возможности работы с прошивками.
При этом, основные действия для проведения восстановления работоспособности и обновления ПО произвести через заводское рекавери вполне возможно. Для установки официальной прошивки или обновления, распространяемых в формате *.zip, выполняем следующие шаги.
- Для прошивки потребуется установочный zip-пакет. Загружаем необходимый файл и копируем его на карту памяти девайса, желательно в корень. Также может понадобиться переименование файла перед манипуляциями. Практически во всех случаях подходящее название – update.zip
- Загружаемся в заводскую среду восстановления. Способы получить доступ к рекавери различаются для разных моделей девайсов, но все они предполагают использование комбинаций аппаратных клавиш на устройстве. В большинстве случаев нужная комбинация — «Громкость-» + «Питание».
Зажимаем на выключенном девайсе кнопку «Громкость-» и, удерживая ее, нажимаем клавишу «Питание». После того как включится экран аппарата, кнопку «Питание» нужно отпустить, а «Громкость-» продолжать удерживать до появления экрана среды восстановления.
- Для установки ПО или его отдельных компонентов в разделы памяти понадобиться пункт главного меню рекавери – «apply update from external SD card», выбираем его.
- В раскрывшемся перечне файлов и папок находим ранее скопированный на карту памяти пакет update.zip и нажимаем клавишу подтверждения выбора. Установка начнется в автоматическом режиме.
- По завершению копирования файлов, перезагружаемся в Андроид, выбрав в рекавери пункт «reboot system now».
Как прошить устройство через модифицированное рекавери
Гораздо более широким перечнем возможностей работы с Android-устройствами обладают модифицированные (кастомные) среды восстановления. Одним из первых появившихся, а на сегодняшний день очень распространенным решением, является рекавери от команды ClockworkMod — CWM Recovery.
Установка CWM Recovery
Поскольку рекавери CWM, является неофициальным решением, перед использованием потребуется установка кастомной среды восстановления в устройство.
- Официальный способ установки рекавери от разработчиков ClockworkMod – это Андроид-приложение ROM Manager. Использование программы требует наличия на устройстве рут-прав.
- В том случае, если устройство не поддерживается приложением ROM Manager либо установка не проходит корректно, необходимо воспользоваться другими методами инсталляции CWM Recovery. Применимые для различных девайсов способы описаны в статьях из перечня ниже.
- Для устройств Самсунг в большинстве случаев используется приложение Odin.
- Для устройств, построенных на аппаратной платформе МТК, применяется приложение SP Flash Tool.
Урок: Прошивка Android-устройств на базе МТК через SP FlashTool
-
Наиболее универсальный способ, но при этом самый опасный и сложный, — прошивка рекавери через Fastboot. Подробно действия, проводимые для установки рекавери этим способом, описаны по ссылке:
Урок: Как прошить телефон или планшет через Fastboot
Загрузить ROM Manager в Play Маркет
Урок: Прошивка Android-устройств Samsung через программу Odin
Прошивка через CWM
С помощью модифицированной среды восстановления можно прошивать не только официальные обновления, но и кастомные прошивки, а также различные компоненты системы, представленные русификаторами, дополнениями, улучшениями, ядрами, радио и т.д.
Стоит отметить наличие большого количества версий CWM Recovery, поэтому после входа на различных устройствах можно увидеть несколько отличающийся интерфейс, — фон, оформление, может присутствовать сенсорное управление и т.п. Кроме того могут наличествовать или отсутствовать некоторые пункты меню.
В примерах ниже используется самая стандартная версия модифицированного рекавери CWM.
При этом, в других модификациях среды, при прошивке выбираются пункты, имеющие те же названия, что и в нижеизложенной инструкции, т.е. несколько отличающееся оформление не должно вызывать опасения у пользователя.
Кроме оформления, различается управление действиями CWM в различных устройствах. В большинстве девайсов применяется следующая схема:
- Аппаратная клавиша «Громкость+» — перемещение на один пункт вверх;
- Аппаратная клавиша «Громкость-» — перемещение на один пункт вниз;
- Аппаратная клавиша «Питание» и/или «Home»— подтверждение выбора.
Итак, прошивка.
- Подготавливаем необходимые для установки в устройство zip-пакеты. Загружаем их из Глобальной Сети и копируем на карту памяти. В некоторых версиях CWM также можно использовать внутреннюю память устройства. В идеальном случае файлы размещаются в корне карты памяти и переименовываются с использованием коротких понятных названий.
- Входим в CWM Recovery. В большинстве случаев применяется та же схема, что и для входа в заводское рекавери, — нажатие на выключенном устройстве комбинации аппаратных кнопок. Кроме того, можно перезагрузиться в среду восстановления из ROM Manager.
- Перед нами главный экран рекавери. Перед началом установки пакетов, в большинстве случаев, требуется сделать «вайп» разделов «Cache» и «Data», — это позволяет избежать многих ошибок и проблем в дальнейшем.
- Если планируется очистка только раздела «Cache», выбираем пункт «wipe cache partition», подтверждаем удаление данных — пункт «Yes – Wipe Cache». Дожидаемся завершения процесса – внизу экрана появится надпись: «Сache wipe complete».
- Аналогично стирается раздел «Data». Выбираем пункт «wipe data/factory reset», затем подтверждение «Yes – Wipe all user data». Далее последует процесс очистки разделов и появится подтверждающая надпись внизу экрана: «Data wipe complete».
- Переходим к прошивке. Для установки зип-пакета выбираем пункт «install zip from sdcard» и подтверждаем свой выбор нажатием соответствующей аппаратной клавиши. Затем следует выбор пункта «choose zip from sdcard».
- Открывается список доступных на карте памяти папок и файлов. Находим нужный нам пакет и выбираем его. Если файлы установки копировались в корень карты памяти, для их отображения придется листать список в самый низ.
- Перед началом процедуры прошивки рекавери снова требует подтвердить осознанность собственных действий и понимание необратимости процедуры. Выбираем пункт «Yes – Install ***.zip», где *** — имя прошиваемого пакета.
- Начнется процедура прошивки, сопровождающаяся появлением строчек лога внизу экрана и заполнением индикатора выполнения.
- После появления внизу экрана надписи «Install from sdcard complete» прошивку можно считать законченной. Перезагружаемся в Android, выбрав пункт «reboot system now» на главном экране.
Прошивка через TWRP Recovery
Помимо решения от разработчиков ClockworkMod, существуют и другие модифицированные среды восстановления. Одним из самых функциональных решений такого рода является TeamWin Recovery (TWRP). О том, как прошивать устройства с помощью TWRP рассказано в статье:
Урок: Как прошить Android-устройство через TWRP
Таким образом производится прошивка Андроид-аппаратов через среды восстановления. Необходимо взвешенно подходить к выбору рекавери и способу их установки, а также прошивать в аппарат только соответствующие пакеты, полученные из надежных источников. В этом случае процесс протекает очень быстро и не вызывает никаких проблем впоследствии.