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


136

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

有人设法使此辅助文件起作用并可以帮助我吗?

在此处输入图片说明

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


问题是……这个援助文件不应该在/src/main/aidl/com/android/vending/billing吗?
Selvin 2013年

1
Gradle:任务':MyProject:compileDebugAidl'的执行失败。>无法运行命令:45接口IInAppBillingService应该在名为com \ android \ vending \ billing \ IInAppBillingService.aidl的文件中声明。
Waza_Be 2013年

1
某事告诉我您仍未将其放在Selvin和我说的文件夹中?
山姆·多佐尔

只是增加了一个新的截图,我想我把它夹在你告诉我..
Waza_Be

selvin.pl/TrivialDriveProject.Gradle.zip(在local.properties中更改sdk目录)... gradlew.bat assemble它就像一个魅力一样...您确定文件夹是/ src / main / aidl / com / android / vending / billing不是/src/main/aidl/com.android.vending.billing吗?AS 0.2.1?摇篮0.5。+?
Selvin

Answers:


162

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

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


5
当我这样做时,我得到:Gradle:错误:找不到符号类IInAppBillingService
Waza_Be 2013年

9
所以它在/ src / main / aidl / com / android / vending / billing中?您是否正在使用gradle构建?如果是这样,请点击Android Studio右上方的小gradle按钮以进行gradle重新加载配置,或关闭/打开Android Studio。
山姆·多佐尔

80
只是为了澄清。在src / main /下创建目录aidl。然后添加一个新的包com.android.vending.billing。然后将辅助文件复制到新的程序包中。参见code.google.com/p/android/issues/detail?id=56755
Kalel Wade 2013年

2
@Kalel Wade这是我的解决方案,您应该将其添加为答案。
eski 2014年

3
如果你没有的src /主,创建AIDL目录的任何地方,并在指定的build.gradle:机器人{{sourceSets主要{{AIDL srcDirs 'actual_path ..'
aleb

221

将其添加为答案,因为它似乎可以帮助很多人。

  1. 在“ src / main /”下创建一个名为“ aidl” 的新目录。它看起来应该像“ 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”目录中!
2014年

5
完成此操作后,我的代码中对IInAppBillingService的引用仍被突出显示为错误,但是在重建应用程序之后,该类得以识别。
arlomedia 2014年

这可行,但是当您选择添加模块时,为什么这不是全部自动进行的?
android开发人员

感谢您的重建项目提示。文件夹和包也可以用某种样式创建,而不必在主体中。(例如,如果您仅以一种应用风格来进行应用计费)
Mike Fosker 2014年

4
花了20分钟尝试解决此问题,直到我找到您的答案。然后我尝试对其进行投票以得到错误消息“您对这个答案的最后投票...”。我猜有些人从
没学过

10

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

在此处输入图片说明


9
  • 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
  • 现在Build从android studio菜单转到,单击Rebuild Project。这将IInAppBillingService.java在内部生成文件App_Name/app/build/generated/source/aidl/debug/com/android/vending/billing。这样可以解决问题。

@MOHSENNAVABI没问题:-)
Praveena

复制文件“ IInAppBillingService.aidl”后,是否需要更改此文件的任何行?我已经看到一些注释,要求替换软件包名称,因为它来自示例,以避免错误“ aidl.exe'以非零退出值1结束”。有什么具体说明呢?
Pablo Alfonso


2

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

 import com.android.vending.billing.IInAppBillingService;

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

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


1

我们需要添加

  1. 创建文件夹-src / main / aidl / packagename并在其下放置辅助文件。

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

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



0

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


0

重新启动Android Studio对我有用

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.