Я пытался использовать IPC для проекта с несколькими apk.
Один из них предоставляет сервису довольно много методов. Некоторые из этих методов принимают объекты Parcelable в качестве параметров (или возвращают их).
Первое, что я сделал, это создал файл помощи для моего сервиса.
Вот небольшая часть этого вспомогательного файла:
package com.test.myapp;
import com.test.mylib.Settings;
interface ISettingsService {
boolean getSettings(in com.test.mylib.Settings arg1);
}
Я использую Android Studio и gradle, поэтому я сохранил этот файл помощи в папке src/main/aidl/com/test/myapp/ моего модуля.
Поскольку объект Settings является Parcelable, в документации Android указано, что мне также нужно объявить для него файл помощи. Обратите внимание, что класс Settings находится в другом пакете, потому что он определен во включенной библиотеке jar, которую я не могу изменить.
Поэтому я создал файл src/main/aidl/com/test/myapp/Settings.aidl:
package com.test.mylib;
parcelable Settings;
Во время сборки компилятор должен открыть мои вспомогательные файлы и сгенерировать правильный объект-заглушку 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
в том же пакете. Ты можешь попробовать? - person Xavier Ducrohet   schedule 09.04.2014