不同的产品风格可以有不同的build.gradle吗?

4
我正在开发的项目既可以在亚马逊设备上使用,也可以在Android设备上使用。这两部分的代码基本相同,占到了95%以上。所以我想到使用产品风格将它们合并为一个项目。(如果有更好的解决方案,请告诉我)
但是我遇到了一个问题,就是在build.gradle中的buildscript和android属性需要不同的值,才能适用于亚马逊和Android。 例如,我需要这个来适用于Android: dependencies { classpath 'com.android.tools.build:gradle:1.1.3' } 而这个则适用于亚马逊: dependencies { classpath 'com.amazon.device.tools.build:gradle:1.0.0' } 同样的,compileSdkVersion和buildToolsVersion也是如此。
如果我需要为每个平台分别编写两个不同的build.gradle文件,那么我该如何根据构建风格自动选择其中一个呢?(我不确定是否真的可行)
如果不行,那么是否有更好的解决方法,可以将所有内容放在同一个项目中呢?
先感谢您的帮助。

1
根据亚马逊文档,com.amazon.device.tools.build:gradle 的目的是修复一年前已经解决的错误。你是否尝试过使用常规的 Android Gradle 插件,或许是比你上面列出的版本更新的版本(例如 com.android.tools.build:gradle:1.3.0)?我不知道你是否可以针对每个 flavor 覆盖 compileSdkVersionbuildToolsVersion - CommonsWare
我刚试过了,但是这个 XML 命名空间无法检索 "http://schemas.android.com/apk/res/amazon"。 - Siva Kumar
1个回答

4

这本应该是一条注释,但是太长了。
如果它没有提供帮助的话,我将删除它。

据我所知,你不能为产品风格使用不同的build.gradle文件。
然而,你应该能够设置 buildscriptcompileSdkVersion 的条件。

虽然不是很干净,但你可以使用类似于以下内容:

buildscript {
    repositories {
        jcenter()
        mavenCentral()
    }
    if (condition) {
        dependencies {
            classpath 'com.android.tools.build:gradle:1.3.0+'
        }
    } else if (condition) {
        dependencies {
            classpath 'com.amazon.device.tools.build:gradle:1.1.3'
        }
    }
}

android {
    if (condition) {
        compileSdkVersion 23
    } else if (condition) {
        compileSdkVersion "Amazon.com:Amazon Fire Phone SDK Addon:XX"            
    }
  //...
}

谢谢Gabriele。但是,我如何基于产品风味获取条件,因为buildscript和android在此之前执行(如果我说错了,请纠正我)? - Siva Kumar
1
@SivaKumar 是的。您无法根据口味获取条件。但是(很丑...我知道),您可以在 gradle.properties 中使用属性或在顶层文件中使用变量。类似于 type = google|amazon,然后 if (project.type == "google") { - Gabriele Mariotti
@GabrieleMariotti但是在我在gradle.properties中指定了类型之后,我该如何在build.gradle文件中选择特定类型? - FabioR

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