如何将aidl文件添加到Android studio(来自应用内结算示例)

问题描述 投票:133回答:10

我目前正在将Eclipse应用程序迁移到Android Studio。此应用正在使用应用内结算功能。

我的主要问题是编译项目和aidl文件(我想你们都使用this file

我收到此错误消息:

Gradle: error: cannot find symbol class IInAppBillingService
Gradle: error: package IInAppBillingService does not exist

因此,按照一些教程,我将此文件从com.mypackage.billing移动到src / main / aidl(请参阅this reference

但是,就像我那样,我收到这条消息:

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

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

该消息显然与我上面链接的Google错误页面中的帖子相矛盾。

任何人都过分使这个aidl文件工作,可以帮助我吗?

请注意,我遵循的一些链接:

android android-studio gradle android-gradle aidl
10个回答
159
投票

正如错误消息所示,您需要将IInAppBillingService.aidl放在由其包(com.android.vending.billing)指定的正确目录中。

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


0
投票

重启Android Studio对我有用

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


218
投票

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

  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的引用仍然突出显示为错误,但在重建应用程序后,该类已被识别


9
投票

这里的其他帖子对我来说不起作用,直到我创建了一个如此处所示的新文件夹。

enter image description here


8
投票
  • 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.java中生成App_Name/app/build/generated/source/aidl/debug/com/android/vending/billing文件。这将解决问题。

5
投票

在build.gradle中添加此代码

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

重建和导入aidl类


2
投票

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

 import com.android.vending.billing.IInAppBillingService;

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

此导入未在任何Google结算文档中提及,也未包含在我找到的任何代码示例中。虽然对于经验丰富的Java开发人员来说可能是显而易见的,但初学者只是试图学习他们的第一个项目可能需要明确指出。


1
投票

我们需要补充一下

  1. 创建文件夹 - src / main / aidl / packagename并在其下放置aidl文件。
  2. 在aidl文件中 - 提及包名称。包packagename

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


1
投票

我知道这听起来很容易,但我从谷歌样本所有文件夹中复制粘贴

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

AIDL / COM /安卓/自动售货机/计费

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

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


0
投票

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

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