Android: как сбросить resConfigs для варианта выпуска?

Чтобы ускорить разработку, я хочу сделать следующее:

android {
    defaultConfig {
        resConfigs "en"
    }
}

В моем приложении много языков, и это значительно экономит время при разработке. Однако я НЕ хочу выпускать версию с этим набором. К сожалению, resConfigs недоступен для вариантов продуктов или типов сборки, поэтому я не могу установить его, например, в debug {}.

Как я могу автоматически исключить resConfigs из вариантов выпуска? Я не хочу помнить, что нужно комментировать эту строку кода при сборке для выпуска.


person AutonomousApps    schedule 15.02.2017    source источник


Ответы (2)


Мое решение было вдохновлено этим ответом на связанный вопрос. Вот как это сделать:

в app/build.gradle

// Reset `resConfigs` for release
afterEvaluate {
    android.applicationVariants.all { variant ->
        if (variant.buildType.name.equals('release')) {
            variant.mergedFlavor.@mResourceConfiguration = null
        }
    }
}

Это работает, потому что mResourceConfiguration является резервным полем для resConfigs. К сожалению, Android Gradle DSL в настоящее время не предоставляет метод для сброса resConfigs, поэтому мы вынуждены обращаться к полю напрямую, используя синтаксис Groovy @<fieldName>. Это работает, несмотря на то, что mResourceConfiguration является частным.

ВНИМАНИЕ: это решение немного хрупкое, так как команда инструментов сборки Android Gradle может изменить имя этого поля в любое время, поскольку оно не является частью общедоступного API.

person AutonomousApps    schedule 15.02.2017
comment
Решение не сработало для меня, были ли критические изменения с gradle? variant.mergedFlavor.resourceConfigurations.clear() все же сработало. - person Henning; 15.03.2018
comment
Я успешно использовал это в более старой версии плагина Android Gradle (AS 2.x). Я не пробовал это с AS 3.x и инструментами сборки 3.x. - person AutonomousApps; 16.03.2018

Разве это не сработает?

Обнаружьте отладочную сборку, сбросьте настройки и добавьте желаемую отладочную конфигурацию.

applicationVariants.all { variant ->
    if (variant.buildType.name == "debug") {   
        variant.mergedFlavor.resourceConfigurations.clear()
        variant.mergedFlavor.resourceConfigurations.add("en")
    }
}
person darken    schedule 03.03.2017
comment
resourceConfigurations не является открытым членом variant.mergedFlavor. - person AutonomousApps; 06.03.2017
comment
@AutonomousApps У меня работает. Какую версию Gradle вы используете? - person darken; 06.03.2017
comment
Старый. Инструменты 2.1.2 и Gradle 2.14. - person AutonomousApps; 06.03.2017