Android 如何使用SDK示例代码从命令行使用AIDL工具?

Android 如何使用SDK示例代码从命令行使用AIDL工具?,android,aidl,Android,Aidl,我的问题是从命令行使用aidl.exe(在Windows系统上)。这个问题与Eclipse、Netbeans等无关 Android SDK包含以下三个AIDL定义文件: 艾德汽车旅馆 艾德尔汽车旅馆 等辅助 位于以下目录中: C:\android sdk windows\Platform\android-2.1\samples\ApiDemos\src\com\example\android\API\app 为了简单起见,我将aidl.exe复制到上面的目录中。然后,在控制台窗口中,我成功地使用

我的问题是从命令行使用aidl.exe(在Windows系统上)。这个问题与Eclipse、Netbeans等无关

Android SDK包含以下三个AIDL定义文件:

艾德汽车旅馆 艾德尔汽车旅馆 等辅助

位于以下目录中:

C:\android sdk windows\Platform\android-2.1\samples\ApiDemos\src\com\example\android\API\app

为了简单起见,我将aidl.exe复制到上面的目录中。然后,在控制台窗口中,我成功地使用以下两个命令生成.java文件:

C:\Android project\ApiDemos\src\com\example\Android\API\app>aidl IRemoteServiceCallback.aidl C:\Android project\ApiDemos\src\com\example\Android\API\app>aidl ISecondary.aidl

调用这些命令分别生成文件IRemoteServiceCallback.java和ISecondary.java。到目前为止还不错

我注意到这两个.aidl文件都很简单;它们不包括“导入”语句

其余的.aidl文件IRemoteService.aidl在第19行包含以下导入语句:

导入com.example.android.api.app.IRemoteServiceCallback

在该文件上运行AIDL工具时出现问题:

  C:\Android-project\ApiDemos\src\com\example\android\apis\app>aidl IRemoteService.aidl
这样做会导致在控制台窗口中打印以下错误消息:

IRemoteService.aidl:19:找不到类com.example.android.api.app.IRemoteServiceCallback的导入

AIDL工具显然无法在运行它的同一目录中找到IRemoteServiceCallback.AIDL文件。根据AIDL工具的“用法”消息,有一个命令显然可以用来解决此问题:

  -I<DIR>    search path for import statements.
我一定错过了一些简单的东西。令人惊讶的是,尽管我在不同的地方看到了这个问题的变体,但我还没有看到关于AIDL命令行用法的答案或任何文档(除了AIDL.exe用法信息)。有人能给我提供线索吗

谢谢,
Matt

正如您所提到的,没有太多文档

因此,如果您在Eclipse中启用详细的构建输出(我想在Window>Preferences>Android>build下),您可以在控制台中看到当Eclipse插件进行构建时执行了哪些命令,包括
aidl
aapt


或者,如果您能理解C,您可以在AOSP中查看aidl源代码。

您必须提供源文件的文件夹路径,但在基本src文件夹之后没有路径。 因此,在您的情况下,正确的命令是:

C:\Android-project\ApiDemos\src\com\example\android\apis\app>aidl -IC:\Android-project\ApiDemos\src\ IRemoteService.aidl

在谷歌上花了3个小时的无用搜索,在yandex上花了1.5个小时的搜索。解决方案如下:


您需要添加-p/path/to/framework.aidl键

Mmmmm,详细的构建——更好。谢谢,克里斯托弗你让我开心!顺便说一句,aidl自己对-p标志的描述很愚蠢。谢谢Dmitry,也帮了我的忙。我想这是互联网上唯一有记录的地方。谢谢你,你是个英雄。
C:\Android-project\ApiDemos\src\com\example\android\apis\app>aidl -IC:\Android-project\ApiDemos\src\ IRemoteService.aidl