Tổng quan về AIDL

Ngôn ngữ định nghĩa giao diện Android (AIDL) là công cụ cho phép người dùng trừu tượng IPC. Cho trước một giao diện (được chỉ định trong .aidl tệp), nhiều hệ thống xây dựng khác nhau sử dụng tệp nhị phân aidl để tạo C++ hoặc Java liên kết để giao diện này có thể được sử dụng trên các quy trình, bất kể thời gian chạy hay một chút thông tin ở đó.

Có thể sử dụng AIDL giữa bất kỳ quy trình nào trong Android: giữa các thành phần của nền tảng hoặc giữa các ứng dụng. Tuy nhiên, API này không bao giờ được dùng làm API cho ứng dụng. AIDL có thể được sử dụng để triển khai một API SDK trong nền tảng, nhưng API SDK hiển thị không bao giờ trực tiếp chứa API AIDL. Để xem tài liệu về cách sử dụng AIDL trực tiếp giữa các ứng dụng, hãy xem Nhà phát triển Android . Khi AIDL được sử dụng giữa các thành phần của nền tảng được cập nhật riêng biệt, chẳng hạn như dưới dạng APEX (bắt đầu từ Android 10) hoặc HAL (bắt đầu từ Android 11), hệ thống tạo phiên bản được gọi là Bạn phải sử dụng AIDL ổn định.

Ví dụ

Dưới đây là ví dụ về giao diện AIDL:

    package my.package;

    import my.package.Baz; // defined elsewhere

    interface IFoo {
        void doFoo(Baz baz);
    }

Quy trình máy chủ sẽ đăng ký giao diện và phân phát cuộc gọi đến giao diện đó, còn ứng dụng sẽ thực hiện lệnh gọi đến các giao diện đó. Trong nhiều trường hợp, quy trình đóng vai trò vừa là một máy khách và máy chủ vì có thể đang tham chiếu đến nhiều giao diện. Để biết thêm thông tin chi tiết về ngôn ngữ AIDL, hãy xem Ngôn ngữ AIDL. Để biết thêm thông tin về thời gian chạy khác nhau có sẵn để sử dụng các giao diện này, hãy xem Phần phụ trợ AIDL. Loại giống hệt như khai báo lớp bằng một ngôn ngữ nhất định, nhưng xử lý nhiều quy trình.

Cách hoạt động

AIDL sử dụng trình điều khiển nhân liên kết để thực hiện lệnh gọi. Khi bạn gọi điện, mã nhận dạng phương thức và tất cả đối tượng được đóng gói vào một vùng đệm và sao chép vào một quy trình từ xa trong đó luồng liên kết chờ đọc dữ liệu. Khi một liên kết luồng nhận dữ liệu cho một giao dịch, luồng này sẽ tra cứu đối tượng mã giả lập gốc trong quy trình cục bộ, lớp này giải nén dữ liệu và thực hiện lệnh gọi trên đối tượng giao diện cục bộ. Đối tượng giao diện cục bộ này là đối tượng của một quy trình máy chủ tạo và đăng ký. Khi cuộc gọi được thực hiện trong cùng một quy trình và giống nhau phụ trợ, không có đối tượng proxy nào tồn tại và vì vậy các cuộc gọi sẽ diễn ra trực tiếp mà không cần bất kỳ đóng gói hoặc tháo dỡ.

Tương tác với các dịch vụ trên thiết bị

Android cung cấp một số lệnh để cho phép tương tác với các dịch vụ trên thiết bị. Hãy thử:

    adb shell dumpsys --help # listing and dumping services
    adb shell service --help # sending commands to services for testing