Android\Sdk\build-tools\28.0.2\aidl.exe'' finished with non-zero exit value 1(或者27.0.3等)关于AIDL初学的坑

本文是参照《Android开发艺术探索》

一、.建实体类Book

1.新建一个文件夹aidl(名字自己决定其他也行),注意:实体类的包名和aidl文件包名一定要相同,直接新建aidl文件Android Studio会生成一个包名和主目录相同的文件,直接看图

2.比如我要新建一个名为IBookManager的aidl文件,直接新建的会生成没有绿色部分(后来可以自己修改)的样子,我是直接新建没有修改包名猜出错的(可以直接新建,然后修改包名)

3.Book实体类(没什么东西,Parcelable 可以用插件生成

public class Book implements Parcelable {
    private int bookId;
    private String bookName;

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

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(this.bookId);
        dest.writeString(this.bookName);
    }

    public Book() {
    }

    public Book(int bookId, String bookName) {
        this.bookId = bookId;
        this.bookName = bookName;
    }

    protected Book(Parcel in) {
        this.bookId = in.readInt();
        this.bookName = in.readString();
    }

    public static final Parcelable.Creator<Book> CREATOR = new Parcelable.Creator<Book>() {
        @Override
        public Book createFromParcel(Parcel source) {
            return new Book(source);
        }

        @Override
        public Book[] newArray(int size) {
            return new Book[size];
        }
    };

    @Override
    public String toString() {
        return "Book{" +
                "bookId=" + bookId +
                ", bookName='" + bookName + '\'' +
                '}';
    }
}

二、建一个和实体类同名的aidl(为了能够让真正的aidl文件能够导入实体类Book)

// Book.aidl
package com.example.administrator.myapplication.aidl;
parcelable Book;

注意一下包名应该和截图部分一样

三、建真正的aidl文件IBookManager

// IBookManager.aidl
package com.example.administrator.myapplication.aidl;

// Declare any non-default types here with import statements
import com.example.administrator.myapplication.aidl.Book;
interface IBookManager {

    List<Book> getBookList();
    void addBook(in Book book);
}

注意包名和import,然后make project;

猜你喜欢

转载自blog.csdn.net/qq_26014653/article/details/82972327