Я работаю над 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)
Вам нужно скопировать файл справки в ваш текущий проект. Затем вам нужно проверить, был ли создан класс java для этого файла helpl. Я думаю, что вы не указали файл aidl в своем текущем клиенте. Если это не поможет вам попробовать очистить проект клиента.
У RemoteInterface.aidl должно быть одинаковое имя пакета как в сервисе, так и в приложении, которое должно подключиться к службе - так что вопрос: где вы это положили??
Если вы развиваетесь в Eclipse, тогда у вас есть общая папка с исходным кодом (общая для обоих проектов). Создайте эту папку за пределами обоих проектов и в свойствах/источнике сборки, нажмите "Источник ссылок" и перейдите к местоположению общих источник. (Вы можете назвать это любое имя, которое вы хотите) Сделайте это в обоих проектах и поместите туда интерфейс. Он появится в обозревателе пакетов Project, и когда вы измените его в одном проекте, он также будет обновлен.
В общей исходной папке поместите файл interface.aidl в пакет с тем же именем, что и служба.