gpt4 book ai didi

android - AIDL 找不到内部类

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:10:26 31 4
gpt4 key购买 nike

正在尝试编译在 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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com