作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
正在尝试编译在 Android repo 中找到的 AIDL 文件与我的 Android 项目一起使用一些内置接口(interface)。
但是,每当我访问内部类型时,我都会收到以下错误:
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 文件及其支持服务/类对公共(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/
我是一名优秀的程序员,十分优秀!