การรันไฟล์สั่งการของตัวเองบนเชลล์ Android


14

ฉันต้องการเครื่องมือบรรทัดคำสั่งที่เฉพาะเจาะจงและฉันได้ทำโปรแกรม C ในเปลือก Linux ของฉัน ฉันได้รวบรวมโปรแกรมด้วย ARM cross-compiler ฉันได้ย้ายโปรแกรมไปยังระบบไฟล์ Android และพยายามเรียกใช้

เอาต์พุตถูกปฏิเสธสิทธิ์

ฉันต้องทำอะไรเพื่อเรียกใช้โปรแกรมที่คอมไพล์ด้วยตัวเองในระบบไฟล์ Android


พยายามchmod +x pgmแล้ว./pgmยัง?
ott--

8
อาจเป็นไปได้ว่าคุณวางไว้ใน sdcard ของคุณ - ซึ่งติดตั้งกับnoexecธง คุณต้องย้ายไปไว้ในที่เก็บข้อมูลภายในของโทรศัพท์หรือเรียกใช้ผ่านเปลือก (เช่นsh /path/to/myexecutable)
Izzy

คำตอบ:


14

ฉันคิดว่าคุณใช้ adb push สำหรับอัพโหลดไฟล์ปฏิบัติการของคุณไปยังการ์ด sd น่าเสียดายที่การ์ด sd นั้นติดตั้งด้วย "noexec" ซึ่งหมายความว่าคุณไม่สามารถดำเนินการใด ๆ จากที่นี่

ดังนั้นคุณต้องคัดลอกไฟล์ที่เรียกใช้ไปยังระบบไฟล์โลคัลเช่นไปยัง / data / local ในกรณีที่อุปกรณ์ไม่ได้ถูกรูทหรือคุณไม่มี BusyBox ติดตั้งอยู่จะไม่มีคำสั่ง "cp" cat /sdcard/myprog > /data/local/myprogคุณก็สามารถใช้แมว:

จากนั้นคุณต้องตั้งค่าการอนุญาตให้ใช้งานสำหรับไฟล์ที่เรียกทำงานได้ Chmod บน Android มักจะไม่รองรับไวยากรณ์ "u + x" chmod 555 /data/local/myprogดังนั้นคุณมีการโทร

หลังจากนั้นคุณสามารถดำเนินการปฏิบัติการของคุณ: /data/local/myprog.


ขอบคุณสำหรับคำตอบของคุณ ในความเป็นจริงปัญหาคือในรุ่นไบนารี มันไม่ได้ถูกสร้างขึ้นอย่างถูกต้อง! ;)
Nuno Santos

ฉันมี busybox บนอุปกรณ์ของฉัน แต่คำสั่งนี้: shell @ n200C: / $ busybox cp / storage / external_storage / sda1 / ffmpeg / data / ------ แสดงข้อผิดพลาด = cp: ไม่สามารถสร้าง '/ data / ffmpeg ': การอนุญาตถูกปฏิเสธ
Dr.jacky

tmp-mksh: /data/local/workspace/clang+llvm-5.0.0-aarch64-linux-gnu/bin/clang++: No such file or directoryแม้ว่าไฟล์นั้นจะมีอยู่
Necktwi

/ data / local ต้องการการเข้าถึงรูทบนอุปกรณ์ของฉัน ใช้ / data / local / tmp แทน
Chan Tzish

10

/data/local/tmpครั้งแรกที่คุณจะต้องผลักดันมันลงในไดเรกทอรีเช่น chmod 755 executableจากนั้นคุณจะต้องได้รับอนุญาตสำหรับการใช้ชุดที่ ./executableหลังจากนั้นคุณสามารถเรียกใช้มันเป็น

ทำตามขั้นตอนดังนี้:

adb push executable / data / local / tmp
adb shell
cd / data / local / tmp
chmod 755 ปฏิบัติการได้
./executable

/data/data/packagename/หรือถ้าคุณต้องการที่จะเรียกใช้จากโฟลเดอร์เนื้อหาของคุณคุณต้องคัดลอกไฟล์ไปยังโฟลเดอร์ข้อมูลของคุณ แล้วใช้Fileชั้นตั้งsetExecutableธงtrueสำหรับไฟล์และเรียกใช้มันโดยชั้นกระบวนการหรือบุคคลที่สามเช่นแพคเกจเครื่องมือราก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.