Tổng quan về AIDL

Ngôn ngữ định nghĩa giao diện Android (AIDL) là một công cụ cho phép người dùng trừu tượng hoá 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 nền tảng được cập nhật riêng biệt, chẳng hạn như APEX (kể từ Android 10) hoặc HAL (kể từ Android 11), bạn phải sử dụng hệ thống phiên bản có tên là AIDL ổn định.

Ví dụ

Sau đâ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ủ đăng ký một giao diện và phân phát lệnh gọi đến giao diện đó, còn quy trình ứng dụng thực hiện lệnh gọi đến các giao diện đó. Trong nhiều trường hợp, một quy trình đóng vai trò là cả máy khách và máy chủ vì quy trình đó có thể 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 phần 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 hạt nhân liên kết để thực hiện lệnh gọi. Khi bạn thực hiện lệnh gọi, một giá trị nhận dạng phương thức và tất cả các đối tượng sẽ đượ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 sẽ 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 mà một quy trình máy chủ tạo và đăng ký. Khi các lệnh gọi được thực hiện trong cùng một quy trình và cùng một phần phụ trợ, sẽ không có đối tượng proxy nào tồn tại, do đó, các lệnh gọi sẽ trực tiếp mà không cần đóng gói hoặc giải nén.

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