尝试编译Android repo中的AIDL文件以及我的Android项目,以使用一些内置接口。
但是,每当我进入内部类型时,我都会收到以下错误:
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
所有内部类型都会发生这种情况。我做错了什么?
其他事项:
unknown type
错误。答案 0 :(得分:1)
这些AIDL文件及其支持服务/类对公共API是隐藏的,这意味着它们对于所有Android版本都不稳定/一致。您将无法在代码中直接使用它们来访问系统的内置服务。您必须依靠反射才能访问其他隐藏类,以便随后可以访问系统提供的服务的底层绑定对象。不是便携式或简单的解决方案。如果您尝试在应用程序中重新创建系统服务,并且您的应用程序仅使用您的版本,那么将这些文件拖入您的应用程序是有意义的。
所有这一切,如果您尝试创建这些服务是您的应用程序的一部分,那么不仅仅需要AIDL。 AIDL定义服务实现的接口,然后为您生成一些Java样板代码。您看到的缺少的依赖项是因为那些不是其他服务接口,而是Parcelable
的类,允许它们作为参数传递或从绑定器IPC方法返回。例如,RadioManager.BandConfig
缺少的依赖项是RadioManager.java
中定义的内部类。你也需要在你的项目中使用这个类。