我目前正在将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文件工作,可以帮助我吗?
请注意,我遵循的一些链接:
10 回答
正如错误消息所示,您需要将
IInAppBillingService.aidl
放在由其包(com.android.vending.billing)指定的正确目录中 .在您已经拥有的
src/main/aidl/
文件夹中,将.aidl
文件放在com/android/vending/billing/
中 .添加这个作为答案,因为它似乎帮助了很多人 .
Create a new directory 在'src/main/'下命名为'aidl' . 它应该看起来像' src/main/aidl ' .
Add a new package name' com.android.vending.billing ' to the directory ' src/main/aidl '
找到您的sdk位置并转到"sdk\extras\google\play_billing" . sdk的默认位置是"C:\Program Files (x86)\Android\android-sdk" . 如果您自定义更改它,那么您将必须通过sdk管理器找出位置 .
Copy 'IInAppBillingService.aidl' 进入上面创建的包 . 最后,它看起来应该与下图相似 .
注意:如果您的引用不起作用,请确保包含必要的导入
https://issuetracker.google.com/issues/36973270
Edit From Comment
在我这样做之后,我的代码中对IInAppBillingService的引用仍然突出显示为错误,但在重建应用程序后,该类被识别
这里的其他帖子对我来说不起作用,直到我创建了这样的 new folder .
在
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
. 这将在App_Name/app/build/generated/source/aidl/debug/com/android/vending/billing
内生成IInAppBillingService.java
文件 . 这将解决问题 .在build.gradle中添加此代码
重建并导入aidl类
上面的答案集中在文件位置,但看起来你已经正确设置了 . 我在Android Studio中遇到过同样的问题,但所列出的答案都没有解决,我在一小时内对抗它 . 最终,我意识到我错过了一个明显的重要性:
一旦我添加它解决了此错误消息 .
此导入未在任何Google结算文档中提及,或包含在我找到的任何代码示例中 . 虽然对于经验丰富的Java开发人员来说可能是显而易见的,但初学者只是试图学习他们的第一个项目可能需要明确指出 .
我们需要补充一下
创建文件夹 - src / main / aidl / packagename并在此下放置aidl文件 .
在aidl文件中 - 提及包名称 . 包packagename
现在清理项目,重建项目 - 我们可以在app \ build \ generated \ source \ aidl \ debug \ packagename \ youraidl.java中生成相应的生成aidl的java文件
我知道这听起来很容易,但我从谷歌样本所有文件夹中复制粘贴
https://github.com/googlesamples/android-play-billing/tree/master/TrivialDrive/app/src/main
然后我清理并重建项目,它找到了一个参考 .
我已经尝试了所有解决方案,但问题是Android Studio已经编译,包含AIDL包的模块的不同构建类型,而不是设置指定的模块 . 从 debug to release 开始,其他模块无法看到AIDL pkg . 从调试切换到发布并返回,解决了我的问题 .
重启Android Studio对我有用
第二个愚蠢的事情花了我一段时间 . 我在Android Studio上删除了代码以允许他创建文件,但他创建了一个.java(正如预期的那样)而不是.aidl Jiji,我的傻瓜