' ProductFlavor.resConfigs'有价值的' auto'这是过时的,没有被替换

时间:2018-03-26 18:44:00

标签: android gradle android-gradle build.gradle android-studio-3.1

如何解决以下警告?是否有其他选择?' auto'?

  

警告:DSL元素' ProductFlavor.resConfigs'有价值的' auto'这是过时的,没有被替换。它将在2018年底删除

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

2 个答案:

答案 0 :(得分:8)

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

enter image description here

根据官方建议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,结果如下:

  
      
  • 使用resConfigs "auto"调试APK为:3,793 KB
  •   
  • 使用resConfigs "en"(仅限1种语言)调试APK为:3,294 KB
  •   

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

PS:如果您使用的是Android FirebaseUI,这是建议的优化之一,我已经创建了一个关于该事情的问题here,并且这个问题已经被一个叫做真棒的人解决了SUPERCILEX

答案 1 :(得分:1)

不再支持

auto,因为它在多模块项目中产生了许多问题。相反,您应该指定应用支持的语言环境。 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.