Exécuter son propre exécutable sur le shell Android

14

J'ai besoin d'un outil de ligne de commande spécifique et j'ai créé un programme C dans mon shell Linux. J'ai compilé le programme avec un compilateur croisé ARM. J'ai ensuite déplacé le programme dans le système de fichiers Android et essayé de l'exécuter.

La sortie est refusée.

Que dois-je faire pour exécuter mes propres programmes compilés dans le système de fichiers Android?

Nuno Santos
la source
Essayé chmod +x pgmet puis ./pgmaussi?
ott--
8
Vous l'avez peut-être placé sur votre carte SD - qui est montée avec le noexecdrapeau. Vous devez soit le déplacer dans la mémoire interne du téléphone, soit l'exécuter via un shell (par exemple sh /path/to/myexecutable).
Izzy
2
stackoverflow.com/questions/9868309/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Réponses:

14

Je suppose que vous avez utilisé adb push pour télécharger votre exécutable sur la carte SD. Malheureusement, la carte SD est toujours montée avec "noexec" ce qui signifie que vous ne pouvez rien exécuter d'ici.

Par conséquent, vous devez copier l'exécutable dans le système de fichiers local, par exemple dans / data / local. Dans le cas où le périphérique n'est pas rooté ou si vous n'avez pas installé BusyBox, il n'y aura pas de commande "cp". Vous pouvez simplement utiliser cat:cat /sdcard/myprog > /data/local/myprog .

Ensuite, vous devez définir l'autorisation exécutable sur l'exécutable. Chmod sur Android ne prend généralement pas en charge la syntaxe "u + x". Vous devez donc appelerchmod 555 /data/local/myprog .

Ensuite , vous pouvez exécuter l' exécutable: /data/local/myprog.

Robert
la source
Merci pour votre réponse. En fait, le problème était sur la génération binaire. Il n'était pas généré correctement! ;)
Nuno Santos
J'ai busybox sur mon appareil, mais cette commande: shell @ n200C: / $ busybox cp / storage / external_storage / sda1 / ffmpeg / data / ------ show error = cp: impossible de créer '/ data / ffmpeg ': Autorisation refusée
Dr.jacky
tmp-mksh: /data/local/workspace/clang+llvm-5.0.0-aarch64-linux-gnu/bin/clang++: No such file or directorysi le fichier est présent
Necktwi
/ data / local nécessite un accès root sur mon appareil. Utilisez / data / local / tmp à la place
Chan Tzish
10

Tout d'abord, vous devez le pousser dans un répertoire, tel que /data/local/tmp. Ensuite, vous devez définir l'autorisation pour cette utilisation chmod 755 executable. Après cela, vous pouvez l'exécuter en tant que ./executable.

Les étapes complètes sont les suivantes:

exécutable adb push / data / local / tmp
adb shell
cd / data / local / tmp
exécutable chmod 755
./exécutable

Alternativement, si vous souhaitez l'exécuter à partir de votre dossier de ressources, vous devez copier le fichier dans votre dossier de données /data/data/packagename/. Ensuite, en utilisant Fileclass, définissez l' setExecutableindicateur sur truepour le fichier et exécutez-le par la classe Process ou des packages tiers tels que Root Tools .

Koorosh Ghorbani
la source