1

我正在研究 AIDL。我的 .aidl 文件在另一个项目(另一个应用程序)中。假设aidl 文件名为IService.aidl但是我在分配 1 时在onServiceConnected(ComponentName componentName, IBinder iBinder)方法上收到此错误(如下所示)。

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

可能是什么问题?
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)
4

2 回答 2

2

RemoteInterface.aidl 需要在服务和需要连接到服务的应用程序中具有相同的包名称 - 所以问题是:你把它放在哪里!?

如果您在 Eclipse 中开发,那么诀窍是拥有一个公共源文件夹(两个项目共用)将此文件夹置于两个项目之外并在构建属性/源中,单击“链接源”并浏览到公共的位置来源。(你可以给它起任何你想要的名字)在两个项目中都这样做,然后把 interface.aidl 放在那里。它将出现在两个项目的包资源管理器中,当您在一个项目中更改它时,另一个项目也将得到更新。

在公共源文件夹中,将 interface.aidl 放入与服务同名的包中。

于 2012-03-03T10:42:46.307 回答
1

您必须将aidl 文件复制到您当前的项目中。然后你必须检查是否为这个aidl文件生成了java类。我认为您没有在当前客户端中包含aidl 文件。如果这不能帮助您尝试清理您的客户端项目。

于 2012-03-03T10:39:03.967 回答