AIDL没有找到内部类

时间:2018-01-12 22:48:00

标签: android aidl

尝试编译Android repo中的AIDL文件以及我的Android项目,以使用一些内置接口。

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

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文件都会构建。内部类会导致unknown type错误。
  • 我在API 27平台目录中使用AIDL可执行文件。

1 个答案:

答案 0 :(得分:1)

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

所有这一切,如果您尝试创建这些服务是您的应用程序的一部分,那么不仅仅需要AIDL。 AIDL定义服务实现的接口,然后为您生成一些Java样板代码。您看到的缺少的依赖项是因为那些不是其他服务接口,而是Parcelable的类,允许它们作为参数传递或从绑定器IPC方法返回。例如,RadioManager.BandConfig缺少的依赖项是RadioManager.java中定义的内部类。你也需要在你的项目中使用这个类。