0

我在 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{}块 iam 中的每个库版本都使用ext{}appname/app/build.gradle

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

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

第二次尝试

在我们的appname/app/build.gradleindependencies{}改变我们的车道,所以我们没有ext{}版本

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

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

buildscript {
    ext.fabric_gradle = '2.9.4@aar'

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

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

第三次尝试

我不知道为什么,但在我们的第一次尝试中,你只是不能在块名称crashlytics变量中使用它,除了crashlytics之外的所有其他内容,例如crashlytics_version,所以让我们先尝试进入工作状态。appname/app/build.gradle ext{}

ext {
    crashlytics_version = '2.9.4@aar'
}

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

构建是好的。魔法。

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

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

1 回答 1

4

您只是不能在块名称中命名您的变量crashlytics它必须是除了crashlytics之外的所有其他内容,例如crashlytics_version所以:appname/app/build.gradle ext{}

ext {
    crashlytics_version = '2.9.4@aar'
}

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

构建是好的

或者只是以正常方式进行:

compile('com.crashlytics.sdk.android:crashlytics:2.9.4@aar') {
  transitive = true;
}
于 2018-08-22T08:54:21.243 回答