我正在维护一个使用古老且不受支持的pcgod Mumble客户端库的项目。它包含此AIDL文件:
package org.pcgod.mumbleclient.service;
import org.pcgod.mumbleclient.service.model.User;
import org.pcgod.mumbleclient.service.model.Message;
import org.pcgod.mumbleclient.service.model.Channel;
interface IServiceObserver {
void onChannelAdded(in Channel channel);
void onChannelRemoved(in Channel channel);
void onChannelUpdated(in Channel channel);
void onCurrentChannelChanged();
void onCurrentUserUpdated();
void onUserAdded(in User user);
void onUserRemoved(in User user);
void onUserUpdated(in User user);
void onMessageReceived(in Message msg);
void onMessageSent(in Message msg);
/**
* Called when the connection state changes.
*/
void onConnectionStateChanged(int state);
}
使用SDK 19构建的项目很好。但升级到SDK 21后,它会忽略Message
导入并生成onMessageReceived(android.os.Message)
而不是onMessageReceived(org.pcgod.mumbleclient.service.model.Message)
。当然,这会破坏使用它的所有代码。我通过在方法规范中使用完全限定的类名来解决问题。
我对AIDL一无所知。这是SDK 21中的错误,还是AIDL文件一直出错而且SDK 21变得更严格了?
答案 0 :(得分:1)
根据我的经验,在AIDL界面中导入的任何自定义类都应该与界面本身存在于同一个包中。
至于它过去是如何运作的,我不确定,但如果您最近更新了Build Tools软件包,那么它现在可以出于某种原因对此要求强制执行或更加严格。< / p>
答案 1 :(得分:0)
检查构建路径并确保pcclod类位于顶部。
项目属性 java构建路径 订单和出口
直接限定对象时,可能会覆盖构建路径。