Как сделать вставку встроенной библиотеки в Android?C++

Программы на C++. Форум разработчиков
Anonymous
Как сделать вставку встроенной библиотеки в Android?

Сообщение Anonymous »

У меня есть общая библиотека, которая вставляет некоторые вызовы GLES (например, glClear).
Она отлично работает в Linux с простым LD_PRELOAD, но я не могу заставить его работать на Android.
Моя библиотека печатает в logcat при загрузке, поэтому я могу знать, загружена она или нет.
  • Код: Выделить всё

    LD_PRELOAD
    загружает библиотеку, но не выполняет вызовы gl — приложение по-прежнему вызывает функции из «исходной» системной библиотеки gl.
  • Пытался загрузить ее, изменяя различные части AOSP (14), например, вызовите dlopen перед загрузкой любых других библиотек gl в frameworks/native/opengl/libs/EGL/egl.cpp:egl_init_drivers. Он загружается, но интерпозиция снова не работает.
С символами вроде все в порядке:

Код: Выделить всё

nm -D libgl.so | grep glClear
00000000001ecdb0 T glClear
00000000001ed5c0 T glClearColor
  • Моя библиотека находится в /data/local/tmp/ и не включена ни в одно приложение.
  • SELinux установлен в разрешительный режим.
  • Я могу изменить любую часть исходного кода AOSP.
  • Я не могу заменить системные библиотеки GL, так как Мне нужно «переопределить» лишь несколько функций и только для нескольких приложений.
Есть идеи, как заставить это работать?

Подробнее здесь: https://stackoverflow.com/questions/786 ... in-android

Вернуться в «C++»