Android AIDL NoClassDefFoundError

1

Я работаю над AIDL. Мой файл.aidl находится в другом проекте (другое приложение). Предположим, что имя файла helpl - IService.aidl. Но я получаю эту ошибку (показано ниже) по методу onServiceConnected (ComponentName componentName, IBinder iBinder) при назначении

IService service = IService.Stub.asInterface((IBinder)iBinder);

1. Что может быть проблемой?
2. Также как получить доступ к IService (helpl) другого проекта?

03-03 13:11:42.184: E/AndroidRuntime(2558): FATAL EXCEPTION: main
03-03 13:11:42.184: E/AndroidRuntime(2558): java.lang.NoClassDefFoundError: aexp.aidl.IService$Stub
03-03 13:11:42.184: E/AndroidRuntime(2558):     at com.test.aidlclient.AIDLClientDemoActivity$AdditionServiceConnection.onServiceConnected(AIDLClientDemoActivity.java:72)
03-03 13:11:42.184: E/AndroidRuntime(2558):     at android.app.ActivityThread$PackageInfo$ServiceDispatcher.doConnected(ActivityThread.java:1247)
03-03 13:11:42.184: E/AndroidRuntime(2558):     at android.app.ActivityThread$PackageInfo$ServiceDispatcher$RunConnection.run(ActivityThread.java:1264)
03-03 13:11:42.184: E/AndroidRuntime(2558):     at android.os.Handler.handleCallback(Handler.java:587)
03-03 13:11:42.184: E/AndroidRuntime(2558):     at android.os.Handler.dispatchMessage(Handler.java:92)
03-03 13:11:42.184: E/AndroidRuntime(2558):     at android.os.Looper.loop(Looper.java:123)
03-03 13:11:42.184: E/AndroidRuntime(2558):     at android.app.ActivityThread.main(ActivityThread.java:4627)
03-03 13:11:42.184: E/AndroidRuntime(2558):     at java.lang.reflect.Method.invokeNative(Native Method)
03-03 13:11:42.184: E/AndroidRuntime(2558):     at java.lang.reflect.Method.invoke(Method.java:521)
03-03 13:11:42.184: E/AndroidRuntime(2558):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
03-03 13:11:42.184: E/AndroidRuntime(2558):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
03-03 13:11:42.184: E/AndroidRuntime(2558):     at dalvik.system.NativeStart.main(Native Method)
Теги:
aidl

2 ответа

1
Лучший ответ

Вам нужно скопировать файл справки в ваш текущий проект. Затем вам нужно проверить, был ли создан класс java для этого файла helpl. Я думаю, что вы не указали файл aidl в своем текущем клиенте. Если это не поможет вам попробовать очистить проект клиента.

  • 0
    На самом деле я получил ответ через час после публикации этого вопроса. Я создал пакет в своем клиентском приложении с тем же именем, что и имя пакета файла .aidl в другом приложении, и скопировал в него файл .aidl. Сейчас работает нормально. Я получил помощь по ссылке . Спасибо, в любом случае :)
2

У RemoteInterface.aidl должно быть одинаковое имя пакета как в сервисе, так и в приложении, которое должно подключиться к службе - так что вопрос: где вы это положили??

Если вы развиваетесь в Eclipse, тогда у вас есть общая папка с исходным кодом (общая для обоих проектов). Создайте эту папку за пределами обоих проектов и в свойствах/источнике сборки, нажмите "Источник ссылок" и перейдите к местоположению общих источник. (Вы можете назвать это любое имя, которое вы хотите) Сделайте это в обоих проектах и поместите туда интерфейс. Он появится в обозревателе пакетов Project, и когда вы измените его в одном проекте, он также будет обновлен.

В общей исходной папке поместите файл interface.aidl в пакет с тем же именем, что и служба.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню