最近我已将我的应用程序更新到最新的 Google Play 计费库 (7.1.1)。之后,当使用 Android 6 和 5 的用户尝试启动计费流程时,我在 Firebase crashlytics 中看到多次崩溃: 致命异常:java.lang.NoSuchMethodError 无虚方法stream()Ljava/util/stream/Stream;在类 Ljava/util/AbstractCollection 中;或其超类(“java.util.AbstractCollection”的声明出现在 /system/framework/core-libart.jar 中)
com.android.billingclient.api.BillingFlowParams.zzq (com.android.billingclient:billing@@7.1.1:21) com.android.billingclient.api.BillingClientImpl.launchBillingFlow (com.android.billingclient:billing@@7.1.1:133)
/**
* Launch the billing flow
*/
public void launchBillingFlow(SkuDetails skuDetails) {
Log.d(TAG, "launchBillingFlow()");
if (null != skuDetails) {
BillingFlowParams.Builder billingFlowParamsBuilder = BillingFlowParams.newBuilder();
billingFlowParamsBuilder.setSkuDetails(skuDetails);
BillingResult br = mBillingClient.launchBillingFlow(this, billingFlowParamsBuilder.build());
if (br.getResponseCode() == BillingClient.BillingResponseCode.OK) {
mBillingFlowInProcess = true;
} else {
Log.d(TAG, "Billing failed: + " + br.getDebugMessage());
}
}
}
有人有同样的问题吗?也许这个问题有什么解决办法吗?
附注我在 proguard 文件中添加了以下内容,但没有帮助:
-保留类 com.android.vending.billing.**
问题追踪器中也报告了此问题,但尚未得到官方回应。
[Play Billing Library 7.1.1] launchBillingFlow() 不适用于 Android 6 (Marshmallow)
正如 @Robert 提到的,Play Billing Library 7.1.1 似乎使用从 Android 7 (Java 8) 开始可用的类。
幸运的是,我们有一台 Android 6 测试设备。我们通过打开 build.gradle.kts 中的脱糖选项进行了测试,如下所示,并确认问题已解决。
我认为这应该记录在 Play Billing Library 7.1.1 发行说明中。
build.gradle.kts
android {
...
compileOptions {
isCoreLibraryDesugaringEnabled = true
}
}
dependencies {
...
implementation( "com.android.billingclient:billing:7.1.1" )
coreLibraryDesugaring( "com.android.tools:desugar_jdk_libs:2.1.2" )
}