我有一个用 flutter 编写的应用程序,并将其发布在 App Store 和 Play Store 上。我只想在 iOS 上使用应用程序购买,而不想在 Android 上使用它。我不希望生成的 APK 和应用程序包在清单文件中包含 com.android.vending.BILLING 权限。理想情况下,生成的 APK 和应用程序包不应包含任何 Google Play 商店的计费库。我怎样才能实现这个目标?如果我只使用 in_app_purchase_storekit 和 in_app_purchase_platform_interface 包,而不使用 in_app_purchase 包,我可以实现吗?当我尝试添加此代码时,它失败了。因为 InAppPurchase 是在 in_app_purchase 包中定义的。
final InAppPurchase inAppPurchase = InAppPurchase.instance;
在Android中,当项目构建时,各个AndroidManifest.xml文件被合并在一起,以确保单个Application AndroidManifest.xml文件。从而导致此权限被添加到您的最终二进制文件中。幸运的是,有一种方法可以排除此权限定义以达到您想要的结果。 Android 文档管理清单文件对此进行了讨论。
最好使用 Android Studio 来执行此操作,因为有一种方法可以在构建最终 APK 之前查看合并清单。 Android Studio 有一个名为 Merged Manifest 的视图。
在应用程序的 AndroidManifest.xml 中,您需要添加以下行。
在清单顶部,编辑该行,如下所示:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
明确地,您需要添加行
xmlns:tools="http://schemas.android.com/tools"
。这使 AndroidManifest 能够访问这些工具。
然后在定义其他权限的地方,包含 BILLING 权限,如下所示:
<uses-permission android:name="com.android.vending.BILLING" tools:node="remove"/>
具体的部分是
tools:node="remove"
,它告诉合并工具如果发现该权限则删除该权限。合并后的 AndroidManifest 将不再具有 BILLING 权限。当您构建 APK/AppBundle 时,可以在 Android Studio 中的 MergedManifest 视图或最终的 AndroidManifest.xml 中验证这一点。
Dart/Flutter 代码和 Android Billing 库仍然存在,但因为您已通过删除权限告诉 Android 您不会进行 Billing,所以您应该可以提交。
如果没有,请在评论中告诉我,我可以尝试进一步提供帮助。