解决编译AIDL模块出现的couldn't find import for class错误

编译Android系统源码,在package目录下新建了一个目录单独编译一个模块,里面还有AIDL接口声明,并且声明中用到了自定义的JAVA类,写入import代码后编译却报错couldn’t find import for class。

这里找到的最终解决方法如下:

在同目录下新建一个Test.aidl文件,并且文件中需要填写如下格式代码:

package com.xxxx.xxxx;
parcelable Test;

重新编译,问题解决。

ps:

下边说说AIDL的一些特点:

在AIDL文件中,并不是所有的数据类型都是可以使用的,那么到底AIDL文件中支持哪些数据类型呢?
如下所示:
1、基本数据类型(int,long,char,boolean,float,double,byte,short八种基本类型);
2、String和CharSequence;
3、List:只支持ArrayList,里面每个元素都必须能够被AIDL支持;
4、Map:只支持HashMap,里面的每个元素都必须被AIDL支持,包括key和value;
5、Parcelable:所有实现了Parcelable接口的对象;
6、AIDL:所有的AIDL接口本身也可以在AIDL文件中使用;

以上6中数据类型就是AIDL所支持的所有类型,其中自定义的Parcelable对象和AIDL对象必须要显式import进来,不管它们是否和当前的AIDL文件位于同一个包内。

需要注意的地方:
AIDL中除了基本数据类型,其他类型的参数必须标上方向:in、out或者inout,不然会出现提示:so you must declare it as in, out or inout。

in表示输入型参数(Server可以获取到Client传递过去的数据,但是不能对Client端的数据进行修改)
out表示输出型参数(Server获取不到Client传递过去的数据,但是能对Client端的数据进行修改)
inout表示输入输出型参数(Server可以获取到Client传递过去的数据,但是能对Client端的数据进行修改)

发布了70 篇原创文章 · 获赞 24 · 访问量 8258

猜你喜欢

转载自blog.csdn.net/angelsmiling/article/details/103857013