Saya mencoba untuk port aplikasi Android ke Linux (jangan tertawa :) dan saya telah menemukan masalah. Ketika mencoba mengeksekusi executable Android ( app_process
) setelah menambahkan izin yang dapat dieksekusi ./app_process
dengannya dikatakan tidak ada meskipun cat ./app_process
berfungsi.
Juga di manajer file saya (File Pantheon) yang dapat dieksekusi menunjukkan ikon perpustakaan bersama.
Apakah ada cara untuk menjalankan ini di Linux.
linux
executable
android
shared-library
elf
Suici Doga
sumber
sumber
file app_process
kembali?./app_process: symbolic link to 'app_process32'
file ./app_process32
dikatakan./app_process32: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), stripped
strace -f -e trace=open,read,stat ./app_process32
dan kirim hasilnya (mungkin lama)strace: exec: No such file or directory +++ exited with 1 +++
. File itu memang ada dancat
berfungsiJawaban:
Android dan Linux adalah dua sistem operasi yang berbeda . Anda tidak bisa hanya mengambil executable dari satu dan menjalankannya di sisi lain.
Rintangan pertama adalah kernel. Android dan Linux didasarkan pada kernel yang sama, tetapi mereka memiliki beberapa fitur berbeda. Secara khusus, Android menyediakan binder , yang hanya ada di kernel mainstream (yang ditemukan di distribusi Linux) sejak versi 3.19. Aplikasi kode asli murni mungkin tidak menggunakan binder tetapi sebagian besar aplikasi Java melakukannya.
Rintangan kedua adalah perpustakaan dinamis. Jika Anda memiliki executable yang terhubung secara dinamis, itu memanggil dynamic linker. Android dan Linux memiliki tautan dinamis yang berbeda, dan jika tautan dinamis tidak ada, Anda mendapatkan kesalahan yang sama seperti jika executable itu sendiri tidak ada .
Jika Anda menyalin tautan dinamis, dan file konfigurasi yang dibutuhkan, dan pustaka asli, maka Anda harus dapat menjalankan sebagian besar program asli. Anda harus menyalin sebagian besar
/system
, dan salinannya harus berada di/system
.Jika Anda ingin menjalankan aplikasi Java, ini lebih rumit. Anda memerlukan lingkungan runtime Java (Dalvik / ART), dan sebagian besar aplikasi memerlukan beberapa daemon Android juga (beberapa aplikasi kode asli juga memerlukan setan itu).
Hasilnya adalah bahwa sementara kedua sistem dapat hidup bersama pada satu kernel, ini perlu kernel yang cukup baru, atau kernel Android (kernel Android dapat menjalankan sebagian besar aplikasi Linux), dan kedua sistem operasi perlu diinstal - Anda tidak dapat menginstal jalankan saja satu aplikasi dari yang lain.
Saya tidak mengetahui adanya penginstal siap pakai untuk Android di atas Linux. Ada beberapa installer untuk sebaliknya, khususnya Linux pada Android .
Jika tujuannya adalah menjalankan aplikasi Android pada sistem Linux, maka cara termudah sejauh ini adalah menjalankannya di dalam emulator yang merupakan bagian dari alat pengembangan Android .
sumber
/system
dari Android x86 ISO3.19.0-59-generic
/lib/ld-linux.so.2 ./app_process32
memberi saya kesalahan segmentasi/lib/ld-linux.so/2
adalah penghubung dinamis Linux. Anda perlu menggunakan tautan dinamis Android. Pada ARM itu/system/bin/linker
, saya tidak tahu apakah x86 menggunakan nama yang sama.