如何将AIDL文件添加到Android Studio(来自应用内计费示例)

143
我目前正在将一款Eclipse应用迁移到Android Studio。该应用程序使用了应用内计费。
我的主要问题是编译项目和aidl文件(我猜你们都使用这个文件)。
我得到了这个错误信息:
Gradle: error: cannot find symbol class IInAppBillingService
Gradle: error: package IInAppBillingService does not exist

所以,按照一些教程的指导,我将这个文件从com.mypackage.billing移动到了src/main/aidl目录下(参见此处引用)。

但是,一旦我这样做,就会收到以下消息:

Gradle:执行任务':xxxxxxxxxxx:compileDebugAidl'失败。

无法运行命令: (...) C:\Users\xxxx\AndroidStudioProjects\xxxxxxProject\xxxxxxx\src\main\aidl\IInAppBillingService.aidl:45 接口IInAppBillingService应该在一个名为com\xxxxxxxx\billing\IInAppBillingService.aidl的文件中声明。

这条消息显然与我上面链接的Google bug页面上的帖子相矛盾。

有人成功让这个aidl文件工作并能够帮助我吗?

enter image description here

只是通知一下,我跟随了一些链接:


问题是...这个AIDL文件不应该在/src/main/aidl/com/android/vending/billing中吗? - Selvin
1
Gradle:任务“:MyProject:compileDebugAidl”的执行失败。
无法运行命令: 45个接口IInAppBillingService应该在名为com\android\vending\billing\IInAppBillingService.aidl的文件中声明。
- Waza_Be
1
有些东西告诉我你还是没有把它放在Selvin和我说的文件夹里...? - Sam Dozor
你解决了这个问题吗?我这里也遇到了同样的问题。 - Bagusflyer
抱歉,我找到了问题所在。还是路径的问题。 - Bagusflyer
显示剩余2条评论
14个回答

233

鉴于此问题似乎帮助了很多人,因此将其作为答案添加。

  1. 创建一个新目录,名为“aidl”,位于“src/main/”下。它应该看起来像“src/main/aidl”。
  2. 在目录“src/main/aidl”下添加一个新包名为“com.android.vending.billing
  3. 找到您的sdk位置并进入“sdk\extras\google\play_billing”。sdk的默认位置为“C:\Program Files (x86)\Android\android-sdk”。如果您自定义更改了位置,则必须通过sdk管理器确定位置。
  4. 将“IInAppBillingService.aidl”复制到上面创建的包中。最终,它应该与下图类似。

结果截图

  1. 重新构建项目即可。

注意:如果引用无法正常工作,请确保包含必要的导入。

import com.android.vending.billing.IInAppBillingService;

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

评论编辑

我这样做后,我代码中对IInAppBillingService的引用仍被标记为错误,但在重新构建应用程序后,该类被识别。


1
请明确一点:仔细阅读这篇文章!我没有...再次强调:这是一个很好的补充...将com.android.vending.billing放入新的“main/aidl”目录中! - Boy
6
完成这个操作后,我的代码中对于 IInAppBillingService 的引用仍然被标记为错误,但是在重新构建应用程序之后,该类被识别了。 - arlomedia
5
花了20分钟尝试解决这个问题,直到我看到你的答案。然后我试图点赞,却收到了“您上次投票是在...”的错误提示。我猜有些人永远不会学习 :) - beetree
你能告诉我第三步是什么吗?我不明白。 - user3402040
@delive 步骤 3 指已下载的 Android SDK。我相信默认位置是 C:\Program Files (x86)\Android\android-sdk,这取决于您安装的版本以及是否更改了位置。然后按照步骤 3 中的位置导航并获取文件(第 4 步)。 - Kalel Wade
显示剩余6条评论

166

正如错误信息所说,您需要将 IInAppBillingService.aidl 放置在它的包(com.android.vending.billing)规定的正确目录下。

在您已经有的 src/main/aidl/ 文件夹中,将 .aidl 文件放在 com/android/vending/billing/ 中。


