Tổng quan về AIDL,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 hóa IPC. Với một giao diện (được chỉ định trong tệp .aidl ), các hệ thống xây dựng khác nhau sử dụng tệp nhị aidl để xây dựng các liên kết C++ hoặc Java để 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 hoặc độ bit ở đó.

AIDL có thể được sử dụng giữa bất kỳ quy trình nào trong Android: giữa các thành phần nền tảng hoặc giữa các ứng dụng. Tuy nhiên, nó không bao giờ được sử dụng làm API cho ứng dụng. Ví dụ: AIDL có thể được sử dụng để triển khai API SDK trong nền tảng, nhưng bề mặt API SDK không bao giờ chứa trực tiếp 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 dành cho nhà phát triển Android tương ứng. 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 (bắt đầu từ Android 10) hoặc HAL (bắt đầu từ Android 11), thì phải sử dụng hệ thống tạo phiên bản có tên là Stable AIDL .

Ví dụ

Đây là một ví dụ về giao diện AIDL:

    package my.package;

    import my.package.Baz; // defined elsewhere

    interface IFoo {
        void doFoo(Baz baz);
    }

Một quy trình máy chủ đăng ký một giao diện và phục vụ các cuộc gọi đến nó, còn một quy trình khách sẽ thực hiện các cuộc gọi đến các giao diện đó. Trong nhiều trường hợp, một quy trình hoạt động như cả máy khách và máy chủ vì nó có thể tham chiếu nhiều giao diện. Để biết thêm chi tiết về ngôn ngữ AIDL, hãy xem ngôn ngữ AIDL . Để biết thêm chi tiết về các thời gian chạy khác nhau có sẵn để sử dụng các giao diện này, hãy xem chương trình phụ trợ AIDL . Những khai báo kiểu này giống hệt như khai báo lớp trong một ngôn ngữ nhất định, nhưng chúng hoạt động xuyên suốt các quy trình.

Làm thế nào nó 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 cuộc gọi. Khi bạn thực hiện cuộc gọi, mã định danh phương thức và tất cả các đối tượng sẽ được đóng gói vào bộ đệm và được sao chép sang một quy trình từ xa nơi một luồng liên kết chờ để đọc dữ liệu. Khi một luồng liên kết nhận được dữ liệu cho một giao dịch, luồng đó sẽ tìm kiếm một đối tượng sơ khai gốc trong tiến trình cục bộ và lớp này sẽ giải nén dữ liệu và thực hiện lệnh gọi trên một đố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à quá trình máy chủ tạo và đăng ký. Khi các cuộc gọi được thực hiện trong cùng một quy trình và cùng một chương trình phụ trợ, không có đối tượng proxy nào tồn tại và do đó các cuộc 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 đi kèm với một số lệnh để cho phép tương tác với các dịch vụ trên thiết bị. Thử:

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