Menjalankan executable sendiri di shell Android

14

Saya memerlukan alat baris perintah khusus dan saya telah membuat program C di shell Linux saya. Saya telah mengkompilasi program dengan cross-compiler ARM. Saya kemudian telah memindahkan program ke sistem file Android dan mencoba menjalankannya.

Outputnya adalah izin ditolak.

Apa yang harus saya lakukan, untuk menjalankan program yang saya buat sendiri di sistem file Android?

Nuno Santos
sumber
Sudah mencoba chmod +x pgmdan ./pgmjuga?
ott--
8
Mungkin Anda meletakkannya di sdcard Anda - yang dipasang dengan noexecbendera. Anda harus memindahkannya ke penyimpanan internal ponsel, atau menjalankannya melalui shell (mis sh /path/to/myexecutable.).
Izzy
2
stackoverflow.com/questions/9868309/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Jawaban:

14

Saya berasumsi bahwa Anda menggunakan adb push untuk mengunggah executable Anda ke kartu-sd. Sayangnya sd-card selalu dipasang dengan "noexec" yang berarti Anda tidak dapat menjalankan apa pun dari sini.

Oleh karena itu Anda harus menyalin file executable ke sistem file lokal, misalnya ke / data / local. Jika perangkat tidak di-rooting atau Anda tidak menginstal BusyBox tidak akan ada perintah "cp". Anda hanya dapat menggunakan cat: cat /sdcard/myprog > /data/local/myprog.

Maka Anda harus mengatur izin yang dapat dieksekusi pada yang dapat dieksekusi. Chmod di android biasanya tidak mendukung sintaks "u + x". Karena itu Anda harus menelepon chmod 555 /data/local/myprog.

Setelah itu Anda bisa menjalankan executable Anda: /data/local/myprog.

Robert
sumber
Terima kasih atas balasan Anda. Sebenarnya masalahnya ada pada generasi biner. Itu tidak dihasilkan dengan benar! ;)
Nuno Santos
Saya memiliki busybox di perangkat saya, tetapi perintah ini: shell @ n200C: / $ busybox cp / storage / external_storage / sda1 / ffmpeg / data / ------ show error = cp: tidak dapat membuat '/ data / ffmpeg ': Izin ditolak
Dr.jacky
tmp-mksh: /data/local/workspace/clang+llvm-5.0.0-aarch64-linux-gnu/bin/clang++: No such file or directorymeskipun file tersebut ada
Necktwi
/ data / lokal memerlukan akses root pada perangkat saya. Gunakan / data / local / tmp sebagai gantinya
Chan Tzish
10

Pertama, Anda harus mendorongnya ke direktori, seperti /data/local/tmp. Kemudian, Anda harus mengatur izin untuk itu menggunakan chmod 755 executable. Setelah itu, Anda dapat menjalankannya sebagai ./executable.

Langkah-langkah lengkapnya adalah sebagai berikut:

adb push executable / data / local / tmp
adb shell
cd / data / local / tmp
chmod 755 dapat dieksekusi
./eksekusi

Atau, jika Anda ingin menjalankannya dari folder aset Anda, Anda harus menyalin file ke folder data Anda /data/data/packagename/. Kemudian menggunakan Filekelas, mengatur setExecutablebendera trueuntuk file dan menjalankannya dengan kelas Proses atau paket pihak ketiga seperti Root Tools .

Koorosh Ghorbani
sumber