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 loại bỏ IPC. Với một giao diện (được chỉ định trong tệp .aidl), nhiều hệ thống xây dựng sử dụng tệp nhị phân aidl để tạo liên kết C++ hoặc Java để có thể sử dụng giao diện này trong các quy trình, bất kể thời gian chạy hay bit trong đó.

Bạn 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. Ví dụ: bạn có thể sử dụng AIDL để triển khai API SDK trong nền tảng, nhưng nền tảng API SDK không bao giờ trực tiếp chứa API AIDL. Để biết 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 tài liệu tương ứng dành cho nhà phát triển Android. Khi sử dụng AIDL 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ư APEX (bắt đầu từ Android 10) hoặc HAL (kể từ Android 11), bạn phải sử dụng hệ thống tạo phiên bản có tên là 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ý một giao diện và thực hiện lệnh gọi đến giao diện đó, còn quy trình ứ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à ứng dụng khách vừa là 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 bài viết Ngôn ngữ AIDL. Để biết thêm thông tin chi tiết về các môi trường thời gian chạy hiện có để sử dụng các giao diện này, hãy xem phần phụ trợ AIDL. Các nội dung khai báo kiểu này hoàn toàn giống với nội dung khai báo lớp trong một ngôn ngữ nhất định, nhưng hoạt động được trên 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 thực hiện lệnh gọi, 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 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. Sau khi luồng liên kết nhận được dữ liệu cho một giao dịch, luồng này sẽ tra cứu một đối tượng mã giả lập gốc trong quy trình cục bộ, đồng thời lớp này sẽ 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à 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, vì vậy, các lệnh gọi sẽ diễn ra 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