android - AIDL 找不到内部类

标签 android aidl

正在尝试编译在 Android repo 中找到的 AIDL 文件与我的 Android 项目一起使用一些内置接口(interface)。

但是,每当我访问内部类型时,我都会收到以下错误:

ITuner.aidl

aidl E 01-12 17:32:41 59280 1006000 type_namespace.cpp:129] In file ./app/src/main/aidl/android/hardware/radio/ITuner.aidl line 32 parameter config (argument 1):
aidl E 01-12 17:32:41 59280 1006000 type_namespace.cpp:129]     unknown type
aidl E 01-12 17:32:41 59280 1006000 type_namespace.cpp:107] In file ./app/src/main/aidl/android/hardware/radio/ITuner.aidl line 34 return type RadioManager.BandConfig:
aidl E 01-12 17:32:41 59280 1006000 type_namespace.cpp:107]     unknown type
aidl E 01-12 17:32:41 59280 1006000 type_namespace.cpp:107] In file ./app/src/main/aidl/android/hardware/radio/ITuner.aidl line 66 return type RadioManager.ProgramInfo:
aidl E 01-12 17:32:41 59280 1006000 type_namespace.cpp:107]     unknown type
aidl E 01-12 17:32:41 59280 1006000 type_namespace.cpp:107] In file ./app/src/main/aidl/android/hardware/radio/ITuner.aidl line 83 return type List<RadioManager.ProgramInfo>:
aidl E 01-12 17:32:41 59280 1006000 type_namespace.cpp:107]     unknown type

所有内部类型都会发生这种情况。我做错了什么?

其他:

  • 我以正确的目录结构复制了项目中的所有 AIDL 文件
  • 构建所有 AIDL 文件,但带有内部类的文件除外。内部类给出未知类型错误。
  • 我正在使用 API 27 平台目录中的 AIDL 可执行文件。

最佳答案

这些 AIDL 文件及其支持服务/类对公共(public) API 是隐藏的,这意味着它们对于所有版本的 Android 来说都不稳定/一致。您将无法在代码中直接使用它们来访问系统的内置服务。您必须依靠反射来访问其他隐藏类,然后才能访问系统提供的服务的底层 Binder 对象。不是可移植或简单的解决方案。如果您尝试在您的应用中重新创建系统服务并且您的应用将仅使用您的版本,那么将这些文件拉入您的应用将是有意义的。

综上所述,如果您尝试将这些服务创建为应用程序的一部分,则需要的不仅仅是 AIDL。 AIDL 定义了服务实现的接口(interface),它反过来会为您生成一些 Java 样板代码。您看到的缺失依赖项是因为那些不是其他服务接口(interface),而是 Parcelable 类,允许它们作为参数传递或从 binder IPC 方法返回。例如,RadioManager.BandConfig 缺少的依赖项是在 RadioManager.java 中定义的内部类。您的项目中也需要此类。

关于android - AIDL 找不到内部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48235071/

相关文章:

android - 短信 inbox_sent 访问中未定义 getContentResolver

android - 在 ARC 应用程序中获取 Google Chrome 版本

android - 如何从不同进程中的远程服务向 IPC 客户端发送数据

android - Android Studio 中的 Aidl 错误

android - WebView + Blob URL + 下载图片

java - 强制关闭!!用于分配 RGB 值 0-255 中的随机颜色的按钮

android - 在 Android SQLite 上使用扩展名 .db

android - 在绑定(bind)服务中访问远程服务方法

android - 未通知 SQLiteCursors,aidl 文件不存在

android - 从没有绑定(bind)的 Activity 中调用服务方法