Thư viện dùng chung Android phát triển tuỳ từng thời điểm. Lưu giữ tệp nhị phân tạo sẵn đổi mới nhất đòi hỏi nỗ lực đáng kể. Trong Android 9 trở xuống, tệp nhị phân tạo sẵn phụ thuộc vào các thư viện hoặc ABI đã bị xoá chỉ không liên kết được trong thời gian chạy. Nhà phát triển phải theo dõi nhật ký để tìm các tệp nhị phân tạo sẵn đã lỗi thời. Trong Android 10, trình kiểm tra mức sử dụng ABI dựa trên biểu tượng được giới thiệu. Trình kiểm tra này có thể phát hiện các tệp nhị phân tạo sẵn đã lỗi thời tại thời điểm xây dựng, nhờ vậy, những tệp nhị phân đó được chia sẻ nhà phát triển thư viện có thể biết được tệp nhị phân tạo sẵn nào có thể bị hỏng bằng thay đổi và phải tạo lại tệp nhị phân tạo sẵn.
Trình kiểm tra mức sử dụng ABI dựa trên biểu tượng
Trình kiểm tra mức sử dụng ABI dựa trên biểu tượng mô phỏng trình liên kết động của Android trên máy chủ lưu trữ. Trình kiểm tra liên kết tệp nhị phân tạo sẵn với các phần phụ thuộc của tệp nhị phân tạo sẵn và kiểm tra xem tất cả các ký hiệu không xác định đã được giải quyết hay chưa.
Trước tiên, trình kiểm tra sẽ kiểm tra kiến trúc mục tiêu của tệp nhị phân được tạo sẵn. Nếu tệp nhị phân tạo sẵn không nhắm đến ARM, AArch64, x86 hoặc x86-64 trình kiểm tra bỏ qua tệp nhị phân được tạo sẵn.
Thứ hai, các phần phụ thuộc của tệp nhị phân tạo sẵn phải được liệt kê trong
LOCAL_SHARED_LIBRARIES
hoặc shared_libs
. Bản dựng
hệ thống phân giải tên mô-đun thành biến thể phù hợp (ví dụ:
core
đấu với vendor
) trong số thư viện dùng chung.
Thứ ba, trình kiểm tra so sánh các mục nhập DT_NEEDED
với
LOCAL_SHARED_LIBRARIES
hoặc shared_libs
. Cụ thể,
trình kiểm tra trích xuất mục nhập DT_SONAME
từ mỗi mục được chia sẻ
và so sánh DT_SONAME
này với
DT_NEEDED
mục nhập được ghi lại trong tệp nhị phân tạo sẵn. Nếu có
không khớp, một thông báo lỗi sẽ được đưa ra.
Thứ tư, trình kiểm tra phân giải các ký hiệu không xác định trong tệp nhị phân tạo sẵn.
Những ký hiệu không xác định đó phải được xác định tại một trong các phần phụ thuộc và
liên kết biểu tượng phải là GLOBAL
hoặc WEAK
. Nếu một
không thể giải quyết biểu tượng không xác định, một thông báo lỗi sẽ xuất hiện.
Thuộc tính mô-đun tạo sẵn
Bạn phải chỉ định các phần phụ thuộc của tệp nhị phân tạo sẵn ở một trong sau:
- Android.bp:
shared_libs: ["libc", "libdl", "libm"],
- Android.mk:
LOCAL_SHARED_LIBRARIES := libc libdl libm
Nếu tệp nhị phân tạo sẵn được thiết kế để có một số ký hiệu không xác định không thể giải quyết, hãy chỉ định một trong các thông tin sau:
- Android.bp:
allow_undefined_symbols: true,
- Android.mk:
LOCAL_ALLOW_UNDEFINED_SYMBOLS := true
Để tệp nhị phân được tạo sẵn bỏ qua bước kiểm tra tệp ELF, hãy chỉ định một trong sau:
- Android.bp:
check_elf_files: false,
- Android.mk:
LOCAL_CHECK_ELF_FILES := false
Chạy trình kiểm tra
Để chạy trình kiểm tra, hãy đặt biến môi trường
CHECK_ELF_FILES
đến true
và chạy
make check-elf-files
:
CHECK_ELF_FILES=true make check-elf-files
Để bật trình kiểm tra theo mặc định, hãy thêm PRODUCT_CHECK_ELF_FILES
đến BoardConfig.mk
:
PRODUCT_CHECK_ELF_FILES := true
Các thành phần dựng sẵn sẽ tự động được kiểm tra trong quá trình xây dựng Android:
make