Executando o próprio executável no shell do Android

14

Eu preciso de uma ferramenta de linha de comando específica e criei um programa C no meu shell Linux. Eu compilei o programa com um compilador cruzado ARM. Em seguida, mudei o programa para o sistema de arquivos Android e tentei executá-lo.

A saída é permissão negada.

O que preciso fazer para executar meus próprios programas compilados no sistema de arquivos Android?

Nuno Santos
fonte
Tentei chmod +x pgme depois ./pgmtambém?
ott--
8
Possivelmente você o colocou no seu sdcard - que é montado com a noexecbandeira. Você precisa movê-lo para o armazenamento interno do telefone ou executá-lo através de um shell (por exemplo sh /path/to/myexecutable).
Izzy
2
stackoverflow.com/questions/9868309/...
Ciro Santilli新疆改造中心法轮功六四事件

Respostas:

14

Suponho que você tenha usado o adb push para enviar o seu executável para o cartão SD. Infelizmente, o cartão SD é sempre montado com "noexec", o que significa que você não pode executar nada a partir daqui.

Portanto, você deve copiar o executável para o sistema de arquivos local, por exemplo, para / data / local. Caso o dispositivo não esteja enraizado ou você não tenha o BusyBox instalado, não haverá comando "cp". Você pode simplesmente usar gato: cat /sdcard/myprog > /data/local/myprog.

Então você deve definir a permissão do executável no executável. O Chmod no Android geralmente não suporta a sintaxe "u + x". Portanto, você tem que ligar chmod 555 /data/local/myprog.

Depois, você pode executar seu executável: /data/local/myprog.

Robert
fonte
Obrigado pela sua resposta. De fato, o problema estava na geração binária. Não estava sendo gerado corretamente! ;)
Nuno Santos
Eu tenho o busybox no meu dispositivo, mas este comando: shell @ n200C: / $ busybox cp / storage / external_storage / sda1 / ffmpeg / data / ------ show error = cp: não é possível criar '/ data / ffmpeg ': Permissão negada
Dr.jacky 16/11/2015
tmp-mksh: /data/local/workspace/clang+llvm-5.0.0-aarch64-linux-gnu/bin/clang++: No such file or directoryque o arquivo está presente
Necktwi
/ data / local requer acesso root no meu dispositivo. Use / data / local / tmp em vez disso
Chan Tzish 04/02
10

Primeiro, você deve colocá-lo em um diretório, como /data/local/tmp. Então, você deve definir permissão para isso chmod 755 executable. Depois disso, você pode executá-lo como ./executable.

As etapas completas são as seguintes:

executável adb push / data / local / tmp
shell adb
cd / data / local / tmp
executável chmod 755
./executável

Como alternativa, se você quiser executá-lo na sua pasta de ativos, precisará copiar o arquivo para sua pasta de dados /data/data/packagename/. Em seguida, usando a Fileclasse, defina o setExecutablesinalizador como truepara o arquivo e execute-o pela classe Process ou por pacotes de terceiros como o Root Tools .

Koorosh Ghorbani
fonte