- 作为 Binder 中的 parcelable 跨进程通信数据传输的数据结构
很容易从名字上区分这两种类型的文件,IInterface 类型的文件都是以 I 开头的,比如:ICameraService.aidl, ICameraDeviceUser.aidl等。不管是哪种类型的 aidl 文件,它们都会天生对应的 .java, .h, .cpp 文件,分别供 Java 层和 CPP 层调用。
四、 IInterface 类型文件
<hr> IInterface 类型文件一共有 7 个,它们的 .java, .h, .cpp 文件,绝大部门都是自动天生的。
Java 文件是在 frameworks/base/Android.mk 中定义规则,在编译时自动天生:
//frameworks/base/Android.mk
LOCAL_SRC_FILES +=
…
…/av/camera/aidl/android/hardware/ICameraService.aidl
…/av/camera/aidl/android/hardware/ICameraServiceListener.aidl
…/av/camera/aidl/android/hardware/ICameraServiceProxy.aidl
…/av/camera/aidl/android/hardware/ICamera.aidl
…/av/camera/aidl/android/hardware/ICameraClient.aidl
…/av/camera/aidl/android/hardware/camera2/ICameraDeviceUser.aidl
…/av/camera/aidl/android/hardware/camera2/ICameraDeviceCallbacks.aidl
…
…
在 out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/dotdot/ 目录下天生对应的 Java 文件:
//out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/dotdot/
av/camera/aidl/android/hardware/ICameraService.java
av/camera/aidl/android/hardware/ICameraServiceListener.java
av/camera/aidl/android/hardware/ICameraServiceProxy.java
av/camera/aidl/android/hardware/ICamera.java
av/camera/aidl/android/hardware/ICameraClient.java
av/camera/aidl/android/hardware/camera2/ICameraDeviceUser.java
av/camera/aidl/android/hardware/camera2/ICameraDeviceCallbacks.java
.h, .cpp 文件中,ICamera.aidl, ICameraClient.aidl 两个文件是直接以代码形式手动实现的:
// 1. ICameraClient.aidl
frameworks/av/camera/aidl/android/hardware/ICameraClient.aidl
frameworks/av/camera/include/camera/android/hardware/ICameraClient.h
frameworks/av/camera/ICameraClient.cpp
// 2.ICamera.aidl
frameworks/av/camera/aidl/android/hardware/ICamera.aidl
frameworks/av/camera/include/camera/android/hardware/ICamera.h
frameworks/av/camera/ICamera.cpp
其他 5 个 aidl 文件是在 frameworks/av/camera/Android.bp 中定义规则,编译时自动天生对应的 .h, .cpp 文件:
//frameworks/av/camera/Android.bp
cc_library_shared {
name: “libcamera_client”,
aidl: {
export_aidl_headers: true,
local_include_dirs: [“aidl”],
include_dirs: [
“frameworks/native/aidl/gui”,
],
},
srcs: [
// AIDL files for camerainterfaces
// The headers for theseinterfaces will be
// available to anymodules that
// include libcamera_client,at the path “aidl/package/path/BnFoo.h”
“aidl/android/hardware/ICameraService.aidl”,
“aidl/android/hardware/ICameraServiceListener.aidl”,
“aidl/android/hardware/ICameraServiceProxy.aidl”,
“aidl/android/hardware/camera2/ICameraDeviceCallbacks.aidl”,
“aidl/android/hardware/camera2/ICameraDeviceUser.aidl”,
// Source for camerainterface parcelables,
// and manually-writteninterfaces
“Camera.cpp”,
“CameraMetadata.cpp”,
“CameraParameters.cpp”,
…
}
在 out/soong/.intermediates/frameworks/av/camera/libcamera_client/ 目录下天生对应的 .h, .cpp 文件,通常在该目录下会同时天生 32 和 64 位两套代码,但实际两份代码是一样的,这里选取 64 位的:
- 64 位:android_arm64_armv8-a_shared_core
- 32 位:android_arm_armv7-a-neon_cortex-a53_shared_core
// 目录__out/soong/.intermediates/frameworks/av/camera/libcamera_client_// 64_ 位 android_arm64_armv8-a_shared_core/gen/aidl/
android/hardware/ICameraService.h
android/hardware/BnCameraService.h
frameworks/av/camera/aidl/
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |