如何将aidl文件添加到Android工作室(来自应用内计费示例)
Posted
技术标签:
【中文标题】如何将aidl文件添加到Android工作室(来自应用内计费示例)【英文标题】:how can I add the aidl file to Android studio (from the in-app billing example) 【发布时间】:2013-07-24 01:26:41 【问题描述】:我目前正在将 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文件工作并且可以帮助我吗?
只是为了告知,我关注的一些链接:
http://tools.android.com/tech-docs/new-build-system/user-guide http://developer.android.com/guide/components/aidl.html【问题讨论】:
问题是......不应该是/src/main/aidl/com/android/vending/billing
中的这个aidl文件吗?
Gradle:任务 ':MyProject:compileDebugAidl' 执行失败。 > 运行命令失败:45 接口 IInAppBillingService 应在名为 com\android\vending\billing\IInAppBillingService.aidl 的文件中声明。
某事告诉我你还没有把它放在我和 Selvin 所说的文件夹中......?
刚刚添加了一个新的截图,我想我把它放在你告诉我的文件夹里了..
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 ? 0.2.1 ? Gradle 0.5.+ ?
【参考方案1】:
添加这个作为答案,因为它似乎对很多人有所帮助。
-
在 'src/main/' 下创建一个名为 'aidl' 的新目录。它应该看起来像“src/main/aidl”。
添加一个名为“com.android.vending.billing”的新包到目录“src/main/aidl”
找到您的 sdk 位置并转到“sdk\extras\google\play_billing”。 sdk 的默认位置是“C:\Program Files (x86)\Android\android-sdk”。如果您自定义更改了它,那么您将不得不通过 sdk 管理器找出位置。
将'IInAppBillingService.aidl'复制到上面创建的包中。最后,它应该类似于下图。
-
重建项目,应该不错了。
注意:如果您的参考不起作用,请确保包含必要的导入
import com.android.vending.billing.IInAppBillingService;
https://issuetracker.google.com/issues/36973270
从评论编辑
执行此操作后,我的代码中对 IInAppBillingService 的引用仍然突出显示为错误,但在重建应用程序后,该类被识别
【讨论】:
明确一点:请仔细阅读!我没有……再次强调:这是一个很好的补充……将 com.android.vending.billing 放入新的“main/aidl”目录中! 执行此操作后,我的代码中对 IInAppBillingService 的引用仍然突出显示为错误,但在重建应用程序后,该类被识别。 这行得通,但是当您选择添加模块时,为什么这不是全部自动的? 感谢重建项目提示。文件夹和包也可以在一个风格中创建,它不必在主目录中。 (例如,如果您只在应用的一种风格中进行应用计费) 花了 20 分钟试图解决这个问题,直到我得到你的答案。然后我尝试对其进行投票以获取错误“您上次对此答案投票......”我猜有些人永远不会学习:)【参考方案2】:正如错误消息所说,您需要将 IInAppBillingService.aidl
放在它的包 (com.android.vending.billing) 指定的正确目录中。
在您已有的src/main/aidl/
文件夹中,将.aidl
文件放入com/android/vending/billing/
。
【讨论】:
当我这样做时,我得到: Gradle: error: cannot find symbol class IInAppBillingService 所以它在 /src/main/aidl/com/android/vending/billing 中?你是用 gradle 来构建的吗?如果是这样,请点击 Android Studio 右上角的小 gradle 按钮以进行 gradle 重新加载配置,或关闭/打开 Android Studio。 只是为了澄清。在 src/main/ 下创建目录aidl。然后添加一个新包 com.android.vending.billing。然后将aidl文件复制到新包中。见code.google.com/p/android/issues/detail?id=56755 @Kalel Wade 这是我的解决方案,您应该将其添加为答案。 如果没有src/main,在任意位置创建aidl目录并在build.gradle中指定:android sourceSets main aidl srcDirs 'actual_path..'【参考方案3】: 在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
can not resolve symbol IInAppBillingXXXXXX
现在从 android studio 菜单转到Build
,点击Rebuild Project
。这将在App_Name/app/build/generated/source/aidl/debug/com/android/vending/billing
中生成IInAppBillingService.java
文件。这将解决问题。
【讨论】:
@MOHSENNAVABI 没问题 :-) 复制文件“IInAppBillingService.aidl”后,是否需要更改该文件的任何一行?我看到一些注释要求替换包名称,因为它来自示例以避免错误“aidl.exe”以非零退出值 1 完成”。执行此操作的具体说明是什么?【参考方案4】:在我创建了一个 新文件夹 之前,这里的其余帖子对我不起作用。如图所示。
【讨论】:
【参考方案5】:在 build.gradle 中添加这段代码
android
sourceSets
main
aidl.srcDirs = ['src']
重建并导入aidl类
【讨论】:
【参考方案6】:以上答案集中在文件位置上,但您似乎已经正确设置了该位置。我在 Android Studio 中遇到了同样的问题,但列出的答案都没有解决它,我用头撞了一个小时。最终,我意识到我错过了一个明显的导入:
import com.android.vending.billing.IInAppBillingService;
一旦我添加它就解决了这个错误消息。
任何 Google Billing 文档中都没有提到此导入,也没有包含在我找到的任何代码示例中。虽然对于经验丰富的 Java 开发人员来说可能很明显,但刚尝试学习他们的第一个项目的初学者可能需要明确指出。
【讨论】:
【参考方案7】:我们需要添加
创建文件夹 - src/main/aidl/packagename 并将aidl文件放在这个文件夹下。
在aidl 文件中- 提及包名。 包包名
现在清理项目,重建项目——我们可以在app\build\generated\source\aidl\debug\packagename\youraidl.java中生成aidl对应的java文件
【讨论】:
【参考方案8】:我知道这听起来很简单,但我从 google sample all 文件夹中复制粘贴
https://github.com/googlesamples/android-play-billing/tree/master/TrivialDrive/app/src/main
aidl/com/android/vending/billing
复制到项目aidl(我在Android Studio中设置了项目视图)
接下来我清理并重建项目,它找到了一个参考。
【讨论】:
【参考方案9】:我已经尝试了所有解决方案,但问题是 Android Studio 出于任何明显的原因,在包含 AIDL 包的模块的构建类型与设置指定的不同。 从debug 到release,所以其他模块看不到AIDL pkg。 从调试切换到发布并返回,解决了我的问题。
【讨论】:
【参考方案10】:重启 Android Studio 对我有用
我花了一段时间的第二件愚蠢的事情。我将代码放在 Android Studio 上以允许他创建文件,但他创建了一个 .java(如预期的那样)而不是一个 .aidl Jiji,我太傻了
【讨论】:
【参考方案11】:如果所有名称都正确,请转到 Build>rebuild project 它对我有用
【讨论】:
【参考方案12】:我用的是Android Studio 4.1,鼠标右键->新建->AIDL->AIDL文件。 将自动创建一个文件并将其放置在 [src/main/aidl] 文件夹中。如果aidl文件夹不存在,也会创建它。
此功能仅支持 min sdk 16+。我的老项目还是可以支持的,可以临时修改min sdk为16,创建aidl,build项目。生成相关接口和类后,恢复min sdk设置,它也可以正常工作并构建项目。
【讨论】:
以上是关于如何将aidl文件添加到Android工作室(来自应用内计费示例)的主要内容,如果未能解决你的问题,请参考以下文章