Mengapa menggunakan kode armeabi-v7a di atas kode armeabi?

141

Dalam proyek saya saat ini, saya menggunakan beberapa file .so. Ini terletak di folder armeabi dan armeabi-v7a. Sayangnya salah satu file .so adalah 6MB dan saya perlu mengurangi ukuran file. Alih-alih memiliki file APK yang gemuk, saya hanya ingin menggunakan file armeabi dan menghapus folder armeabi-v7a.

Menurut dokumentasi NDK, kode armeabi-v7a adalah kode armeabi diperpanjang yang dapat berisi instruksi CPU tambahan. Ini semua melampaui keahlian saya, tetapi saya mempertanyakan mengapa orang ingin memiliki kode armeabi-v7a dan armeabi. Pasti ada alasan bagus untuk memiliki keduanya, bukan?

Pada perangkat pengujian saya ini semua tampaknya berfungsi dengan baik. Ini memiliki CPU ARM v7. Apakah aman untuk menganggap bahwa semuanya berfungsi sekarang?

PaulT
sumber
2
Anda mungkin ingin membaca blogpost ini sekarang. Ini menyeluruh dan terkini: androidbycode.wordpress.com/tag/armeabi-v7a
IgorGanapolsky
2
Dan sekarang dokter mengatakan:armeabi is deprecated in NDK r16. Removed in NDK r17. No hard float.
Amir Rezazadeh
1
Bagi yang datang kemudian, lihat di sini .
Amir Rezazadeh

Jawaban:

163

Tergantung pada apa kode asli Anda, tetapi v7a memiliki dukungan untuk operasi perangkat keras floating point, yang membuat perbedaan besar. armeabi akan bekerja dengan baik di semua perangkat, tetapi akan jauh lebih lambat, dan tidak akan memanfaatkan kemampuan CPU perangkat yang lebih baru. Jangan mengambil beberapa tolok ukur untuk aplikasi khusus Anda, tetapi menghapus binari armeabi-v7a umumnya bukan ide yang baik. Jika Anda perlu mengurangi ukuran, Anda mungkin ingin memiliki dua aplikasi terpisah untuk perangkat yang lebih lama (armeabi) dan yang lebih baru (armeabi-v7a).

Nikolay Elenkov
sumber
1
Di mana saya dapat menemukan perbedaan antara kedua ABI? Saya sangat mengerti perbedaan nyata ...
pembuat web
1
Ada ide tentang solusi elegan untuk mendapatkan Google Play agar Anda dapat mengunggah kedua APK yang berbeda ini? Tidak ada cara untuk membedakan dalam manifes bahwa mereka berbeda sehingga Google Play hanya ingin mengganti yang satu dengan yang lain (mereka memiliki kode versi yang berbeda)
Dean Wild
11
@DeanWild Google sekarang telah menambahkan dukungan untuk menargetkan berbagai arsitektur CPU di fitur APK beragam Play Store: developer.android.com/guide/google/play/publishing/…
Charles Harley
1
@IgorGanapolsky, terima kasih sudah menunjukkannya. Ini sekarang tautan yang benar: developer.android.com/google/play/publishing/…
Charles Harley
60

EABI = Antarmuka Biner Aplikasi Tertanam. Ini adalah spesifikasi yang harus dipatuhi oleh yang dapat dieksekusi untuk dieksekusi dalam lingkungan eksekusi tertentu. Ini juga menentukan berbagai aspek kompilasi dan keterkaitan yang diperlukan untuk interoperasi antara perkakas yang digunakan untuk Arsitektur ARM. Dalam konteks ini ketika kita berbicara tentang armeabi kita berbicara tentang arsitektur ARM dan OS GNU / Linux. Android mengikuti ARM GNU / Linux ABI little-endian.

aplikasi armeabi akan berjalan pada ARMv5 (mis. ARM9) dan ARMv6 (mis. ARM11). Anda dapat menggunakan perangkat keras Floating Point jika Anda membangun aplikasi menggunakan opsi GCC yang tepat seperti -mfpu = vfpv3 -mfloat-abi = softfp yang memberitahu kompiler untuk membuat instruksi floating point untuk perangkat keras VFP dan memungkinkan konvensi pemanggilan soft-float. armeabi tidak mendukung konvensi pemanggilan terapung (itu berarti register FP tidak digunakan untuk berisi argumen untuk suatu fungsi), tetapi operasi FP di HW masih didukung.

Aplikasi armeabi-v7a akan berjalan pada perangkat Cortex A # seperti Cortex A8, A9, dan A15. Ini mendukung prosesor multi-core dan mendukung -mfloat-abi = hard . Jadi, jika Anda membangun aplikasi menggunakan -mfloat-abi = hard , banyak panggilan fungsi Anda akan lebih cepat.

psihodelia
sumber
1
Menurut developer.android.com/ndk/guides/abis.html : The armeabi-v7a ABI uses the -mfloat-abi=softfp switch. Jadi apa yang Anda maksud dengan support -mfloat-abi = hard ?
IgorGanapolsky
8

Alih-alih memiliki file APK yang gemuk, saya hanya ingin menggunakan file armeabi dan menghapus folder armeabi-v7a.

Yang sebaliknya adalah strategi yang jauh lebih baik. Jika Anda harus minSdkVersion14 dan mengunggah apk ke play store, Anda akan melihat bahwa Anda akan mendukung jumlah perangkat yang sama baik Anda mendukung armeabiatau tidak. Oleh karena itu, tidak ada perangkat dengan Android 4 atau lebih tinggi yang akan mendapat manfaat armeabisama sekali.

Ini mungkin mengapa Android NDK bahkan tidak mendukung armeabilagi sesuai revisi r17b. [ sumber ]

Cristan
sumber