Надсилання об’єктів
AIDL-об’єкти можна надсилати або як конкретний тип AIDL, або як інтерфейс IBinder зі стертим типом:
birthday_service/aidl/com/example/birthdayservice/IBirthdayInfoProvider.aidl:
package com.example.birthdayservice;
interface IBirthdayInfoProvider {
    String name();
    int years();
}
birthday_service/aidl/com/example/birthdayservice/IBirthdayService.aidl:
import com.example.birthdayservice.IBirthdayInfoProvider;
interface IBirthdayService {
    /** Те саме, але з використанням об'єкта-зв'язки. */
    String wishWithProvider(IBirthdayInfoProvider provider);
    /** Те саме, але з використанням `IBinder`. */
    String wishWithErasedProvider(IBinder provider);
}
birthday_service/src/client.rs:
/// Rust структурна структура, що реалізує інтерфейс `IBirthdayInfoProvider`.
struct InfoProvider {
    name: String,
    age: u8,
}
impl binder::Interface for InfoProvider {}
impl IBirthdayInfoProvider for InfoProvider {
    fn name(&self) -> binder::Result<String> {
        Ok(self.name.clone())
    }
    fn years(&self) -> binder::Result<i32> {
        Ok(self.age as i32)
    }
}
fn main() {
    binder::ProcessState::start_thread_pool();
    let service = connect().expect("Не вдалося підключитися до BirthdayService");
    // Створюємо об'єкт-зв'язувач для інтерфейсу `IBirthdayInfoProvider`.
    let provider = BnBirthdayInfoProvider::new_binder(
        InfoProvider { name: name.clone(), age: years as u8 },
        BinderFeatures::default(),
    );
    // Надсилаємо об'єкт-зв'язку до сервісу.
    service.wishWithProvider(&provider)?;
    // Виконуємо ту саму операцію, але передаємо провайдера як `SpIBinder`.
    service.wishWithErasedProvider(&provider.as_binder())?;
}
- Зверніть увагу на використання 
BnBirthdayInfoProvider. Він слугує тій самій меті, що йBnBirthdayService, який ми бачили раніше.