Thư viện dùng chung của Android không ngừng phát triển. Việc cập nhật tệp nhị phân tạo sẵn đòi hỏi nhiều nỗ lực. Trong Android 9 trở xuống, các tệp nhị phân tạo sẵn phụ thuộc vào các thư viện hoặc ABI đã 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, chúng tôi đã ra mắt một trình kiểm tra mức sử dụng ABI dựa trên biểu tượng. Trình kiểm tra 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 tạo bản dựng, nhờ đó, các nhà phát triển thư viện dùng chung có thể biết những tệp nhị phân tạo sẵn nào có thể bị lỗi do thay đổi của họ và những tệp nhị phân tạo sẵn nào phải được tạo lại.
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 Android trên máy chủ. 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 chưa xác định có được phân giải hay không.
Trước tiên, trình kiểm tra sẽ kiểm tra cấu trúc đích của tệp nhị phân tạo sẵn. Nếu tệp nhị phân tạo sẵn không nhắm đến cấu trúc ARM, AArch64, x86 hoặc x86-64, thì trình kiểm tra sẽ bỏ qua tệp nhị phân 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
. Hệ thống xây dựng phân giải tên mô-đun thành biến thể phù hợp (tức là core
so với vendor
) của các thư viện dùng chung.
Thứ ba, trình kiểm tra so sánh các mục DT_NEEDED
với
LOCAL_SHARED_LIBRARIES
hoặc shared_libs
. Cụ thể, trình kiểm tra sẽ trích xuất mục nhập DT_SONAME
từ mỗi thư viện dùng chung và so sánh các DT_SONAME
này với các mục nhập DT_NEEDED
được ghi lại trong tệp nhị phân tạo sẵn. Nếu có sự không khớp, hệ thống sẽ phát ra thông báo lỗi.
Thứ tư, trình kiểm tra sẽ phân giải các biểu tượng chưa xác định trong tệp nhị phân tạo sẵn.
Bạn phải xác định các ký hiệu chưa xác định đó trong một trong các phần phụ thuộc và liên kết ký hiệu phải là GLOBAL
hoặc WEAK
. Nếu không thể phân giải một biểu tượng chưa xác định, hệ thống sẽ phát ra thông báo lỗi.
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 theo một trong các cách 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ố kiểu không xác định không thể phân giải, hãy chỉ định một trong những cách sau:
- Android.bp:
allow_undefined_symbols: true,
- Android.mk:
LOCAL_ALLOW_UNDEFINED_SYMBOLS := true
Để tệp nhị phân tạo sẵn bỏ qua bước kiểm tra tệp ELF, hãy chỉ định một trong các tuỳ chọn 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
thành 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
vào BoardConfig.mk
:
PRODUCT_CHECK_ELF_FILES := true
Các tệp tạo sẵn được tự động kiểm tra trong quá trình tạo bản dựng Android:
make