android studio环境下实现AIDL的碎碎念

AIDL(android Interface Definition Language) 多用于运行于android操作系统上的进程之间实现并发通信,AIDL通过使用 .aidl 文件实现接口的调用。常见接口文件定义如下:

<span style="font-size:18px;">package com.example.android.aidlserver;

interface MyParcelable {
    void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
            double aDouble, String aString);
}</span>

aidl文件的接口定义语法与java接口定义语法基本一致,支持基本数据类型和List Map, 对于自定义对象的引入则需要import,并且自定义对象必须实现Parcelable接口。详细说明参照android AIDL官方教程。(注意:实现了Parcelable的自定义对象也需要创建自己的aidl文件)。常见aidl文件及相关类定义于下:


mAidlInterface.aidl

package com.example.android.aidlserver;

import com.example.android.aidlserver.MyParcelable;

interface mAidlInterface {
     String introduce(in MyParcelable mp);
}

MyParcelable.java

package com.example.android.aidlserver;

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

public class MyParcelable implements Parcelable {
    private int mData;

    public int describeContents() {
        return 0;
    }

    public void writeToParcel(Parcel out, int flags) {
        out.writeInt(mData);
    }

    public static final Parcelable.Creator<MyParcelable> CREATOR
            = new Parcelable.Creator<MyParcelable>() {
        public MyParcelable createFromParcel(Parcel in) {
            return new MyParcelable(in);
        }

        public MyParcelable[] newArray(int size) {
            return new MyParcelable[size];
        }
    };

    private MyParcelable(Parcel in) {
        mData = in.readInt();
    }
}

MyParcelable.aidl

package com.example.android.aidlserver;

parcelable MyParcelable;

对于最新版本的android studio 右键new AIDL-AIDL File后,会自动在src/main/目录下创建路径 aidl/<package name>创建的aidl文件即放在这个路径下,根据之前的相关博文以及stackoverflow上的相关问题提示,应将自定义对象的java文件和aidl文件都放于此目录(即上文中的MyParcelable.java 和MyParcelable.aidl) 。

接下来通过build project IDE会自动生成与定义接口相关的文件,文件创建的路径为:app/build/generated/source/aidl/debug/<package name> 下。如下图示:


问题来了,在build的过程中编译器报错。提示如下:


找不到符号(cannot find symbol)即在debug中生成的文件找不到MyParcelable类的定义。

尝试了n种方法后发现,MyParcelable.java 文件不能放在aidl/<package name>路径下!(即不应该与MyParcelable.aidl放在一起)而是应该放在工程的java/<package name>路径下。这样rebuild,就不会再报错了。即文件路径如下图:


之后的工作在service中实现相关接口的方法即可,详细方法参照上文中的官方教程,在此不再赘述了。

另附AIDL Callback的样例代码以供参考:AIDL server and client(作者编写)

他人编写示例:AIDLserver  AIDLclient

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值