android studio环境下实现AIDL的碎碎念(转载)

8 篇文章 0 订阅
6 篇文章 0 订阅

声明:本篇博客是转载自@Rimon吃撑了,其博客地址为:http://blog.csdn.net/sacco90725/article/details/42104085

在此感谢!

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

[java]  view plain copy
  1. <span style="font-size:18px;">package com.example.android.aidlserver;  
  2.   
  3. interface MyParcelable {  
  4.     void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,  
  5.             double aDouble, String aString);  
  6. }</span>  

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


mAidlInterface.aidl

[java]  view plain copy
  1. package com.example.android.aidlserver;  
  2.   
  3. import com.example.android.aidlserver.MyParcelable;  
  4.   
  5. interface mAidlInterface {  
  6.      String introduce(in MyParcelable mp);  
  7. }  

MyParcelable.java

[java]  view plain copy
  1. package com.example.android.aidlserver;  
  2.   
  3. import android.os.Parcel;  
  4. import android.os.Parcelable;  
  5.   
  6. public class MyParcelable implements Parcelable {  
  7.     private int mData;  
  8.   
  9.     public int describeContents() {  
  10.         return 0;  
  11.     }  
  12.   
  13.     public void writeToParcel(Parcel out, int flags) {  
  14.         out.writeInt(mData);  
  15.     }  
  16.   
  17.     public static final Parcelable.Creator<MyParcelable> CREATOR  
  18.             = new Parcelable.Creator<MyParcelable>() {  
  19.         public MyParcelable createFromParcel(Parcel in) {  
  20.             return new MyParcelable(in);  
  21.         }  
  22.   
  23.         public MyParcelable[] newArray(int size) {  
  24.             return new MyParcelable[size];  
  25.         }  
  26.     };  
  27.   
  28.     private MyParcelable(Parcel in) {  
  29.         mData = in.readInt();  
  30.     }  
  31. }  

MyParcelable.aidl

[java]  view plain copy
  1. package com.example.android.aidlserver;  
  2.   
  3. 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中实现相关接口的方法即可,详细方法参照上文中的官方教程,在此不再赘述了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值