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 に答える