Nano Hash - криптовалюты, майнинг, программирование

Как установить имя файла .apk и пакет в build.gradle? Плагин Android Gradle 3.0

В соответствии с моими требованиями CI я пытаюсь добиться двух вещей:

  • установить имя файла apk в формате: .apk
  • установить папку для сгенерированного файла .apk: app/build/outputs/apk/myBuild.apk

Я использовал плагин Android Gradle 2.3 и получил следующий скрипт для управления задачей выше (он работал правильно для плагина Gradle 2.3):

applicationVariants.all {
        variant ->
            variant.outputs.each { output ->
                output.outputFile = new File(
                        output.outputFile.parent,
                        variant.productFlavors.get(0).name + variant.buildType.name + ".apk")
            }

Теперь я получил следующий код (согласно последним обновлениям в плагине android gradle 3.0):

applicationVariants.all { variant ->
        variant.outputs.all { output ->
            logger.debug("fileNameParent", output.outputFile.parent)
            outputFileName = new File(
                    "apk/",
                    outputFileName.replace(".apk", "MyBuild.apk"))
        }

И получил следующую структуру (см. рисунок):

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

P.S. Я прочитал руководство по миграции плагина Android Gradle, но это не помогло мне достичь моей цели :(


Ответы:


1

Первая часть вопроса: как сгенерировать имя файла.

applicationVariants.all { variant ->
        variant.outputs.all { output ->
            outputFileName = new File("${variant.productFlavors.get(0).name}${variant.buildType.name}.apk")
        }

Вторая часть вопроса: как задать path.

Согласно документации это невозможно:

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

13.11.2017
  • На старой версии работало, как теперь это сделать, а на новых не работает? 27.05.2018

  • 2

    это правильный код:

    applicationVariants.all { variant ->
        variant.outputs.all{
            outputFileName = outputFileName.replace("app-${variant.buildType.name}.apk", ${variant.productFlavors.get(0).name} + "-" + ${variant.buildType.name} + ".apk")
        }
    }
    

    имейте в виду, что вы должны поместить этот код в файл приложения build.gradle в раздел android{ }, а не в android{ buildTypes{ debug/release{ }}} разделы

    Это вернется для:

    отладочная сборка:

    app-debug.apk >> ИМЯ_ВАШЕГО_ПРОДУКТА-debug.apk

    выпуск сборки:

    app-release.apk >> YOUR_PRODUCT_NAME-release.apk

    не используйте outputFileName = new File(), иначе у вас возникнут проблемы с манипулированием вариантным API

    16.11.2017
  • Почему я должен заменить файл вместо создания файла? Я протестировал приведенный выше код, и он работает так, как ожидалось. 16.11.2017
  • Я протестировал приведенный выше код, и он работает так, как ожидалось. Объясните, пожалуйста, какие манипуляции вы имеете в виду. 16.11.2017
  • Привет @SlavaSotone. Я имею в виду варианты манипуляций с API (плагина gradle v3.0.0), которые вы указали в своем посте: ссылка 24.11.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..