Запуск собственного исполняемого файла на оболочке Android


14

Мне нужен конкретный инструмент командной строки, и я создал C-программу в своей оболочке Linux. Я скомпилировал программу с помощью кросс-компилятора ARM. Затем я переместил программу в файловую систему Android и попытался запустить ее.

Выход запрещен.

Что мне нужно сделать, чтобы запускать свои собственные скомпилированные программы в файловой системе Android?


Пробовал chmod +x pgmа потом ./pgmеще?
ot--

8
Возможно, вы поместили его на SD-карту, которая установлена ​​с noexecфлагом. Вам нужно либо переместить его во внутреннюю память телефона, либо запустить его через оболочку (например sh /path/to/myexecutable).
Иззи

Ответы:


14

Я предполагаю, что вы использовали adb push для загрузки вашего исполняемого файла на SD-карту. К сожалению, SD-карта всегда монтируется с «noexec», что означает, что вы не можете ничего выполнить отсюда.

Поэтому вы должны скопировать исполняемый файл в локальную файловую систему, например, в / data / local. Если устройство не имеет root-прав или у вас не установлен BusyBox, команда "cp" не будет. Вы можете просто использовать кошку: cat /sdcard/myprog > /data/local/myprog.

Затем вы должны установить разрешение для исполняемого файла. Chmod на Android обычно не поддерживает синтаксис "u + x". Поэтому вы должны позвонить chmod 555 /data/local/myprog.

После этого вы можете выполнить свой исполняемый файл: /data/local/myprog.


Спасибо за ваш ответ. На самом деле проблема была в двоичном поколении. Это не было сгенерировано правильно! ;)
Нуно Сантос

У меня есть busybox на моем устройстве, но эта команда: shell @ n200C: / $ busybox cp / storage / external_storage / sda1 / ffmpeg / data / ------ show error = cp: не могу создать '/ data / ffmpeg ': В
доступе

tmp-mksh: /data/local/workspace/clang+llvm-5.0.0-aarch64-linux-gnu/bin/clang++: No such file or directoryхотя файл присутствует
Necktwi

Для / data / local требуется root-доступ на моем устройстве. Вместо этого используйте / data / local / tmp
Chan Tzish

10

Во-первых, вы должны поместить его в каталог, например /data/local/tmp. Затем вы должны установить разрешение для этого использования chmod 755 executable. После этого вы можете запустить его как ./executable.

Выполните следующие шаги:

исполняемый файл adb push / data / local / tmp
adb shell
cd / data / local / tmp
исполняемый файл chmod 755
./executable

В качестве альтернативы, если вы хотите запустить его из папки активов, вам необходимо скопировать файл в папку данных /data/data/packagename/. Затем с помощью Fileкласса установите setExecutableфлаг trueдля файла и запустите его с помощью класса Process или сторонних пакетов, таких как Root Tools .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.