Нет такого свойства: betaDistributionApkFilePath для класса: java.lang.String

Я обнаружил небольшой сбой в настройке crashlytics/fabric в Gradle, который занял 2 часа моей бедной жизни.

прежде всего я сделал все, что они сказали в этом руководстве: https://fabric.io/kits/android/crashlytics/install

а вот кусок кода который все вызвал:

Первая попытка

dependencies {
      ...

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

каждая версия библиотеки в блоке dependencies{} использует блок 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.gradle в dependencies{} измените нашу полосу на эту, чтобы у нас не было ext{} для версии

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

и теперь в нашем корневом градиенте appname/build.gradle

buildscript {
    ext.fabric_gradle = '2.9.4@aar'

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

Сборка ОК, вы можете продолжать работу. Но что? Он должен быть полностью одинаковым...

Третья попытка

Я не знаю почему, но в нашей первой попытке вы просто CANT в 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
}

Сборка ОК. Магия.

или просто делайте это как обычно и не пытайтесь делать умные вещи... В качестве первого блока кода в этом длинном расследовании, который также отлично работает:

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

person Kebab Krabby    schedule 15.08.2018    source источник
comment
Майк из Fabric здесь. Спасибо, что поделились этим, раньше я не видел, чтобы это было проблемой, но я также ценю, что вы поделились своим ответом. Вы можете опубликовать это как ответ ниже.   -  person Mike Bonnell    schedule 20.08.2018
comment
Что именно я должен опубликовать в качестве ответа?   -  person Kebab Krabby    schedule 21.08.2018
comment
Твоя третья попытка?   -  person Mike Bonnell    schedule 21.08.2018


Ответы (1)


Вы просто НЕ МОЖЕТЕ в блоке 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
}

Сборка ОК.

или просто сделайте это обычным способом:

compile('com.crashlytics.sdk.android:crashlytics:2.9.4@aar') {
  transitive = true;
}
person Kebab Krabby    schedule 22.08.2018