最近在看一些AIDL入门的例子在编译时总是会遇到这种情况:
项目结构:
这是《Android开发艺术探索》里的小例子,Book实现了Parcelable接口以通过Binder传输。BookManagerService实现IBookManager接口的两个方法,然后就可以在RemoteActivity(android:process=":remote"开启多进程)中调用这两个方法了:
看了很多解决方法,主要就是用sourceSets指定对应的源码和资源,大部分都是在build.gradle(Moudle: app)中添加类似:
sourceSets { main { manifest.srcFile 'src/main/AndroidManifest.xml' java.srcDirs = ['src/main/java', 'src/main/aidl'] resources.srcDirs = ['src/main/java'] aidl.srcDirs = ['src/main/aidl'] res.srcDirs = ['src/main/res'] assets.srcDirs = ['src/main/assets'] } }
即把src/main/aidl目录下的自定义类(这里是Book)加入到java.srcDirs里面,因为此目录下的自定类也需要编译,添加后gradle文件形式如下:
编译完成后,整个工程结构就变成了:
看上去aidl文件跑到了java文件夹,但其实aidl文件夹仍然在main/aidl下面与java文件夹同级:
看来是自己对gradle的了解还是太少=_=。