AIDL文件没有生成Java文件

问题描述 投票:0回答:6

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

我的问题是,在我的项目中,Android 不会从此 AIDL 生成 Java 文件。 请注意,该项目编译并运行良好。但是,如果我将此 AIDL 文件移动到另一个项目,Android 会生成 Java 文件。

我不知道在哪里可以调试此类错误,也不知道在哪里可以阅读有关此问题的日志。

有人可以帮助我吗?

android service interface aidl
6个回答
10
投票

我遇到了同样的问题,并且在 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


6
投票

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

我必须将aidl文件放在'src/main/aidl/example/package/name/'中<-- The declared package in the aidl file would be 'package example.package.name'.

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


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/
而不是
src/


1
投票

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

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


1
投票

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


© www.soinside.com 2019 - 2024. All rights reserved.