Saturday, July 20, 2019

Menjalankan Aplikasi Linux Secara Native di Android

Saya baru tahu kalo aplikasi native linux (ternyata) bisa langsung dijalankan di Android. Padahal, selama ini selalu kebingungan googling, misalnya "htop binary for android" ... atau aplikasi lainnya ditambah keyword for android.

Ternyata, caranya gampang. Tapi syaratnya, kita harus punya akses root ke si Android. Metode ini sangat cocok dipakai kalau kita ingin memaksimalkan fungsi STB Android. Selain untuk tontonan / entertainment, kita bisa jalankan fungsi-fungsi lain, termasuk sebagai web server, bot server, compiler, dan sebagainya.

Yang pertama harus diperhatikan tentu saja, arsitektur si Android. Kemungkinan besar, pilihannya 2 : arm 64 bit, dan arm 32 bit. Kalau arm 64 bit, kita gunakan resource dari OS linux (berbasis arm) yang 64bit, dan pilih OS linux berbasis arm 32bit kalau Android kita juga 32bit. Bisa dicari di website resmi debian/armbian. Pakai yang buat device apa saja terserah (asal sesuai 32bit/64bit-nya).

Berikutnya, kita harus bikin link, di system Android kita ke folder /usr dan /lib ... bisa saja kita ambilkan dari /system/ulib dan /system/uusr atau dari /cache/lib dan /cache/usr). Terserah saja, mana yang kira-kira lebih pas (space-nya cukup). Link ini penting, karena linux mencari library di dalam /lib atau /usr/lib ... dan aplikasi di /usr/bin ... Kita kumpulkan saja nanti semua native disitu, biar gampang manage-nya.

# mkdir /usr
# mkdir /lib
# mkdir /system/lusr
# mkdir /system/llib
# ln -s /system/lusr /usr
# ln -s /system/llib /lib
# mkdir /usr/bin
# mkdir /usr/lib


Salah satu folder utama linux, yang sayangnya juga dipakai oleh Android adalah /etc (di link ke /system/etc). Folder ini juga sangat banyak dipakai oleh linux. Beberapa aplikasi juga menggunakan /var ... cek apakah sudah dipakai oleh si Android. Kalau sudah, kita bikin saja link, misalnya /var/lib ke /data/var/lib atau /cache/var/lib ... dan beberapa /var/xxx lain sesuai kebutuhan.

# mkdir -p /data/arm64/var/lib
# mkdir -p /var/lib
# ln -s /data/arm64/var/lib /var/lib


OK ... langkah persiapan sudah cukup. Sekarang tahap yang agak rumit, yaitu mencari tau, library apa yang dipakai oleh si aplikasi native yang ingin kita copy. Kalau Anda bisa akses terminal linux / armbian aslinya, coba gunakan command : readelf -a nama_aplikasi | grep NEEDED. Nanti akan ada library apa saja yang dibutuhkan. Yang paling utama adalah library ld-linux ...

(Salah satu contoh kasus saya) Untuk armbian 64bit (aarch64 armv8), file ld-linux yang dibutuhkan adalah ld-linux-aarch64.so.1 ... sedangkan arm 32bit (armv7 dll), butuh ld-linux-armhf.so.3 atau ld-linux-arm.so.3 ... atau silakan periksa di folder /lib asli armbian-nya. File ld-linux-xxxxx ...

Copy file ld-linux tersebut ke Android, di folder /lib bikinan kita.
Setelah itu, copy file native / binary linux/armbian yang ingin kita coba jalankan di Android ke folder /usr/bin (biar ngumpul). Contohnya, kita akan copy htop. Tambah mode eksekusi untuk kedua file tersebut (chmod +x /lib/ld-linux-xxx dan /usr/bin/htop).

# cp /arm64/lib/ld-linux-aarch64.so.1 /lib
# cp /arm64/usr/bin/htop /usr/bin


Selanjutnya, jalankan file htop tadi. Jika beruntung, langsung bisa jalan ... tapi kemungkinan besar akan muncul error. Karena dia butuh banyak library. Cari library tsb di linux/armbian aslinya, lalu copy ke Android di folder /lib atau /usr/lib (tergantung lokasi aslinya di linux). Kalau aslinya dia ada di /lib copy juga ke /lib ... selain itu, copy saja ke /usr/lib.

Jalankan lagi htop, dan cek lagi error-nya. Begitu seterusnya, sampai semua file library yang dibutuhkan tercopy ke Android, dan htop bisa jalan dengan baik.

Saran saya, aplikasi/binary pertama yang perlu kita copy ke Android adalah readelf dan strace. Karena mereka akan sangat bermanfaat untuk proses copy binary-binary yang lain, terutama strace.

Dengan metode ini, semua aplikasi yang jalan di linux, Insya Allah akan jalan di Android (kecuali yang memang gak jalan, karena butuh struktur folder yang sangat specific dan lebih rumit).

Ada beberapa aplikasi yang butuh akses socket/internet, atau akses ke DNS resolv ... mereka perlu penanganan tambahan, yaitu penambahan user/group ke file /etc/passwd /etc/group, dan DNS resolv di /etc/resolv.conf ...

Selanjutnya ... kalau ingin menjalankan aplikasi2 tersebut pada saat proses booting Android, tinggal kita cari shell script yang dijalankan oleh si Android pada saat booting, lalu kita tambahkan script kita sendiri disitu. Proses booting bisa macem-macem, tergantung device Android yang kita pakai. Cari di /etc/rc.d atau script /init si Android.

Selamat mencoba,
Semoga bermanfaat.

No comments:

Post a Comment