近期需要为App端封装一些接口,在service端收到了一包数据后,想通过AIDL传递至client,于是想到了AIDL的parcelable用法,本地代码实现的时候,出现了一个编译错误:

aidl E 05-29 20:53:03 19105 19105 aidl.cpp:581] refusing to generate code from aidl file defining parcelable

网上的说法是aidl文件和java文件的包名不一致导致的,于是修改了代码,确认了包名,但是依然无法编译过,我的代码如下:

// IEcoInfo.aidl
package com.test.car.aidl;
parcelable IEcoInfo;
// IEcoInfo.java
package com.test.car.aidl;

import android.os.Parcel;
import android.os.Parcelable;

public final class IEcoInfo implements Parcelable {
    private int mi_value;
    private float mf_value;
    private int mUnit;
    public int mIgStatus;
    public int mStatus;
    public String mTime;

    public IEcoInfo () {
        mi_value = 0;
        mf_value = 0.0f;
        mUnit = 0;
        mIgStatus = 0;
        mStatus = 0;
        mTime = "";
    }

    public IEcoInfo (Parcel in) {
        readFromParcel(in);
    }

    @Override
    public void writeToParcel(Parcel out, int flags) {
        out.writeInt(mi_value);
        out.writeFloat(mf_value);
        out.writeInt(mUnit);
        out.writeInt(mIgStatus);
        out.writeInt(mStatus);
        out.writeString(mTime);
    }

    public void readFromParcel(Parcel in) {
        mi_value = in.readInt();
        mf_value = in.readFloat();
        mUnit = in.readInt();
        mIgStatus = in.readInt();
        mStatus = in.readInt();
        mTime = in.readString();
    }

    @Override
    public int describeContents() {
        return 0;
    }

    // ...省略无关实现
}

这是一个很简单的结构,然后在调试编译的时候,尽量简单化的想去发现问题,查了几个小时无果。

问了一个同事才明白这个问题的真正原因,,,,,,,文件不能以"I"开头。。。。。

心中一万头草泥马奔腾而过。。。。。

记录此错,以防再犯,也给别人一个参考了。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