Распространение приложений Firebase с разбиениями apk не может найти apk - PullRequest
0 голосов
/ 14 июля 2020

Пытаюсь согнуть раздачу приложений firebase для работы с разбиениями apk. Он почти у меня есть, но моя проблема в следующем:

Could not find the APK. Make sure you build first by running ./gradlew assemble[Variant], 
or set the apkPath parameter to point to your APK

Моя задача

task firebaseAllEnvRelease() {
        group = "publishing"

        dependsOn ordered(
                ":printVersionCode",
                ":foo:app:assembleAllRelease"
                ":foo:app:firebasePublishAllEnvRelease")
    }

По какой-то причине задача firebase запускает проверку apk (не загружает) заранее, перед сборкой, поэтому очевидно, что apk отсутствует - как я могу заставить его соблюдать порядок задач?

Я знаю, что gradle создает график задач, хотя ему нравится , но у меня есть утилита ordered for what, который связывает их через mustRunAfter, и это точно правильно.

План б - запустить сборку в отдельной команде gradlew перед этим, это работает, но - почему: /

1 Ответ

0 голосов
/ 04 августа 2020

Проблема в том, что плагин gradle

  1. не объявляет зависимости от задачи assemble (в общем, независимо от разбиения apk по соглашению gradle, вы не должны просто "ожидать", что там будут apks)

  2. не генерирует задачи на разбиение apk - но вы делаете это для вкусов

Итак, вот это работа для этого:

// Generate firebase app distribution task variants for all abis
applicationVariants.all { variant ->
variant.outputs.all { output ->
def abi = output.getFilter(com.android.build.OutputFile.ABI)

if (abi == null) return
def abiName = abi.replace("_", "").replace("-", "")
task("appDistributionUpload${abiName.capitalize()}${variant.name.capitalize()}", type: com.google.firebase.appdistribution.gradle.UploadDistributionTask_Decorated) {
appDistributionProperties = new com.google.firebase.appdistribution.gradle.AppDistributionProperties(
new com.google.firebase.appdistribution.gradle.AppDistributionExtension(),
project,
variant
)
appDistributionProperties.apkPath = output.outputFile.absolutePath
appDistributionProperties.serviceCredentialsFile = project.file("secrets/ci-firebase-account.json")
appDistributionProperties.releaseNotes = abi
appDistributionProperties.groups = "ra-testers"
 
// Add dependsOn respective assemble task, so it actually
// builds apk it wants to upload, not just expect it to be there
dependsOn "assemble${variant.name.capitalize()}"
}
}
}
...