Android SDK 21忽略了AIDL中的导入?

时间:2014-10-22 17:26:49

标签: android aidl

我正在维护一个使用古老且不受支持的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变得更严格了?

2 个答案:

答案 0 :(得分:1)

根据我的经验,在AIDL界面中导入的任何自定义类都应该与界面本身存在于同一个包中。

至于它过去是如何运作的,我不确定,但如果您最近更新了Build Tools软件包,那么它现在可以出于某种原因对此要求强制执行或更加严格。< / p>

答案 1 :(得分:0)

检查构建路径并确保pcclod类位于顶部。

项目属性 java构建路径 订单和出口

直接限定对象时,可能会覆盖构建路径。