Пролог
Казалось бы, на первый взгляд весьма простая задача. Некоторые читатели могли еще в те бородатые времена лазить по всяким 4пда, рутить свой сенсорный самсунг, менять содержимое файла build.prop и показывать наивным ламерам свой iPhone 15+ Max Pro. Однако, как оказалось, и как оно часто бывает, не все так просто и здесь есть свои подводные камни. Статья призвана помочь простым работягам избежать все кочки да ямы на пути к своей цели!
Дисклеймер
Сразу предупрежу, что люблю писать подобные статьи довольно подробно, не ради объема и многобукав, а ради максимального погружения в проблему и способ ее решения. Обратите внимание, что я работаю на macOS, поэтому все команды в терминале будут ориентированы под данную ОС. Также, следует отметить, что проворачиваю все это для API 30, то есть для самого последнего на момент написания статьи. Как говорят интернеты, сложности по этой теме начались с API 29.
Зачем это нужно?
Предполагаю, что у вас, дорогой читатель, есть на это своя веская причина, иначе не стали бы вы этим заниматься. Наиболее вероятно, что у вас, как и у меня есть программная проверка на модель устройства с которого запущено приложение, примерно как здесь. К слову, таким образом можно будет проверять результат наших трудов. Второй же, и более простой способ проверки модели эмулятора будет через настройки девайса в разделе сведений об устройстве:
Ради контекста вкратце расскажу зачем это понадобилось мне. Я получил .apk с багом где-то внутри приложения. Однако пройти дальше первого экрана в этом приложении я не смог. Дело в том, что при запуске, с сервера приходит список разрешенных для запуска устройств и ни мой народный Ксяоми, ни мой эмулятор в этот список не входит. Вот и додумался поменять имя модели устройства на одно из разрешенных. Рутить свой личный телефон не хотелось, поэтому решил шаманить с эмулятором.
Достаем build.prop
Как уже говорилось в начале статьи, за имя производителя и модель устройства отвечает системный файл build.prop, который находится в корне устройства в папке system/. Однако при попытке просмотреть его, не говоря уже о редактировании, мы получим отказ в доступе:
Для решения этой проблемы необходимо в терминале обратиться к adb и запросить root права следующей командой: adb root
. И вот и первый подводный камень, а именно вывод следующего сообщения: adbd cannot run as root in production builds
. Это из-за того что при создании эмулятора мы выбрали вариант с установленными Google сервисами:
Простое решение — создать эмулятор без установленных Google сервисов, после чего повторить команду adb root
. После чего в консоли должно появиться сообщение: restarting adbd as root
что говорит об успешном проведении операции. Естественно если с самого начала у вас был эмулятор без Google сервисов, то скорее всего с adb root
и выше описанной проблемой вы не столкнулись.
Отлично, теперь мы видим содержимое файла build.prop:
Редактируем build.prop
Сохраним файл build.prop в любое удобное место для дальнейшего редактирования выделенной красным области на скриншоте выше. Я сохранил прямо на рабочий стол:
Вносим необходимые изменения. Просмотрев логи запросов и ответов предоставленного мне .apk я нашел приходящий с сервера список разрешенных устройств. То есть, для моих целей нужно поменять два значения на PIXEL 3A XL (как вы поняли, здесь вы можете указывать необходимую именно вам модель):
Сохраняем изменения и заливаем файл обратно на эмулятор. Делается это при помощи команды adb push (кстати, скачать файл с эмулятора можно при помощи adb pull если у вас вдруг аллергия на GUI).
Вводим команду в терминал: adb push build.prop system/
И получаем ошибку:
adb: error: failed to copy 'build.prop' to 'system/build.prop': remote couldn't create file: Read-only file system
Вот здесь и начинается самое интересное! По умолчанию эмулятор запускается в режиме чтения системных файлов, без возможности делать записи. Следовательно, что либо поменять без прав на запись у нас не выйдет. Для этого нам необходимо запустить эмулятор в ручном режиме с доступом на запись системных файлов.
Запускаем эмулятор с доступом на перезапись системных файлов
Для этого нужно выполнить следующую команду в терминале (чтобы скорее всего получить еще одну ошибку):
emulator -avd Pixel3XLAPI30 -writable-system -no-snapshot -nocache
итак здесь Pixel3XLAPI30 — это название нашего эмулятора который мы будем запускать в режиме записи, получить это имя можно выполнив команду emulator -list-avds
-writable-system — собственно тот самый флаг и виновник торжества.
-no-snapshot -nocache — просто советую ввести чтобы избавиться от любого возможного мусора, который может помешать нашему плану-капкану.
После у нас либо запустится эмулятор (несколько секунд запускается, так что если тупит то так и должно быть) либо получаем ошибку следующего типа:
PANIC: Missing emulator engine program for 'x86' CPU.
БЕЗ ПАНИКИ! Не удивительно, что интернет уже решал подобную проблему.
Что бы и нам решить с этим нужно в файле .bash-profile (или если у вас zsh то в файле .zshenv) находящийся в корне вашего профиля macOS, добавить дополнительные пути. Вот как это выглядит у меня:
export ANDROIDHOME=~/Library/Android/sdk
есть такая переменная ANDROIDHOME и с ее участием редактируем переменную PATH:
export PATH=$ANDROIDHOME/emulator:$ANDROIDHOME/tools:$PATH
Чтобы изменения вступили в силу перезапускаем терминал (или вводим source ~/.bash_profile
) (или source ~/.zshenv
). Результат можно проверить выполнив команду echo $PATH
и убедиться что в переменной PATH появился добавленный нами путь.
Пробуем запустить эмулятор еще раз.
emulator -avd Pixel3XLAPI30 -writable-system -no-snapshot -nocache
Теперь он должен был успешно запустится.
Активируем доступ на перезапись системных файлов
Из описания флага -writable-system:
-writable-system make system & vendor image writable after ‘adb remount’
делаем вывод что теперь нам нужно выполнить adb remount
. Для этого открываем новое окно терминала и выполняем сначала команду adb root
, что бы adb remount
сработало.
После adb remount
, будет сообщение что эмулятор нужно перезапустить. Сделать это можно командой adb reboot. Но и здесь не все так просто. Очередной подводный камень об который мы разбили еще один ноготь на пальцах ног. Если сделать adb reboot
то все просто напросто зависает НАВСЕГДА. Настолько навсегда, что придется удалять эмулятор и создавать его заново. Интернет и с этим столкнулся и даже баг создали на гуглов. И благо нашлось решение. Чтобы эмулятор не зависал нужно добавить пару команд до adb remount
.
Итак по порядку:
-
Делаем
adb root
-
Теперь делаем
adb shell avbctl disable-verification
-
Если вы вдруг остались в shell то введите
exit
-
Перезагружаем эмулятор
adb reboot
и ждем -
Снова делаем
adb root
-
И вот теперь можно делать
adb remount
Ура! Теперь мы можем записывать файлы в системную папку нашего эмулятора. Можем пушнуть наш отредактированный build.prop файл: adb push build.prop system/
. Сделаем adb reboot
и убеждаемся что ничего не поменялось… Имя модели не изменилось…
Редактируем правильный build.prop
Вернемся к началу и заметим, что значения ro.product.product.name и ro.product.product.model не соответствует тому, что отображается в настройках устройства. Изучив структуру системных папок я заметил, что существует несколько файлов build.prop, которые располагаются в папках: system, system_ext, vendor и product. Эмпирическим методом я скачивал, редактировал и пушил обратно каждый из этих файлов. В конце концов ключевым оказался файл в папке product. Отредактировав его я наконец-то смог изменить название модели эмулятора устройства!
Подводим итоги
Наконец-то я смогу запустить приложение и воспроизвести баг. Подумал я…
Теперь я уперся в то, что запускаю приложение якобы с рутованого девайса (ну да есть такой грешок). И дело даже не в команде adb root
, ведь команда adb unroot
не помогла. Что ж, опускать руки уже поздно, придется что-то придумать.
О том, как я обходил проверку на рутованность устройства я расскажу в следующей своей статье. Немного реверс инжиниринга и даже такая популярная библиотека как RootBeer не проблема.
Данной статьей я стремился собрать как можно больше проблем по этому вопросу и изложить все в форме step-by-step. Спасибо за ваше внимание и очень надеюсь, что статья оказалась полезной!
Как Build.prop для дополнительной совместимости
Вы можете использовать несовместимые приложения для работы на вашем устройстве, отредактировав систему build.prop на вашем устройстве.
Некоторые приложения могут не работать на вашем устройстве, потому что они несовместимы. Это случается очень часто.
Возможно, это связано с вашим телефоном и тем, как он идентифицируется в Google Play. Приложение, которое вы пытаетесь установить, может быть ограничено несколькими устройствами только из-за ограниченной поддержки.
Для таких вопросов вы можете обмануть Google Play, отредактировав файл build.prop вашего устройства. Это требует простой процедуры, но с большим количеством рисков. Если вы хотите действительно отредактировать файл, вам придется столкнуться с риском и начать выполнять резервное копирование Nandroid всего, что хранится на вашем устройстве. Ваш телефон также должен быть укоренен.
Чтобы этот процесс был успешным, вы должны внимательно следовать инструкциям. Будьте осторожны в следующем процессе, как в Windows Registry.
-
Убедитесь, что Android коренится
Ваш телефон Android должен быть внедрен до доступа к файлу build.prop. Эта процедура отличается в зависимости от производителя вашего устройства. У HTC, например, есть инструменты, позволяющие вам root, а другие нет. Вы можете найти помощь на XDA-Developers.com.
- Найти файл build.prop
Загрузите и установите приложение Tasker из Play Маркета. Следуйте экранной информации и просто продолжайте, пока не дойдете до главного экрана, «Профили / Задачи / Сцены». Убедитесь, что выбрана вкладка «Профиль» и нажмите «+» на нижней части экрана, чтобы сделать первый профиль.
-
Резервные данные
Убедитесь, что ваши данные полностью защищены резервной копией Nandroid ROM. Если нет, создайте копию build.prop и сохраните ее на SD-карте или облачном хранилище. Это полезно в случае, если что-то пойдет не так.
-
Откройте сборку build.prop и Edit
Убедитесь, что у вас есть текстовый редактор, поэтому вы можете редактировать файл build.prop. Откройте файл из ES File Explorer. Вы увидите список приложений в коллекции. Приложение ES Note Editor настоятельно рекомендуется для достижения наилучших результатов.
- Объяснение Build.prop
Build.prop — это в основном идентификатор устройства. В нем описывается модель и другая информация для Google Play, а также приложений. Вы можете редактировать эти данные, чтобы контролировать, как вы хотите, чтобы приложения запускались. Модель вашего устройства вы можете найти в списке ro.product.model.
-
Устройство маскировки
Теперь вы можете настроить определенное поле из файла build.prop, чтобы ваше устройство могло быть совместимо с определенными приложениями. Измените ro.build.version.release = вместе с ro.product.model =. Выражение ro.build.version.release = указывает вашу версию сборки Android. Вам также необходимо изменить ro.product.brand =, чтобы вы могли ребрендировать свой телефон.
- Другие изменения
Если вы еще не видите никаких изменений, найдите ro.product.name =, ro.product.device =, ro.product.manufacturer = и ro.build.fingerprint =. Проверьте XDA-Developers.com как ссылку на параметры изменения build.prop.
- Сохранить build.prop И установить приложение
Сохраните отредактированный файл build.prop, нажав на кнопку «Назад» вашего устройства. Просто соглашайтесь на каждое приглашение и перезагружайте Android. Теперь вы можете выбрать приложение, которое хотите загрузить и установить из Google Play.
- Загрузочная петля для справки
Опять же, этот процесс является рискованным. Если возникнут какие-либо ошибки, ваше устройство не загрузится должным образом. Вы можете восстановить резервную копию Nandroid или восстановить файл build.prop из резервной копии, сохраненной на SD-карте или облачном хранилище.
- Гугл игры
Приложения, которые вы принудительно устанавливаете на свой телефон после редактирования build.prop, могут нанести ущерб вашему устройству. Никогда не пытайтесь установить что-либо, пока не убедитесь, что он хорошо работает с вашим устройством.
У тебя есть вопросы? Или вы хотите поделиться своим опытом после этого урока?
Оставьте комментарий ниже.
EP
[embedyt] https://www.youtube.com/watch?v=y4c-A4dgHCs[/embedyt]
Об авторе
Команда Android1Pro
100% независимый объективный веб-сайт Android, ориентированный на пользователя, с аппаратным обеспечением, программным обеспечением Android, обзорами приложений, а также точными, исчерпывающими, простыми пошаговыми инструкциями, написанными командой технических экспертов, которые живут и дышат Android. Теперь, когда мы помогли вам решить вашу проблему, почему бы не ответить взаимностью, поделившись информацией с друзьями и коллегами! А пока выиграйте БЕСПЛАТНЫЙ подарок на новый телефон Samsung на 1000 долларов сегодня тому, у кого больше всего акций. Поторопитесь, прежде чем исчезнуть! Совершенно очевидно, что не забудьте ввести свой комментарий в поле для комментариев к сообщению вместе со своим адресом электронной почты, чтобы его рассмотрели и проинформировали о выигрыше БЕСПЛАТНОГО подарка на новый телефон Samsung за 1000 долларов.
Если вы когда-либо рутировали свое устройство Android или пробовали работать с системными файлами, вы могли встретить файл build.prop. Он находится в системном каталоге на устройствах Android, поэтому для редактирования файла build.prop вам потребуется root-доступ.
Что такое файл build.prop?
Вы можете задаться вопросом, что делает файл build.prop и почему он так важен для ОС, установленной на вашем устройстве. Что ж, файл build.prop содержит информацию о свойствах системы и другую важную информацию о сборке, которая используется в масштабе всей системы на устройстве Android.
Строки и значения, определенные в файле build.prop, критически важны для ОС, поскольку они определяют, какие функции должны быть включены на устройстве. Редактируя файл build.prop, вы можете создавать или изменять системные свойства, которые затем загружаются при перезагрузке вашего устройства.
Примечание: Для редактирования файла build.prop требуется root-доступ, поэтому вы хотите убедиться, что ваше устройство Android имеет root-права, прежде чем приступать к выполнению приведенных ниже инструкций.
Кроме того, если вы новичок, не рекомендуется изменять значения файла build.prop, исходя из собственных знаний. Убедитесь, что системные значения, которые вы хотите изменить в файле build.prop, исходят от опытного / знающего пользователя Android. В противном случае вы можете получить устройство Android с мягким кирпичом.
Как отредактировать файл build.prop на Android
- Скачать / установить Приложение BuildProp Editor из Play Store на ваше устройство Android.
- Откройте приложение BuildProp Editor и внесите одно из следующих изменений:
- Отредактируйте существующие строковые значения build.prop:
- Коснитесь значка поиска на верхней панели.
- Введите имя строки, значение которой вы хотите изменить, и выберите ее, когда она появится в результатах поиска в реальном времени.
- Измените значение строки в соответствии с вашими потребностями. Значение определяется после знак равно знак.
└ Например, persist.camera.HAL3.enabled =1 включит camera2api и persist.camera.HAL3.enabled =0 отключит camera2api. - После изменения строкового значения коснитесь значка сохранения на верхней панели.
└ Когда он запрашивает разрешение root, ДАЙТЕ это.
- Добавьте новую строку в build.prop:
- Коснитесь значка редактирования на верхней панели.
- Ваш файл build.prop откроется, прокрутите его до нижней строки »добавьте отдельную строку и введите / вставьте новую строку.
└ Fили например persist.camera.HAL3.enabled = 1 (для включения camera2api). - После добавления новой строковой строки в файл build.prop коснитесь значка сохранения на верхней панели.
└ Когда он запрашивает разрешение root, ДАЙТЕ это.
- Отредактируйте существующие строковые значения build.prop:
- Перезагрузите ваше устройство.
Это все. Измененные или вновь добавленные строковые значения в файле build.prop будут применены к системе после перезагрузки устройства.
Альтернативные способы редактирования файла build.prop?
Не хотите использовать специальное приложение для редактирования файла build.prop? Что ж, вы всегда можете использовать приложение файлового менеджера с корневым доступом (например, корневой браузер или же ES File Explorer), чтобы открыть / отредактировать файл build.prop на вашем устройстве Android.
Счастливого Androiding!
I’m running an ADB shell on my main device, whose ROM was dead due to forgetting to append emulator after
ro.build.characteristics=tablet
, when appended this line becomes
ro.build.characteristics=tablet,emulator
, on both files in the title.
Since i know where they are, this is solved, i know pull to and push from PC commands inside ADB shell.
Наверное многим известно, что в корне всех девайсов на платформе android существует некая папка system. Здесь в целом и находится наша система. Так же, практически все прошивки шьют именно эту папку.
Не будем уходить от темы. В корне этой папки лежит файл с говорящим названием — build.prop. (Если подумать, то расширение prop можно перевести как «подпирать» и в итоге воспринимать как что-то вроде: «подпирающий постройку»)
Вообщем, правя этот файл, можно «выжать» из смартфона всё до максимума. Большую часть из этих настроек другим способом не установить. Они упираются в этот файл. Конечно же, чтобы это сделать нужны root — права и текстовый редактор, имеющий разрешения для внесения поправок.
Сразу хочу предупредить — делайте бэкапы. И да, за превращение смартфона в кирпич или других последствий я ответственности не несу. Делайте всё на свой страх и риск.
Все эти действия работают так же на планшетах под управлением OS Android!
Ладно, начнём.
Подчёркнутые значения нужно менять для достижения результата.
ro.media.enc.jpeg.quality=100 — эта строчка отвечает за качество сохранения .jpg файлов в процентах. Как бы 100 обозначает 100% качество. Но при этом размер сохраняемых картинок значительно возрастает.
debug.sf.hw=1 — аппаратное GPU — ускорение. 1 — включить, 0 — выключить. Могут возникнуть проблемы с отображением чего — либо. Но лично я с этими проблемами пока что не встречался.
dalvik.vm.execution-mode=int:jit — отвечает за JIT. Значение jit его активирует, а fast — деактивирует. (JIT — Just In Time (С англ. «точно во время», «как раз вовремя», и т.п.))
wifi.supplicant_scan_interval=20 — отвечает за интервал поиска Wi-Fi. По умолчанию обычно это 20. Значение устанавливается в секундах. Как бы некоторые советуют ставить около 180—200, для экономии и так маленькой батарейки. Т.к. я Wi-Fi юзаю не так уж и много, оставил это значение по умолчанию.
dalvik.vm.heapsize=32m — отвечают за выделение оперативки под одно приложение. Повышение этого значения конечно же приведёт к лучшей производительности в играх. Но, если преувеличить может вызвать нестабильность системы в целом. Значение выше имеющейся оперативки я ставить не пробовал. У меня установлено как 128, имея при этом 512.
ro.product.model=GT-I8150 — модель телефона, за которую система принимает имеющуюся. Изменяя это значение можно запустить некоторые приложения, в которых пишут что-то вроде: «Недоступно для вашей модели телефона», или т.п. Так же, таким образом можно обмануть плэй — маркет, и установить приложения, на которые он ругается, мол не пойдёт.
debug.sf.nobootanimation=1 — эта строчка у многих отсутствует. Вообщем, значение 1 выключает анимацию при загрузке девайса. Немного ускоряет включение, но выглядит не так эффектно и эпично.
ro.media.dec.jpeg.memcap=5000000 — отвечает за качество фотографий. Конечно, если у вас камера 5 мп, снимать на 40 мп она не будет.
ro.media.enc.hprof.vid.bps=5000000 — отвечает за качество видео. В прочем, аналогично прошлой строчке.
ro.config.hwfeature_wakeupkey=0 — отключаем возможность «разбудить» телефон нажатием на клавиши громкости.
windowsmgr.max_events_per_sec=60 — эта строчка чаще всего изначально отсутствует. Но её можно дописать самостоятельно. Изменяя значения в ней, можно добиться максимально плавной и гибкой системы.
ro.build.display.id=Samoylov and all — all — all — это что-то типа номера сборки. Особой роли не играет. Посмотреть можно открыв «Настройки» => «О телефоне«.
ro.sf.lcd_density=240 — плотность экрана. На некоторых девайсах отсутствует, можно дописать самому.
Изменения вступают в силу только после перезагрузки девайса!
P.S. Это — далеко не все строчки, существующие в этом файле. Их бывает неимоверно много и на многих устройствах бывают уникальные.