Я был весьма удивлен, узнав, что в Android по умолчанию присутствует всего лишь 15 фиксированных градаций изменения громкости от минимальной к максимальной. Прямо сказать – это очень мало. При прослушивании музыки в тихих помещениях я нередко попадал в ситуацию, когда один уровень громкости является слишком тихим, а уровень ступенью выше – слишком громким. Нужно было что-то менять.
Как оказалось, для аппаратов с root-доступом решение данной проблемы существует!
Подключите ваш телефон к компьютеру в режиме USB Debugging и убедитесь, что он распознается системой при помощи команды adb devices в командной строке.
Для копирования файла framework.jar из внутренней памяти телефона в текущий каталог командной строки наберите:
adb pull /system/framework/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 шестнадцатеричное).
Сохраняем измененный файл с тем же именем.
Возвращаемся в 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 различных градаций уровня громкости.
Делал все по инструкции, но описанного результата не добился, 15 уровней как было, так и осталось. В чем может быть ошибка?
Поставил значение 0x64t при попытке сделать громче 17 уходит в ребут.
Отлично, помогло для lg nexus 4, вернули к заводским, после этого в динамике разговорном вообще не было слышно, было даже лучше если телефон перевернуть. В итоге менял значение на FF – 255, и стало нормально слышно, вернул оригинальный файл с 5. Полет нормальный)))
Все хорошо, но нет пояснения где менять значения при условиях подключения гарнитуры, а там обычно сразу все меняется, например при подключении гарнитуры стоит ограничение в 15 шагов, и делая 16 идет сброс на ноль и тишина :-)
Забыл написать нет смысла увеличивать шаги больше 49 так как при этих значениях громкость звука линейно увеличивается и плавно, при других просто дубликат точек при которых звук остается на одной прямой.
При меньших резко и график ув. громкости становится угловатый.
При распаковке файла никакого каталога не создается, а получается вот такая фигня: http://prnt.sc/nk31f7
Что не так, как испавить?
Upd.: Проблема решена, но появилась другая: вылетает ошибка “Not running as root. Try adb root at first”
как решил проблему?