Menu
Categories
Android – увеличение числа уровней громкости
February 24, 2012 Разное

Я был весьма удивлен, узнав, что в Android по умолчанию присутствует всего лишь 15 фиксированных градаций изменения громкости от минимальной к максимальной. Прямо сказать – это очень мало. При прослушивании музыки в тихих помещениях я нередко попадал в ситуацию, когда один уровень громкости является слишком тихим, а уровень ступенью выше – слишком громким. Нужно было что-то менять.
Как оказалось, для аппаратов с root-доступом решение данной проблемы существует!

Предупреждение

  • Данная инструкция подразумевает, что вы имеете root-доступ к своему аппарату.
  • Для увеличения числа градаций громкости необходимо модифицировать системные файлы, поэтому при неумелых действиях вы можете сломать операционную систему вашего устройства. Прежде, чем приступать к выполнению данной инструкции, неплохой идеей будет сделать полный бэкап NAND.
  • В инструкции предполагается, что вы уже умеете пользоваться adb.exe. Подробности настройки в тексте опущены.
  • Описанный способ может работать не на всех аппаратах. Отдельные значения числа градаций могут приводить к нелинейным изменениям уровня громкости. Если это произошло – попробуйте выставить другое число градаций.

Необходимое ПО

Инструкция

Получение системного файла framework.jar

Подключите ваш телефон к компьютеру в режиме USB Debugging и убедитесь, что он распознается системой при помощи команды adb devices в командной строке.

Для копирования файла framework.jar из внутренней памяти телефона в текущий каталог командной строки наберите:

adb pull /system/framework/framework.jar

Распаковка и модификация файла framework.jar

Прежде, чем изменять полученный файл framework.jar, неплохой идеей будет сделать его бэкап на случай, если что-то пойдет не так.

После этого откройте каталог, в который вы распаковали smali/baksmali, перенесите в него полученный на предыдущем шаге файл и запустите файл baksmali Manager.bat.

Нажмите 4 (select file to work), затем аналогично цифрой выберите framework.jar.

Нажмите 1 (baksmali) для распаковки выбранного файла.

Теперь в каталоге smali manager’а образовался новый каталог framework. Найдите файл framework\android\media\AudioService.smali и откройте его текстовым редактором.

Запустите поиск по следующей строке:
Landroid/media/AudioService;->MAX_STREAM_VOLUME:[I
При этом вы должны увидеть нечто подобное:

Строкой выше найденного ищем идентификатор массива, содержащего искомое число уровней громкости. В нашем примере это array_19c. Теперь запускаем поиск по найденному идентификатору, и должны найти таблицу:

В таблице нас интересуют строки 0xft 0x0t 0x0t 0x0t – именно 0xft в них отвечает за 15 уровней громкости. И, как можно заметить, f в шестнадцатеричной системе счисления – это и есть 15 в десятичной системе. Следовательно, чтобы сделать 30 различных уровней громкости – необходимо всего лишь заменить 0xft на 0x1et (30 десятичное = 1E шестнадцатеричное).

Сохраняем измененный файл с тем же именем.

Запаковка framework.jar и загрузка его в память телефона

Возвращаемся в smali manager и нажимаем цифру 2 (smali) для запаковки файлов обратно в понятную для Android структуру.

В процессе данной операции будет создан файл classes.dex. Данный файл необходимо поместить внутри архива framework.jar. Для этого открываем последний с помощью любого подходящего архиватора, после чего просто перетаскиваем classes.dex в открывшееся окошко.

Теперь осталось лишь загрузить измененный файл framework.jar обратно в память аппарата. Раздел /system, где хранился данный файл, по умолчанию смонтирован в системе Android в режиме только чтения (read-only), поэтому для начала потребуется перемонтировать его с правами записи:

adb remount

Затем для непосредственного копирования набираем:

adb push framework.jar /system/framework/framework.jar

После того, как файл окажется успешно загружен, следует убедиться, что на него оказались выставлены корректные права доступа. Используем следующий набор команд:

adb shell
$ chmod 644 /system/framework/framework.jar

Можно убедиться, что напротив файла framework.jar отображается набор разрешений -rw-r--r-- при помощи команды:

$ ls -la /system/framework/

Затем необходимо перезагрузить устройство, чтобы изменения вступили в силу. Для этого можно воспользоваться командой adb reboot.

Если вы все сделали правильно, то после успешной перезагрузки в вашем аппарате будет уже 30 различных градаций уровня громкости.

"10" Comments
  1. Делал все по инструкции, но описанного результата не добился, 15 уровней как было, так и осталось. В чем может быть ошибка?

  2. Поставил значение 0x64t при попытке сделать громче 17 уходит в ребут.

  3. Возможно, что 100 уровней громкости (0x64t = 100) – это просто слишком много.

    Кроме того, судя по отзывам в различных источниках, на некоторых устройствах то или иное число уровней громкости может в принципе работать неверно. Например, на многих устройствах Samsung исходное значение 15 фактически нельзя изменить – все другие варианты неработоспособны. Мне на HTC удалось успешно установить значение в 0x1Ft (30 градаций), и с ним аппарат работает корректно.

  4. Отлично, помогло для lg nexus 4, вернули к заводским, после этого в динамике разговорном вообще не было слышно, было даже лучше если телефон перевернуть. В итоге менял значение на FF – 255, и стало нормально слышно, вернул оригинальный файл с 5. Полет нормальный)))

  5. Все хорошо, но нет пояснения где менять значения при условиях подключения гарнитуры, а там обычно сразу все меняется, например при подключении гарнитуры стоит ограничение в 15 шагов, и делая 16 идет сброс на ноль и тишина :-)

  6. Забыл написать нет смысла увеличивать шаги больше 49 так как при этих значениях громкость звука линейно увеличивается и плавно, при других просто дубликат точек при которых звук остается на одной прямой.

    • При меньших резко и график ув. громкости становится угловатый.

  7. При распаковке файла никакого каталога не создается, а получается вот такая фигня: http://prnt.sc/nk31f7
    Что не так, как испавить?

Leave a Reply




*