AIDL Client

마지막으로, 새로운 서비스를 위한 러스트 클라이언트를 만들 수 있습니다.

Finally, we can create a Rust client for our new service.

birthday_service/src/client.rs:

//! Birthday service. use com_example_birthdayservice::aidl::com::example::birthdayservice::IBirthdayService::IBirthdayService; use com_example_birthdayservice::binder; const SERVICE_IDENTIFIER: &str = "birthdayservice"; /// Connect to the BirthdayService. pub fn connect() -> Result<binder::Strong<dyn IBirthdayService>, binder::StatusCode> { binder::get_interface(SERVICE_IDENTIFIER) } /// Call the birthday service. fn main() -> Result<(), binder::Status> { let name = std::env::args() .nth(1) .unwrap_or_else(|| String::from("Bob")); let years = std::env::args() .nth(2) .and_then(|arg| arg.parse::<i32>().ok()) .unwrap_or(42); binder::ProcessState::start_thread_pool(); let service = connect().expect("Failed to connect to BirthdayService"); let msg = service.wishHappyBirthday(&name, years)?; println!("{msg}"); Ok(()) }

birthday_service/Android.bp:

rust_binary { name: "birthday_client", crate_name: "birthday_client", srcs: ["src/client.rs"], rustlibs: [ "com.example.birthdayservice-rust", "libbinder_rs", ], prefer_rlib: true, }

클라이언트는 libbirthdayservice에 의존하지 않습니다.

장치에서 빌드, 푸시, 실행합니다:

Notice that the client does not depend on libbirthdayservice.

Build, push, and run the client on your device:

$ m birthday_client $ adb push $ANDROID_PRODUCT_OUT/system/bin/birthday_client /data/local/tmp $ adb shell /data/local/tmp/birthday_client Charlie 60 Happy Birthday Charlie, congratulations with the 60 years!