之前写过一篇文章“[Android]使用命令行打APK包 ”,里面没有涉及到aidl,现Sodino补充aidl的使用方法。

aidl的使用帮助如下:

C:/Documents and Settings/Administrator>aidl INPUT required usage: aidl OPTIONS INPUT [OUTPUT] aidl --preprocess OUTPUT INPUT... OPTIONS: -I<DIR> search path for import statements. -d<FILE> generate dependency file. -p<FILE> file created by --preprocess to import. -o<FOLDER> base output folder for generated files. -b fail when trying to compile a parcelable. INPUT: An aidl interface file. OUTPUT: The generated interface files. If omitted and the -o option is not used, the input filename is used, with th e .aidl extension changed to a .java extension. If the -o option is used, the generated files will be placed in the base outp ut folder, under their package folder

这些信息太少了,还不能让人明白如何使用。帮助信息首句就是“INPUT required”,其实只有"INPUT"仍是不够的,OPTIONS中“-I”是必选而非可选,否则会提示:

D:/JavaTest/ApiDemos/src/com/example/android/apis/app/IRemoteService.aidl:19: couldn't find import for class com.example.android.apis.app.IRemoteServiceCallback

以SDK自带的ApiDemos为实践对象,该工程存储路径为:"D:/JavaTest/ApiDemos/",有三个aidl文件分别为:
com/example/android/apis/app/IRemoteService.aidl
com/example/android/apis/app/IRemoteServiceCallback.aidl
com/example/android/apis/app/ISecondary.aidl

要生成对应的.java文件命令行如下:

aidl -ID:/JavaTest/ApiDemos/src D:/JavaTest/ApiDemos/src/com/example/android/apis/app/IRemoteService.aidl

对,你没看错,"-I"与"D:/JavaTest/***"之间是没有空格的。XX,看来Google里也有相当混蛋的程序员。
执行此条命令后,生成的.java会与.aidl文件在同一目录下。

如果想指定aidl的生成路径,则可以按照aidl的提示信息使用"-o"选项:

aidl -ID:/JavaTest/ApiDemos/src -oD:/JavaTest D:/JavaTest/ApiDemos/src/com/example/android/apis/app/IRemoteService.aidl

对,你还是没看错,"-o"与"D:/JavaTest/**"中间还是没有空格,再次咒骂设计了aidl工具的那个混蛋。
执行此命令后,则生成的aidl文件存于"D:/JavaTest/"路径下了。

在ApiDemos中,IRemoteService.aidl与IRemoteServiceCallback.aidl是互相依赖的,在编译IRemoteService.aidl时,通过使用"-d"可以将其依赖的相关类输出到自定义的文件中.

aidl -ID:/JavaTest/ApiDemos/src -oD:/JavaTest -dD:/JavaTest/aidl_dependency.txt D:/JavaTest/ApiDemos/src/com/example/android/apis/app/IRemoteService.aidl

生成的aidl_dependenry.txt内容如下:

: / D:/JavaTest/ApiDemos/src/com/example/android/apis/app/IRemoteService.aidl / D:/JavaTest/ApiDemos/src/com/example/android/apis/app/IRemoteServiceCallback.aidl

可选项中"-b"的用法不详,帮助信息中的那句“fail when trying to compile a parcelable.”就感觉少说了些内容,"fail"然后干嘛,XX,第三次咒骂设计了aidl工具的那个混蛋。
帮助信息中还有“aidl --preprocess OUTPUT INPUT...”,作用是根据要编译的.aidl生成预处理文件,但具体预处理有啥用,有知道的告诉我下啊。

仍以ApiDemos为例,生成预处理文件为aidl.preprocess:

aidl --preprocess D:/JavaTest/aidl.preprocess D:/JavaTest/ApiDemos/src/com/example/android/apis/app/IRemoteService.aidl D:/JavaTest/ApiDemos/src/com/example/android/apis/app/IRemoteServiceCallback.aidl D:/JavaTest/ApiDemos/src/com/example/android/apis/app/ISecondary.aidl

生成的aidl.preprocess内容如下:

interface com.example.android.apis.app.IRemoteService; interface com.example.android.apis.app.IRemoteServiceCallback; interface com.example.android.apis.app.ISecondary;

SDK自带了预处理文件为<sdk_path>/platforms/android-<level>/framework.aidl。

“-p”表示编译aidl时以预处理文件为参去生成.java,命令方法如下:

aidl -ID:/JavaTest/ApiDemos/src -pE:/SoftSetup/AndroidSDK/android_sdk_r08_windows/platforms/android-3/framework.aidl D:/JavaTest/ApiDemos/src/com/example/android/apis/app/IRemoteService.aidl

而通过查看adt的源码可以发现,adt编译aidl使用的正是系统自带的预处理文件framewrok.aidl。
adt源码处理aidl的文件为:<OpenSourceProjectPath>/sdk/eclipse/plugins /com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal /build/PreCompilerBuilder.java,其中的handleAidl()即为编译aidl的执行方法。

本文内容归CSDN博客博主Sodino 所有

转载请注明出处: http://blog.csdn.net/sodino/archive/2011/05/14/6419498.aspx

更多相关文章

  1. android从不同的layout添加tab页内容_tabhost
  2. mipmap和drawable文件夹的区别
  3. Android: /cache中的文件是怎么消失的
  4. TextView内容太长怎么办?
  5. Android APK文件结构 完整打包编译的流程 APK安装过程 详解
  6. Android读取xxx.properties配置文件中文出现乱码解决方法
  7. Android Studio(九):引用jar及so文件
  8. Android——4.2.2 文件系统文件夹分析
  9. [置顶] Android上传文件到Web服务器,PHP接收文件(二)

随机推荐

  1. react-native-s-alipay -- React Native
  2. Android事件分发机制全解析
  3. Android 9.0 Launcher Workspace 加载
  4. Android的应用程序框架
  5. 高通平台android9.0设置开机默认横屏显示
  6. Android development - 'missing theme e
  7. Android公共库(缓存 下拉ListView 下载管
  8. Android TransactionTooLargeException
  9. Android中自定义ViewGroup实现表格展示学
  10. Android 兼容获取Mac地址与手机信息工具