Есть неприятный хакерский способ заставить Android сделать это для вас (что я и делаю, успешно).
Когда приложение установлено, Android скопирует соответствующие библиотеки для вашей архитектуры из libs/$ARCH/libfoo.so
в /data/data/$PACKAGE/libs
для вас. Хитрость в том, что он будет только копировать файлы вида lib$SOMETHING.so
. Это даже сохранит права на выполнение.
Итак, если вы переименуете свой su
исполняемый файл в libsu.so
, Android сделает всю работу за вас. Затем вы можете найти его, используя пути, доступные в Activity.
Однако, будьте осторожны! Android не предназначен для запуска автономных приложений, и Zygote действительно не ладит с разветвлением. Я обнаружил, что Runtime.exec()
имеет условия гонки и может потерпеть крах. Единственный надежный метод, который я нашел, - это использование JNI для реализации небольшой библиотеки, которая выполняет fork и exec, не касаясь каких-либо других данных между fork и exec. У меня был вопрос по этому поводу со всеми деталями, но я не могу его найти.
У меня сейчас нет доступа ни к одному из кодов, но если вы захотите, я могу найти для вас некоторые из них в понедельник.