Я пытаюсь выполнить команду оболочки из c ++ на Android.Я собираю для arm64-v8a и armeabi-v7a.Мое устройство Android имеет root-права.
Я не понимаю, почему, но следующий код прекрасно работает, когда я запускаю двоичный файл armeabi-v7a как пользователь root или не пользователь root и когда я запускаю arm64-v8a какпользователь без полномочий root.Но если я запускаю двоичный файл arm64-v8a от имени пользователя root, он не работает, я получаю:
EXECVP : -1
ERRNO : 13
int main()
{
char* command[] = {
(char*) "/sbin/su",
(char*) "-c",
(char*) "/system/bin/sh -c \"/system/bin/touch /data/local/tmp/foo\"",
NULL
};
std::cout << "EXECVP : " << execvp(command[0], command) << std::endl;
std::cout << "ERRNO : " << errno << std::endl;
}
Я также пытался работать с функцией system()
или popen()
, но ничего не решеномоя проблема.У меня всегда один и тот же результат: отлично работает с armeabi-v7a (пользователь root или пользователь без полномочий root) и arm64-v8a (пользователь без полномочий root), но систематически происходит сбой при запуске его от имени пользователя root.