构建多个产品风味太慢了。

15

我有一个问题,当我继续添加新口味时,构建所需的时间越来越长。我是这样添加口味的:

productFlavors {
   okapps {
      applicationId = 'cz.anywhere.okapps'
      signingConfig = AdamSigningVariable
      versionCode = 41
      versionName = "3.0.1"

      android.sourceSets {
         okapps.res.srcDirs = ['src/adam_okapps_resources/res', 'src/okapps/res']
      }
   }
   ...
   ...
}

当我注释掉其他的版本并只保留一个进行编译时,大约需要10秒钟。但是当我编译所有版本(大约有180个版本)时,需要近5分钟的时间。


已更新最新的实验性Gradle插件,但性能仍然不佳。在我的情况下,动态生成大约300个产品风味(debug + release)需要在MacBook Pro 2015上使用Intel Core i5 2.7GHz和8GB RAM花费3到4.5分钟。 - Farley
1个回答

15

您可以尝试忽略您未使用的其他产品风格,我们按照以下方式执行:

将以下内容添加到build.gradle文件中:

android {
    productFlavors{
    .
    .
    .
    }

    if (project.rootProject.file('dev.props').exists()){
        def devProps = new Properties()
        devProps.load(project.rootProject.file('dev.props').newDataInputStream())
        def currentDevFlavor = devProps.DEV_FLAVOR

        android.variantFilter { variant ->
            def flavorName = variant.getFlavors().get(0).name
            if(currentDevFlavor  && !flavorName.equals(currentDevFlavor)) {
                variant.setIgnore(true);
            }
        }
    }
}

然后添加一个名为dev.props的文件,并在其中添加一行 DEV_FLAVOR=aflavorname

这样,当您同步时,gradle将表现得像只有一个品味,您不需要注释任何内容。

您还可以将dev.props添加到.gitignore中。


我遇到了与 OP 相同的问题。这对我非常有帮助。谢谢! - archonic
我需要每次更改口味时都更改aflavorname吗?还是可以根据所选口味使其动态变化? - Ibrahim Gharyali
1
好的...一旦你添加了aflavorname,你就不能改变口味...所以我猜每次你想改变口味时都必须更改它,而且你无法动态地更改它。 - MTZ4
1
我打算把它装裱起来挂在墙上,完美无缺的东西 :) - Vahit Keskin
可以将多个客户端添加到dev.props吗?DEV FLAVOR=android1、android2、android3。 - Vahit Keskin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接