Thư viện dùng chung của Android sẽ phát triển theo thời gian. Việc cập nhật các tệp nhị phân được tạo sẵn đòi hỏi nhiều công sức. Trong Android 9 trở về trước, các tệp nhị phân tạo sẵn phụ thuộc vào các thư viện hoặc ABI đã bị xoá sẽ 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 được tạo sẵn đã lỗi thời. Trong Android 10, một trình kiểm tra việc sử dụng ABI dựa trên biểu tượng sẽ được ra mắt. 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 xây dựng, để 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ị hỏng do thay đổi 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 việ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 dựng sẵn với các phần phụ thuộc của tệp nhị phân dựng sẵn và kiểm tra xem tất cả các biểu tượng 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 được tạo sẵn. Nếu tệp nhị phân được 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 được tạo sẵn.
Thứ hai, các phần phụ thuộc của tệp nhị phân được 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 sẽ 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 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 DT_NEEDED
được ghi trong tệp nhị phân dựng sẵn. Nếu có sự không khớp, một thông báo lỗi sẽ được phát ra.
Thứ tư, trình kiểm tra sẽ phân giải các biểu tượng không xác định trong tệp nhị phân được tạo sẵn. Những biểu tượng chưa xác định đó phải được xác định trong 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 không thể phân giải một biểu tượng không xác định, thì một thông báo lỗi sẽ được phát ra.
Thuộc tính mô-đun dựng sẵn
Các phần phụ thuộc của tệp nhị phân dựng sẵn phải được chỉ định trong một trong những phần sau:
- Android.bp:
shared_libs: ["libc", "libdl", "libm"],
- Android.mk:
LOCAL_SHARED_LIBRARIES := libc libdl libm
Nếu tệp nhị phân được tạo sẵn được thiết kế để có một số biểu tượng không xác định không thể phân giải, hãy chỉ định một trong những biểu tượng 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 những nội dung sau:
- Android.bp:
check_elf_files: false,
- Android.mk:
LOCAL_CHECK_ELF_FILES := false
Chạy trình kiểm tra
Trình kiểm tra này bao gồm tất cả các mô-đun ELF được tạo sẵn trong quá trình tạo Android.
Để chạy trình kiểm tra riêng nhằm rút ngắn thời gian xử lý:
m check-elf-files
Công cụ sửa lỗi ABI
Công cụ sửa lỗi tự động có thể giúp giải quyết các lỗi kiểm tra ABI. Chỉ cần chạy trình sửa lỗi với Android.bp / Android.mk làm dữ liệu đầu vào, trình sửa lỗi sẽ in bản sửa lỗi được đề xuất vào stdout. Nếu muốn, hãy chạy trình sửa lỗi bằng lựa chọn --in-place
để cập nhật trực tiếp Android.bp / Android.mk bằng bản sửa lỗi được đề xuất.
Đối với Android.bp,
m fix_android_bp_prebuilt
# Print the fixed Android.bp to stdout.
fix_android_bp_prebuilt <path-to-Android.bp>
# Update the Android.bp in place.
fix_android_bp_prebuilt --in-place <path-to-Android.bp>
Đối với Android.mk,
m fix_android_mk_prebuilt
# Print the fixed Android.mk to stdout.
fix_android_mk_prebuilt <path-to-Android.mk>
# Update the Android.mk in place.
fix_android_mk_prebuilt --in-place <path-to-Android.mk>