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)的源码在
里面,使用了lex和yacc的编译解析处理,
生成的接口文件里的代码没有使用tab键解析对齐,这是个可以优化的地方