AIDL 后端是生成桩代码的目标。在使用 AIDL 文件时,您始终是采用特定语言在特定的运行时环境中使用这些文件。因此,您应该根据具体情况使用不同的 AIDL 后端。
AIDL 的后端如下所示:
后端
语言
API 表面
构建系统
Java
Java
SDK/SystemApi(稳定*)
全部
NDK
C++
libbinder_ndk(稳定*)
aidl_interface
CPP
C++
libbinder(不稳定)
全部
这些 API 表面是稳定的,但其中许多 API(例如用于服务管理的 API)已预留给内部平台使用,不适用于应用。如需详细了解如何在应用中使用 AIDL,请参阅开发者文档。
NDK 后端是 Android 10 中的新功能。
构建系统
根据不同的后端,可以采用两种不同的方式将 AIDL 编译成桩代码。如需获取有关构建系统的更详细文档,请查阅 Soong 模块参考文档。
核心构建系统
在任何 cc_ 或 java_ Android.bp 模块(或等效的 Android.mk 文件)中,可以将 .aidl 文件指定为源文件。在这种情况下使用的是 AIDL 的 Java/CPP 后端(而不是 NDK 后端),并且使用相应 AIDL 文件的类会自动添加到相应模块中。您可以在这些模块中的 aidl: 组下指定选项(例如 local_include_dirs,用于告知构建系统该模块中 AIDL 文件的根路径)。如需了解详情,请参阅 Soong 模块参考文档中有关构建系统的具体文档。
aidl_interface
请参阅稳定的 AIDL。此构建系统使用的类型必须是结构化类型,也就是直接以 AIDL 表示的类型。这意味着无法使用自定义 parcelable。
类型
您可将 aidl 编译器视为类型的参考实现。创建接口时,您可以通过调用 aidl --lang= ... 查看生成的接口文件。使用 aidl_interface 模块时,也可以在 out/soong/.intermediates// 中查看输出。
Java/AIDL 类型
C++ 类型
NDK 类型
boolean
bool
bool
byte
int8_t
int8_t
char
char16_t
char16_t
int
int32_t
int32_t
long
int64_t
int64_t
float
float
float
double
double
double
String
android::String16
std::string
android.os.Parcelable
android::Parcelable
无
IBinder
android::IBinder
ndk::SpAIBinder
T[]
std::vector
std::vector
byte[]
std::vector
std::ve