Android AIDL NoClassDefFoundError - PullRequest
       6

Android AIDL NoClassDefFoundError

1 голос
/ 03 марта 2012

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

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

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

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)

Ответы [ 2 ]

2 голосов
/ 03 марта 2012

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

Если выПри разработке в Eclipse трюк состоит в том, чтобы иметь общую исходную папку (общую для обоих проектов). Сделайте эту папку вне обоих проектов и в свойствах / источнике сборки, нажмите «ссылка на источник» и найдите местоположение общего источника.(Вы можете назвать его любым именем). Сделайте это в обоих проектах и ​​поместите туда interface.aidl.Он появится в проводнике пакетов обоих проектов, и при изменении его в одном проекте обновится и другой.

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

1 голос
/ 03 марта 2012

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

...