【问题标题】:Aidl generation fails辅助生成失败
【发布时间】:2014-04-09 09:25:46
【问题描述】:

我一直在尝试将 IPC 用于多 apk 项目。

其中一个公开了一个带有很多方法的服务。其中一些方法将 Parcelable 对象作为参数(或返回它们)。

我做的第一件事是为我的服务创建一个aidl文件。

这是这个aidl文件的一小部分:

package com.test.myapp;    
import com.test.mylib.Settings;

interface ISettingsService {
  boolean getSettings(in com.test.mylib.Settings arg1);
}

我使用 Android Studio 和 gradle,所以我将这个aidl 文件保存在我的模块的 src/main/aidl/com/test/myapp/ 文件夹中。

由于 Settings 对象是 Parcelable,Android 文档指出我还必须为其声明一个aidl 文件。请注意,Settings 类位于另一个包中,因为它是在包含的 jar 库中定义的,我无法修改。

所以我创建了 src/main/aidl/com/test/myapp/Settings.aidl 文件:

package com.test.mylib;

parcelable Settings;

在构建时,编译器应该打开我的aidl 文件并生成我可以实现的适当的 ISettingsService 存根对象。问题是编译器给了我这个错误:

error: cannot find symbol
_arg0 = com.test.mylib.Settings.CREATOR.createFromParcel(data);
                                      ^
symbol:   variable CREATOR
location: class Settings
/.../myapp/build/source/aidl/debug/com/test/myapp/ISettingsService.java:89: error: cannot find symbol
arg1.writeToParcel(_data, 0);
^
symbol:   method writeToParcel(Parcel,int)
location: variable arg1 of type Settings
2 errors
:myapp:compileDebugJava FAILED

通过阅读错误,我认为编译器没有理解 Settings 类是 Parcelable。

您知道为什么它不起作用吗?我阅读了很多关于这方面的文章,看起来很清楚也很容易做到。

【问题讨论】:

  • Settings.aidl 应该在同一包中的 Settings.java 旁边。可以试试吗?
  • Settings.aidl 位于aidl/ 文件夹中的同一包中。如果我尝试放入 java/ 文件夹,aidl 构建将失败,因为它找不到导入。此外,Settings 类的源代码位于预构建的 jar 中。
  • 请注意,我尝试了一个虚拟的、更简单的程序,在该程序中我定义了自己的可打包对象和一个非常简单的aidl 接口,但我遇到了完全相同的问题。

标签: android ipc android-gradle-plugin aidl


【解决方案1】:

我知道我回复这个有点晚了,我遇到了同样的问题,其他人也可能这样。所以我决定发布对我有用的解决方案。

我必须重新定义我的类以实现 Parcelable,下面的链接包含我遵循的示例。一旦定义了所有必需的方法,我的代码就成功编译了。

http://developer.android.com/reference/android/os/Parcelable.html

泰勒

【讨论】:

  • 这个。错误信息非常清楚;您的自定义类没有静态 CREATOR 字段,也没有实现 Parcelable 这些步骤是通过 AIDL 使用所必需的。
猜你喜欢
  • 1970-01-01
  • 2014-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多