Измените папку вывода apk в Gradle 4.1

Я хотел бы изменить APK output folder, и это то, что я использовал:

applicationVariants.all { variant ->
    variant.outputs.all {
        def filePath = "${rootProject.rootDir.absolutePath}/apks/${variant.name}"
        println("My Path: " + filePath)
        outputFileName = filePath
    }
}

Однако он не работал в Gradle 4.1 (предварительный просмотр Android studio 3.0). Вместо того, чтобы генерировать папку как путь выше, он сгенерировал вышеуказанный путь в старой папке debug, как показано ниже:

введите описание изображения здесь

У кого-нибудь есть решение для этого? Спасибо.

Ответ 1

Из руководство по миграции:

Использование API-интерфейса для управления вариантами вывода ломается с новым плагином. Он по-прежнему работает для простых задач, таких как изменение имени APK во время сборки, как показано ниже:


    android.applicationVariants.all { variant ->
        variant.outputs.all {
            outputFileName = "${variant.name}-${variant.versionName}.apk"
        }
    }

Однако более сложные задачи, связанные с доступом к объектам outputFile, больше не работают. Это потому, что на этапе конфигурации больше не создаются конкретные задачи. Это приводит к тому, что плагин не знает все свои выходы спереди, но это также означает более быстрое время настройки.

Ответ 2

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

applicationVariants.all { variant ->
    variant.outputs.all {
        def apk = output.outputFile;
        def newName = apk.name.replace(".apk", "-v" + variant.versionName + "-RELEASE.apk");
        newName = newName.replace("-" + variant.buildType.name, "");

        outputFileName = file("/" + newName)
    }
}

С этим я получаю apk в: ".../выходы/APK/flavorName/buildTypeName/xxx.apk"

Надеюсь, это поможет вам.

Ответ 3

Это обходной путь для сохранения пути вывода после обновления до gradle 4.x.

applicationVariants.all { variant ->
    variant.outputs.all {
        outputFileName = "../" + outputFileName
    }
}

теперь apk создается на платформах/android/build/output/apk/android-release.apk