5
当我执行这个操作时,出现以下错误:Gradle:error:无法找到符号类IInAppBillingService。 - Waza_Be
9
所以它在 /src/main/aidl/com/android/vending/billing 下面?你是用 Gradle 来构建吗?如果是的话,在 Android Studio 右上角点击小 Gradle 按钮来重新加载配置,或者关闭/打开 Android Studio。 - Sam Dozor
80
为了澄清,需要在src/main/目录下创建一个名为aidl的文件夹。然后添加一个新的包com.android.vending.billing。然后将aidl文件复制到新包中。请参见https://code.google.com/p/android/issues/detail?id=56755。 - Kalel Wade
2
@Kalel Wade 这对我来说是解决方案,你应该将其添加为答案。 - eski
3
如果您没有src/main文件夹,则在任何地方创建aidl目录,并在build.gradle中指定:android { sourceSets { main { aidl { srcDirs 'actual_path..' - aleb
显示剩余4条评论

12

在我创建一个类似于这里显示的新文件夹之前,这里的其他帖子都对我没有用。

输入图像描述


11
  • src/main目录下创建名为aidl的新文件夹
  • 右键单击aidl文件夹,选择新建->添加包
  • 输入包的名称com.android.vending.billing

  • 从目录Android/Sdk/extras/google/play_billing中复制IInAppBillingService.aidl到目录App_name/app/src/main/aidl/com/android/vending/billing

  • 现在可以继续进行InApp计费编码了,在定义与InApp相关的服务时,您会收到一个错误无法解析符号IInAppBillingXXXXXX
  • 现在转到Android Studio菜单中的Build,点击Rebuild Project。这将在App_Name/app/build/generated/source/aidl/debug/com/android/vending/billing内生成IInAppBillingService.java文件。问题将得到解决。

@MOHSENNAVABI 没问题 :-) - Praveena
复制文件"IInAppBillingService.aidl"后,是否需要更改此文件的任何行?我看到一些注释要求将包名称替换为来自示例的名称,以避免出现错误"aidl.exe' finished with non-zero exit value 1"。具体的操作指令是什么? - Pablo Alfonso

10
请在 build.gradle 文件中添加以下代码。
android {
    sourceSets {
        main {
            aidl.srcDirs = ['src']
        }
    }
}

重建并导入AIDL类


3

这个答案可能不完全针对所发布的问题,但可能会帮助其他遇到创建 AIDL 文件夹相关问题的人。有时即使我们像 app > New > Folder > AIDL Folder 这样创建了文件夹,AIDL 文件夹在 Android Studio 中也不会显示。该文件夹存在于文件资源管理器中,但在 Android Studio 中无法显示或检测到。

我曾经遇到过这个问题,并通过以下步骤解决了它:

步骤 1:打开 gradle.properties 文件,在文件末尾添加 android.defaults.buildfeatures.aidl=true,如下图所示。 enter image description here

步骤 2:右键单击 app 文件夹,将显示一个窗口,按照以下流程操作:app > New > Folder > AIDL Folder enter image description here

步骤 3:单击“完成”按钮 输入图像描述 AIDL 文件夹现已在 Android Studio 中创建并显示 输入图像描述


2

以上答案都集中在文件位置上,但是看起来您已经正确设置了。我在Android Studio中也遇到了同样的问题,但是列出的所有答案都没有解决它,我花了一个小时去解决它。最终,我意识到我缺少了一个明显的导入:

 import com.android.vending.billing.IInAppBillingService;

添加后,这个错误信息就得到了解决。

这个导入方法在 Google Billing 的文档中没有提到,在我找到的所有代码示例中也没有包含。对于经验丰富的 Java 开发人员,这可能很明显,但是初学者需要明确指出它的作用。


1
我们需要添加以下内容:
  1. 创建文件夹 - src/main/aidl/packagename,并将aidl文件放置其中。

  2. 在aidl文件中 - 提及包名。 package packagename

现在清理项目,重建项目 - 我们可以在app\build\generated\source\aidl\debug\packagename\youraidl.java中找到相应的aidl生成的java文件。

1

0
我尝试了所有的解决方案,但问题在于Android Studio编译了一个不同的构建类型,包含AIDL包的模块与设置指定的不同,且没有明显的原因。 从debug到release,所以其他模块无法看到AIDL包。 从debug切换到release再切回去,解决了我的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接