Генерация Aidl терпит неудачу

Я пытался использовать 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.

У вас есть идеи, почему это не работает? Я прочитал множество статей об этом, и это казалось довольно простым и понятным.


person ErGo_404    schedule 09.04.2014    source источник
comment
Settings.aidl должен быть рядом с Settings.java в том же пакете. Ты можешь попробовать?   -  person Xavier Ducrohet    schedule 09.04.2014
comment
Settings.aidl находится в том же пакете в папке aidl/. Если я попытаюсь вставить в папку java/, сборка helpl завершится ошибкой, потому что не сможет найти импорт. Кроме того, исходный код класса Settings находится в предварительно созданном банке.   -  person ErGo_404    schedule 18.04.2014
comment
Обратите внимание, что я пробовал с фиктивной, гораздо более простой программой, в которой я определяю свой собственный объект, который можно разделить, и очень простой интерфейс помощи, и у меня точно такая же проблема.   -  person ErGo_404    schedule 18.04.2014


Ответы (1)


Я знаю, что отвечаю на это немного поздно, я столкнулся с той же проблемой, другие тоже могут. Поэтому я решил опубликовать решение, которое сработало для меня.

Мне пришлось переопределить свой класс, чтобы он реализовывал Parcelable, ссылка ниже содержит пример, которому я следовал. Как только все необходимые методы определены, мой код успешно скомпилирован.

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

Тайлер

person Tyler    schedule 25.06.2014
comment
это. сообщения об ошибках довольно ясны; ваш пользовательский класс не имеет статического CREATOR поля и не реализует Parcelable эти шаги необходимы для использования поверх AIDL. - person j__m; 10.08.2014