Aidl生成失败

时间:2014-04-09 09:25:46

标签: android ipc android-gradle aidl

我一直在尝试将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。

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

1 个答案:

答案 0 :(得分:2)

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

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

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

泰勒