Как использовать LD_PRELOAD с медиасервером Android?

Я могу использовать LD_PRELOAD с обычными нативными приложениями, такими как, например. лс:

LD_PRELOAD=/path/to/my/library.so ls

После некоторого поиска я также смог использовать его с java-приложениями, установив такое свойство:

adb shell setprop wrap.com.some.app LD_PRELOAD=/path/to/my/library.so

Однако я заинтересован в использовании LD_PRELOAD с процессом mediaserver. Это сложно, потому что он постоянно работает в фоновом режиме. Если вы убьете его, он автоматически запустится снова. Я могу запустить «второй экземпляр» с помощью:

LD_PRELOAD=/path/to/my/library.so /system/bin/mediaserver

и он загрузит мою библиотеку, хотя «второй экземпляр» не будет использоваться ни при каком воспроизведении. Всегда исходный медиасервер будет обрабатывать операции с мультимедиа. Итак, есть ли способ использовать LD_PRELOAD с медиасервером без изменения файлов init.rc на устройстве?


person user1723095    schedule 05.05.2016    source источник


Ответы (1)


Оказалось, что есть способ сделать это. Мне пришлось сделать следующие вещи:

adb root
adb remount
adb pull /system/bin/mediaserver
echo "LD_PRELOAD=/path/to/my/library.so /system/bin/mediaserver_orig" > mediaserver
adb shell mv /system/bin/mediaserver /system/bin/mediaserver_orig
adb push mediaserver /system/bin/mediaserver

Затем я убил медиасервер, который (на удивление) не запускался автоматически, поэтому мне также пришлось запускать его вручную:

adb shell
/system/bin/mediaserver &

В любом случае это возможно, поэтому я приму свой ответ, если ни у кого нет ничего лучше.

Только одно предупреждение — когда я вернулся в предыдущее состояние с помощью:

adb shell mv /system/bin/mediaserver_orig /system/bin/mediaserver

и перезагрузил устройство, медиасервер так и не запустился автоматически! Так что это не то, что вы хотели бы делать на устройстве, которое вам небезразлично, потому что в таком состоянии, если вы не запустите медиасервер вручную, загрузка не будет завершена устройством. Хотя это явление могло произойти из-за того, что я играл с чауном, так что может быть не связано с описанной процедурой, в любом случае вас предупредили.

person user1723095    schedule 06.05.2016