近期需要爲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"開頭。。。。。
心中一萬頭草泥馬奔騰而過。。。。。
記錄此錯,以防再犯,也給別人一個參考了。