139

我目前正在将 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 错误页面中的帖子相矛盾。

任何人成功地使这个aidl文件工作并且可以帮助我吗?

在此处输入图像描述

只是为了通知,我遵循了一些链接:

4

12 回答 12

226

添加这个作为答案,因为它似乎帮助了很多人。

  1. 在 'src/main/' 下创建一个名为 'aidl' 的新目录。它应该看起来像“ src/main/aidl ”。
  2. 将新的包名称“ com.android.vending.billing ”添加到目录“ src/main/aidl
  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 的引用仍然突出显示为错误,但在重建应用程序后,该类被识别

于 2014-03-31T18:55:10.607 回答
163

正如错误消息所说,您需要放入IInAppBillingService.aidl由它的包(com.android.vending.billing)指定的正确目录。

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

于 2013-07-24T14:11:13.313 回答
11
  • src/main在调用下创建新目录aidl
  • 右键目录aidl,选择new->add package
  • 输入包名 com.android.vending.billing

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

  • 现在继续进行 InApp 计费编码,在定义 InApp 相关服务时,您将收到错误can not resolve symbol IInAppBillingXXXXXX
  • 现在从 android studio 菜单转到Build,单击Rebuild Project。这将IInAppBillingService.javaApp_Name/app/build/generated/source/aidl/debug/com/android/vending/billing. 这将解决问题。
于 2015-01-28T14:51:08.070 回答
10

在我创建了一个如图所示的新文件夹之前,这里的其余帖子对我不起作用。

在此处输入图像描述

于 2016-08-24T17:31:36.277 回答
8

在 build.gradle 中添加此代码

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

重建并导入aidl类

于 2016-06-12T14:57:20.367 回答
2

上面的答案集中在文件位置上,但看起来你已经正确设置了。我在 Android Studio 中遇到了同样的问题,但列出的答案都没有解决它,我用头撞了一个小时。最终,我意识到我错过了一个明显的导入:

 import com.android.vending.billing.IInAppBillingService;

一旦我添加它解决了这个错误消息。

任何 Google Billing 文档中都没有提到此导入,也没有包含在我找到的任何代码示例中。虽然对于有经验的 Java 开发人员来说可能很明显,但刚尝试学习他们的第一个项目的初学者可能需要明确指出。

于 2015-03-19T15:10:42.130 回答
1

我们需要添加

  1. 创建文件夹 - src/main/aidl/packagename 并将aidl文件放在此文件夹下。

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

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

于 2016-06-03T13:03:13.267 回答
1

我知道这听起来很简单,但我从 google sample all 文件夹中复制粘贴

https://github.com/googlesamples/android-play-billing/tree/master/TrivialDrive/app/src/main

aidl/com/android/自动售货机/计费

复制到项目aidl(我在Android Studio中设置了项目视图)

接下来我清理并重建项目,它找到了一个参考。

于 2017-12-03T16:00:26.003 回答
0

我已经尝试了所有解决方案,但问题是 Android Studio 以任何明显的原因在包含 AIDL 包的模块的不同构建类型中编译,而不是由设置指定。从debug 到 release,所以其他模块看不到 AIDL pkg。从调试切换到发布并返回,解决了我的问题。

于 2016-02-08T16:12:10.180 回答
0

重新启动 Android Studio 对我有用

第二件愚蠢的事情花了我一段时间。我在 Android Studio 上删除了代码以允许他创建文件,但他创建了一个 .java(如预期的那样)而不是一个 .aidl Jiji,我太傻了

于 2016-08-16T06:41:44.797 回答
0

如果你把所有的名字都做对了,那就去 Build>rebuild project 它对我有用

于 2020-12-28T02:35:02.930 回答
0

我使用的是 Android Studio 4.1,只需右键单击鼠标 -> 新建 -> AIDL -> AIDL 文件。将自动创建一个文件并将其放置在 [src/main/aidl] 文件夹中。如果aidl 文件夹不存在,也会创建它。

此功能仅支持 min sdk 16+。我的老项目还是可以支持的,可以临时修改min sdk为16,创建aidl,build项目。生成相关接口和类后,恢复 min sdk 设置,它也可以正常工作并构建项目。

于 2021-03-08T19:01:24.077 回答