8

我已经定义了一个 AIDL android 接口来提供来自其他应用程序的服务。

我的问题是在我的项目中,Android 不会从这个 AIDL 生成 Java 文件。请注意,该项目可以编译并正常工作。但是,如果我将此 AIDL 文件移动到另一个项目,Android 会生成 Java 文件。

我不知道在哪里可以调试这种错误,或者在哪里可以阅读有关此的一些日志。

有谁能够帮我?

4

5 回答 5

9

我遇到了同样的问题,并且在 Android Studio 上工作正常。有两种方法可以解决此问题。

方法一:

将 AIDL 文件放在 src/main/aidl 包下,以遵循 gradle 构建的默认源设置。

这是简单的方法,但并不聪明。

方法二:

  1. 将aidl 文件保存在您的自定义包下。

  2. 在 build.gradle 文件中添加源设置映射如下

    sourceSets {
       main {
         aidl.srcDirs = ['src/main/java']
       }
    }
    

如上所述设置后不要忘记清理和重建。

更多信息请参考这里,

https://issuetracker.google.com/issues/36972230

https://issuetracker.google.com/issues/36972230

https://issuetracker.google.com/issues/36988483

于 2018-03-26T04:02:21.923 回答
6

我遇到了类似的问题。使用 Android Studio,文件必须位于特定位置,除非您在 Gradle 中覆盖它。

我必须将aidl文件放在'src/main/aidl/example/package/name/' <--aidl文件中声明的包将是'package example.package.name'。

它要求文件位于特定的aidl 文件夹中,并且具有与aidl 中声明的包名称匹配的文件夹结构。我在这里找到了最初的提示:https ://code.google.com/p/android/issues/detail?id=56328

于 2016-08-03T20:30:16.647 回答
5

Eclipse 直接在.aidl文件中向您显示错误,因此请先检查您的文件。我遇到了类似的问题,发现了我的问题:我在接口函数前面加上了public. 那是错误的。例如:

package com.example.phone.service;

interface IService {
    public void placeCall(String a, in String b, in String c);
}

应该:

package com.example.phone.service;

interface IService {
    void placeCall(String a, in String b, in String c);
}

不要忘记.java生成的文件位于gen/not src/.

于 2012-09-21T18:40:14.163 回答
1

如果您根据尝试创建接口的位置(例如 framework/base/)转到父目录之一,您将在此文件中找到名为 Android.mk 的该目录的 make 文件,您应该在适当的位置添加 .aidl 名称(由于评论,很容易理解确切的位置)然后构建。将生成“你的界面”.java。

于 2013-10-06T15:30:50.713 回答
1

尝试清理项目,这通常有助于解决这些类型的错误。还要检查它是否不包含错误,因为错误会阻止某些编译步骤的完成。

假设您使用 Eclipse,请查看“控制台”视图(窗口 > 显示视图 > 控制台),它应该包含编译过程的输出。

于 2012-09-21T09:43:41.420 回答