'ProductFlavor.resConfigs' 的值 'auto' 已过时且未被替换

'ProductFlavor.resConfigs' has a value 'auto' which is obsolete and has not been replaced

如何解决下面的警告? 'auto' 有其他替代方案吗?

Warning:DSL element 'ProductFlavor.resConfigs' has a value 'auto' which is obsolete and has not been replaced. It will be removed at the end of 2018

android {
    ...
    flavorDimensions "device", "paid", "market"
    productFlavors {
        phone {
            // Phone config version for the application
            resConfigs ("auto")
            dimension "device"
            matchingFallbacks = ['mobile']
        }
        ...     
    }
    ...
}

auto 不再受支持,因为它对 multi-module 项目造成了一些问题。相反,您应该指定您的应用程序支持的语言环境。 Android 插件 3.1.0 及更高版本忽略 auto 参数,并且 Gradle 打包您的应用及其依赖项提供的所有字符串资源。

com.android.tools.build:gradle:3.2.0-alpha08 BaseFlavor.java

 * <p><b>Note:</b> <code>auto</code> is no longer supported because it created a number of
 * issues with multi-module projects. Instead, you should specify the locale that your app
 * supports, as shown in the sample above. Android plugin 3.1.0 and higher ignore the <code>auto
 * </code> argument, and Gradle packages all string resources your app and its dependencies
 * provide.

这是更新到 Android Studio 3.1 后的错误:

根据官方建议 here 如果您支持所有语言,最好的办法是完全删除标签,或者提供一个包含您的应用支持的语言代码的数组,例如:

resConfigs "en", "de", "it", "fr" // etc. etc.

更多信息:

这是官方文档提出的资源优化之一 here 所以我决定用示例项目中的那些 FirebaseUI 依赖项测试这个标志

implementation "com.firebaseui:firebase-ui-auth:$firebase_ui_version"
implementation "com.firebaseui:firebase-ui-database:$firebase_ui_version"
implementation "com.firebaseui:firebase-ui-storage:$firebase_ui_version"

使用选项和结果创建调试 APK:

  • Using resConfigs "auto" the debug APK was: 3,793 KB
  • Using resConfigs "en" (so 1 language only) the debug APK was: 3,294 KB

这意味着使用这些依赖项的所有语言的所有字符串资源我只增加了约 500KB 的大小。这是你可以推理的事情,你绝对应该对你使用的依赖项进行测试,看看大小增加是否可以忽略不计,然后决定提供支持的语言列表或删除 resConfigs 选项。

PS:如果您正在使用 Android FirebaseUI,这是建议的优化之一,我已经创建了一个问题 here 关于这件事,这有马上就被那个叫 SUPERCILEX

的帅哥解决了