[Android]关于aidl

aidl的基本数据格式,可以参考源码中的例子

system/tools/aidl/tests/android/aidl/tests/ITestService.aidl

52  SimpleParcelable RepeatSimpleParcelable(in SimpleParcelable input,
53                                          out SimpleParcelable repeat);
54  PersistableBundle RepeatPersistableBundle(in PersistableBundle input);
55
56  // Test that arrays work as parameters and return types.
57  boolean[] ReverseBoolean(in boolean[] input, out boolean[] repeated);
58  byte[]    ReverseByte   (in byte[]    input, out byte[]    repeated);
59  char[]    ReverseChar   (in char[]    input, out char[]    repeated);
60  int[]     ReverseInt    (in int[]     input, out int[]     repeated);
61  long[]    ReverseLong   (in long[]    input, out long[]    repeated);
62  float[]   ReverseFloat  (in float[]   input, out float[]   repeated);
63  double[]  ReverseDouble (in double[]  input, out double[]  repeated);
64  String[]  ReverseString (in String[]  input, out String[]  repeated);
65
66  SimpleParcelable[]  ReverseSimpleParcelables(in SimpleParcelable[] input,
67                                               out SimpleParcelable[] repeated);
68  PersistableBundle[] ReversePersistableBundles(
69      in PersistableBundle[] input, out PersistableBundle[] repeated);
70

对于自定义的类型,如果需要使用数组,在native层的aidl中,直接使用数组形式[]  即可,

使用List<ClassName>会不识别,报错。

java层的aidl使用比较常见,native层的使用可以参考

frameworks/av/camera/aidl/android/hardware/

里面的处理,如makefile文件(bp文件)里面的添加处理,

编译的时候,会通过可执行程序aidl(aidl-cpp)去根据aidl文件生成相应的接口文件。

可执行程序aidl(aidl-cpp)的源码在

/system/tools/aidl/

里面,使用了lex和yacc的编译解析处理,

生成的接口文件里的代码没有使用tab键解析对齐,这是个可以优化的地方

发布了336 篇原创文章 · 获赞 13 · 访问量 33万+

猜你喜欢

转载自blog.csdn.net/aaajj/article/details/86716270
今日推荐