2011-08-16 24 views
120

Trong dự án hiện tại của tôi, tôi sử dụng nhiều tệp .so. Chúng được đặt tại thư mục armeabi và armeabi-v7a. Thật không may một trong những tập tin .so là 6MB và tôi cần phải giảm kích thước tập tin. Thay vì có một tập tin APK chất béo, tôi muốn sử dụng chỉ là các tập tin armeabi và loại bỏ các thư mục armeabi-v7a.Tại sao sử dụng mã armeabi-v7a trên mã armeabi?

Theo tài liệu NDK, mã armeabi-v7a là mã armeabi mở rộng có thể chứa thêm hướng dẫn CPU. Tất cả điều này vượt quá khả năng chuyên môn của tôi, nhưng tôi hỏi tại sao một người muốn có cả mã armeabi-v7a và armeabi. Phải có lý do chính đáng để có cả hai, đúng không?

Trên thiết bị thử nghiệm của tôi, tất cả điều này dường như hoạt động tốt. Chúng có CPU ARM v7. Có an toàn để giả định rằng mọi thứ hoạt động ngay bây giờ?

+1

Bạn có thể muốn cho blogpost này được đọc ngay bây giờ. Đó là toàn diện và cập nhật: https://androidbycode.wordpress.com/tag/armeabi-v7a/ –

Trả lời

139

Phụ thuộc vào mã nguồn gốc của bạn, nhưng v7a có hỗ trợ cho hoạt động điểm nổi phần cứng, điều này tạo nên sự khác biệt lớn. armeabi sẽ làm việc tốt trên tất cả các thiết bị, nhưng sẽ chậm hơn rất nhiều, và sẽ không tận dụng các khả năng CPU của các thiết bị mới hơn. Làm mất một số điểm chuẩn cho ứng dụng cụ thể của bạn, nhưng loại bỏ các nhị phân armeabi-v7a nói chung không phải là một ý tưởng tốt. Nếu bạn cần giảm kích thước, bạn có thể muốn có hai apks riêng biệt cho các thiết bị cũ hơn (armeabi) và mới hơn (armeabi-v7a).

+0

Cảm ơn bạn đã trả lời rõ ràng. Nó sẽ là một ý tưởng tốt để làm điểm chuẩn cũng như chia tách các ứng dụng trong 2 tập tin APK. Sau này thực sự là một ý tưởng rất tốt! Cảm ơn nhiều! – PaulT

+1

Tôi có thể tìm thấy sự khác biệt giữa ABI ở đâu? Tôi rất instersted để hiểu sự khác biệt thực sự ... – webshaker

+7

ARM hướng dẫn sử dụng? http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0344c/Cacciced.html –

55

EABI = Giao diện nhị phân ứng dụng nhúng. Đó là các đặc tả như vậy mà một tệp thực thi phải phù hợp để thực thi trong một môi trường thực thi cụ thể. Nó cũng xác định các khía cạnh khác nhau của việc biên dịch và liên kết cần thiết cho sự tương tác giữa các thanh công cụ được sử dụng cho Kiến trúc ARM. Trong ngữ cảnh này khi chúng ta nói về armeabi, chúng ta nói về kiến ​​trúc ARM và hệ điều hành GNU/Linux. Android tuân theo ARM GNU/Linux ABI nhỏ gọn.

ứng dụng armeabi sẽ chạy trên ARMv5 (ví dụ: ARM9) và ARMv6 (ví dụ: ARM11). Bạn có thể sử dụng phần cứng Floating Point nếu bạn xây dựng ứng dụng của mình bằng cách sử dụng các tùy chọn GCC thích hợp như -mfpu = vfpv3 -mfloat-abi = softfp cho trình biên dịch tạo hướng dẫn điểm nổi cho phần cứng VFP và cho phép các quy ước gọi điện. armeabi không hỗ trợ các quy ước gọi phao cứng (có nghĩa là các thanh ghi FP không được sử dụng để chứa đối số cho hàm), nhưng các hoạt động FP trong HW vẫn được hỗ trợ.

ứng dụng armeabi-v7a sẽ chạy trên Cortex A # thiết bị như Cortex A8, A9 và A15. Nó hỗ trợ bộ vi xử lý đa lõi và nó hỗ trợ -mfloat-abi = cứng. Vì vậy, nếu bạn xây dựng ứng dụng của mình bằng cách sử dụng -mfloat-abi = hard, nhiều cuộc gọi hàm của bạn sẽ nhanh hơn.

+0

Theo https://developer.android.com/ndk/guides/abis.html : 'Armeabi-v7a ABI sử dụng công tắc -mfloat-abi = softfp'. Vì vậy, bạn có ý nghĩa gì bởi ** hỗ trợ -mfloat-abi = hard **? –

Các vấn đề liên quan