如何将 aidl 文件添加到 Android 工作室(从应用程序内计费示例)

我目前正在将一个 Eclipse 应用程序迁移到 Android Studio。 这个应用程序使用的是在应用程序收费。

我的主要问题是编译项目和 aidl 文件(我猜你们都使用 这份文件)

我得到这个错误消息:

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

因此,根据一些教程,我将这个文件从 com.mypackage.billing 移动到 src/main/aidl (见 这个参考)

但是一旦我这么做了,我就会收到这样的信息:

任务“ : xxxxxxxxxxx: 尾编译 DebugAidl”执行失败。

运行命令失败: C: UserxxxxxAndroidStudioProjects xxxxxxxProject xxxxxxxsrc main aidl IInAppBillingService.aidl: 45(...)用户 xxxx AndroidStudioProjects xxxxxxxxxProject xxxxxxxxxxsrc 主要帮助 IInAppBillingService.aidl: 45 接口 IInAppBillingService 应该在名为 Com xxxxxxxx 计费 IInAppBillingService.aidl。

这条信息显然与我上面链接的 Google bug 页面上的帖子相矛盾。

有人成功地让这个救助文件工作,可以帮助我吗?

enter image description here

仅供参考,我点击了以下链接:

93502 次浏览

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

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

加上这个作为一个答案,因为它似乎帮助了相当多的人。

  1. 在‘ src/main/’下创建一个名为‘ aidl’的新目录
  2. 将新包 name‘ Com.android 自动贩卖,计费’添加到目录‘ Src/main/aidl’中
  3. 找到您的 sdk 位置,并去“ sdk 额外的谷歌播放 _ 计费”。Sdk 的默认位置是“ C: Program Files (x86) Android Android-sdk”。如果您自定义更改了它,那么您必须通过 sdk 管理器确定位置。
  4. 将“ IInAppBillingService.aidl” 复制到上面创建的包中。

Screenshot of result

  1. 重建 项目,应该就可以了。

注意: 如果引用不起作用,请确保包含必要的导入

import com.android.vending.billing.IInAppBillingService;

Https://issuetracker.google.com/issues/36973270

编辑评论

在我这样做之后,我的代码中对 IInAppBillingService 的引用仍然被高亮显示为错误,但是在重新构建应用程序之后,该类被识别出来

  • 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 工作室菜单转到 Build,单击 Rebuild Project。这将在 App_Name/app/build/generated/source/aidl/debug/com/android/vending/billing中生成 IInAppBillingService.java文件。这样问题就解决了。

上面的答案主要集中在文件位置,但似乎您已经正确地设置了该位置。我在安卓工作室遇到过同样的问题,但是列出的答案没有一个能解决它,我用头撞了一个小时。最终,我意识到自己忽略了一个显而易见的重要因素:

 import com.android.vending.billing.IInAppBillingService;

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

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

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

我们需要加上

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

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

现在清理项目,重建项目-我们可以为在应用程序生成中生成的 aidl 对应的 java 文件生成源 aidl 调试包,命名为 youraidl.java

在 build.gradle 中添加此代码

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

重新生成并导入 aidl 类

重启安卓工作室对我来说很管用

第二件傻事花了我不少时间。我把代码放到了 Android Studio 上,让他创建文件,但是他创建了一个。而不是 java (正如预期的那样)。阿吉,我真笨

这里的其他帖子并不适合我,直到我创建了一个像这里所示的 新文件夹

enter image description here

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

Https://github.com/googlesamples/android-play-billing/tree/master/trivialdrive/app/src/main

Aidl/com/android/vending/billing

拷贝到 project aidl 中(我在 Android Studio 中设置了 project view)

接下来我清理和重建项目,它发现了一个参考。

如果所有名称都正确,请转到 Build > Build project 对我很有效

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

此函数只支持 min sdk 16 + 。我的旧项目仍然可以支持,您可以临时修改的分钟 sdk 为16,创建援助和建设项目。生成相应的接口和类后,恢复最小 sdk 设置,也可以很好地工作和构建项目。