AIDL是进程间通信的一种方法.通常情况下,不同的应用运行在linux分配的不同的进程中,两者不能互相交流(在一个应用中调用另一个应用的方法,这是为了安全的考虑),但却有这样的需求,比如付款时,需要打开支付宝的服务.AIDL解决了这样的需求.如果一个应用想让另一个应用可以调用它的方法,他就需要定义一个.aidl接口文件(就是java的接口,但没有权限修饰符和后缀名是.aidl),把想让其他应用访问的方法定义在aidl文件中.这样之后,安卓项目gen目录中就会多出一个同名的包,包中有一个同名的java文件,这个同名的java文件中有一个继承了Binder,实现了该接口的抽象内部类stub,在项目的某个类中继承这个类,重写需要暴露的方法.这个应用要做的事情就做完了.
接下来就是想要调用别的应用方法的安卓项目要做的事了.首先在本项目中创建和被调用应用中aidl文件所处的包的包名相同的包,把被调用的应用的aidl文件拷进去,本项目的gen目录中会发生和上面所说的一样的事.在该接口中有一个asService()方法,可以传入一个IBinder对象(这个binder必须是被调用的应用传出来的继承了IBinder实现了stub接口的类的实例,得到的方法有,利用隐式意图绑定别人的服务,通过反射暴力调用其方法)得到一个该接口的子类对象,就可以用这个对象调用其它应用中实现的这个接口中的抽象方法.