我一直在尝试将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。
你知道为什么它不起作用吗?我阅读了很多关于这方面的文章,看起来很清楚也很容易。
答案 0 :(得分:2)
我知道我回复的时间有点晚了,我遇到了同样的问题,其他人也可能。所以我决定发布对我有用的决议。
我必须重新定义我的类以便它实现Parcelable,下面的链接包含我遵循的示例。一旦定义了所有必需的方法,我的代码就会成功编译。
http://developer.android.com/reference/android/os/Parcelable.html
泰勒