没有这样的 属性:class 的 betaDistributionApkFilePath:java.lang.String

No such property: betaDistributionApkFilePath for class: java.lang.String

我在 gradle 的 crashlytics/fabric 设置中发现了一些小故障,这花了我 2 个小时的时间。

首先我做了他们在本指南中所说的一切: https://fabric.io/kits/android/crashlytics/install

这里是一切都导致的代码片段:

先试试

dependencies {
      ...

      compile('com.crashlytics.sdk.android:crashlytics:2.9.4@aar') {
        transitive = true;
      }
}

dependencies{} 中的每个库版本都使用 appname/app/build.gradle 中的 ext{} 块,所以在我们的例子中

ext {
    crashlytics = '2.9.4@aar'
}

所以最后它会像这样只改变 implementation 在我看来应该存在,因为它将在 2018 年底被弃用。implementations 不要改变任何行为。

implementation("com.crashlytics.sdk.android:crashlytics:$crashlytics"){
    transitive = true
}

但是如果你尝试构建这个你会得到:

No such property: betaDistributionApkFilePath for class: java.lang.String

哇。我不知道为什么.. 但让我们调查一下。我们将尝试不同的设置,因此忘记您在上面看到的一切。

第二次尝试

dependencies{} 中的 appname/app/build.gradle 中将我们的通道更改为此,因此我们没有 ext{} 版本

implementation("com.crashlytics.sdk.android:crashlytics:$rootProject.ext.crashlytics") {
    transitive = true
}

现在在我们的根 gradle appname/build.gradle

buildscript {
    ext.fabric_gradle = '2.9.4@aar'

    repositories {
      ...
    }
    dependencies {
      ...
    }
}

Build OK 你可以继续工作了。但是什么?应该是完全一样的...

第三次尝试

我不知道为什么,但在我们的第一次尝试中,您只是 CANT in appname/app/build.gradle ext{} 块名称 crashlytics 变量,除了 crashlytics 之外,其他所有变量都必须如此 crashlytics_version 所以让我们先尝试工作状态。

ext {
    crashlytics_version = '2.9.4@aar'
}

implementation("com.crashlytics.sdk.android:crashlytics:$crashlytics_version"){
    transitive = true
}

构建 OK。魔法.

或者只是以正常的方式去做,不要尝试做聪明的事情....作为这个长期调查中的第一个代码块,它也完全可以正常工作:

compile('com.crashlytics.sdk.android:crashlytics:2.9.4@aar') {
  transitive = true;
}

你只需 CANTappname/app/build.gradle ext{} 块中命名你的变量 crashlytics 它必须是其他一切除了 crashlytics 例如 crashlytics_version 所以:

ext {
    crashlytics_version = '2.9.4@aar'
}

implementation("com.crashlytics.sdk.android:crashlytics:$crashlytics_version"){
    transitive = true
}

构建 OK.

或者以正常方式进行:

compile('com.crashlytics.sdk.android:crashlytics:2.9.4@aar') {
  transitive = true;
}