Trình kiểm tra mức sử dụng ABI dựng sẵn

Thư viện chia sẻ của Android phát triển theo thời gian. Việc cập nhật các tệp nhị phân dựng sẵn đòi hỏi nỗ lực đáng kể. Trong Android 9 trở về trước, các tệp nhị phân dựng sẵn phụ thuộc vào các thư viện hoặc ABI đã xóa chỉ không liên kết được trong thời gian chạy. Các nhà phát triển phải theo dõi nhật ký để tìm các tệp nhị phân dựng 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 có thể phát hiện các tệp nhị phân dựng 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 tệp nhị phân dựng sẵn nào có thể bị hỏng do thay đổi của họ và tệp nhị phân dựng sẵn nào phải được xây dựng 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 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 ký hiệu không xác định có được giải quyết hay không.

Đầu tiên, trình kiểm tra sẽ kiểm tra kiến ​​trúc đích của tệp nhị phân dựng sẵn. Nếu tệp nhị phân dựng sẵn không nhắm mục tiêu kiến ​​trúc ARM, AArch64, x86 hoặc x86-64 thì trình kiểm tra sẽ bỏ qua tệp nhị phân dựng sẵn.

Thứ hai, các phần phụ thuộc của tệp nhị phân dựng 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 (ví dụ: core so với vendor ) của 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 DT_SONAME này với các mục nhập 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 giải quyết các ký hiệu không xác định trong tệp nhị phân dựng sẵn. Những ký hiệu không xác định đó phải được xác định ở một trong các phần phụ thuộc và ràng buộc ký hiệu phải là GLOBAL hoặc WEAK . Nếu không thể giải quyết được ký hiệu không xác định, 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 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 dựng 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 được , hãy chỉ định một trong các mục sau:

  • Android.bp: allow_undefined_symbols: true,
  • Android.mk: LOCAL_ALLOW_UNDEFINED_SYMBOLS := true

Để yêu cầu tệp nhị phân dựng sẵn bỏ qua việc kiểm tra tệp ELF, hãy chỉ định một trong các thao tác 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 bản dựng sẵn được tự động kiểm tra trong quá trình xây dựng của Android:

make