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 việc cập nhật thường xuyên đòi hỏi nỗ lực đáng kể. Trong Android 9 trở xuống, các tệp nhị phân tạo sẵn chỉ phụ thuộc vào thư viện hoặc ABI đã bị xoá 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 nội dung lỗi thời tệp nhị phân tạo sẵn. Trong Android 10, ABI dựa trên biểu tượng giới thiệu trình kiểm tra mức độ sử dụ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 xây dựng, để nhà phát triển thư viện dùng chung có thể biết thư viện tạo sẵn nào tệp nhị phân có thể bị hỏng do sự thay đổi của chúng và bạn phải chọn các tệp nhị phân tạo sẵn 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 nhị phâ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 kiến trúc ARM, AArch64, x86 hoặc x86-64, trình kiểm tra 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 mô-đun
tên của biến thể phù hợp (tức là core
so với vendor
) của biến thể được chia sẻ
thư viện.
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ừ
từng thư viện dùng chung 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 thông tin không khớp, thì lỗi
tin nhắn sẽ được phát.
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 định nghĩa trong một trong các phần phụ thuộc và ký hiệu đó
liên kết phải là GLOBAL
hoặc WEAK
. Nếu một biểu tượng không xác định không thể được
đã giải quyết thì 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 những mục 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ố phần tử không xác định không thể giải quyết biểu tượng, hãy chỉ định một trong các tham số 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
Trình kiểm tra này áp dụng cho mọi mô-đun tạo sẵn ELF trong quy trình xây dựng Android.
Để chạy riêng trình kiểm tra nhằm rút ngắn thời gian xử lý:
m check-elf-files
Trình sửa lỗi ABI
Trình khắc phục sự cố tự động có thể giúp giải quyết các lỗi kiểm tra ABI. Bạn 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 và trình sửa lỗi sẽ in các đề xuất
sửa thành stdout. Bạn có thể chạy trình khắc phục sự cố với tuỳ chọn --in-place
để
trực tiếp cập nhật Android.bp / Android.mk với bản sửa lỗi đề 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>