Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 构建过程中包含的自定义活动风味特定渐变任务_Android_Gradle_Build.gradle_Android Productflavors_Gradle Task - Fatal编程技术网

Android 构建过程中包含的自定义活动风味特定渐变任务

Android 构建过程中包含的自定义活动风味特定渐变任务,android,gradle,build.gradle,android-productflavors,gradle-task,Android,Gradle,Build.gradle,Android Productflavors,Gradle Task,根据Android Gradle构建环境: 目前,我通过“readVersions”gradle任务从本地Version.properties文件中读取版本代码和版本名。我正在为我的应用程序添加口味。这些口味需要不同的版本。因此,我考虑将两个不同的version.properties文件放在特定于味道的目录中(例如,一个/version.properties,两个/version.properties),放在特定于味道的“res”和“src”目录旁边 我有一个readVersions任务: ta

根据Android Gradle构建环境:

目前,我通过“readVersions”gradle任务从本地Version.properties文件中读取版本代码和版本名。我正在为我的应用程序添加口味。这些口味需要不同的版本。因此,我考虑将两个不同的version.properties文件放在特定于味道的目录中(例如,一个/version.properties,两个/version.properties),放在特定于味道的“res”和“src”目录旁边

我有一个readVersions任务:

task readVersions() {
    def Properties versionProps = new Properties()
    def versionPropsFile = file('version.properties')
    if (versionPropsFile.exists())
        versionProps.load(new FileInputStream(versionPropsFile))
    def v_code = (versionProps['VERSION_CODE'] ?: "0").toInteger()
    def v_name = versionProps['VERSION_NAME']

    // Set
    versionCode v_code
    versionName v_name
}

project.afterEvaluate {
    preBuild.dependsOn readVersions
}
我希望有一个新的readVersions任务,它包含了flavor,这样我就可以在访问“flavor”目录中的“version.properties”文件时使用它

我试过:

android.productFlavors.all{ flavor ->
    task ("${flavor.name}_readVersions")<<{
    def versionPropsFile = file(flavor.name+'/version.properties')
...
对于那些建议重组并找到更简单解决方案的人。我的生成过程当前对这些version.properties文件具有其他依赖关系。我可以在两个地方定义版本代码和版本名(例如,在“flavor”中以及flavor的version.properties文件中,但我确实需要干配置)

我将“readVersions”任务分为“readVersionName”和“readVersionCode”

然后我在每种口味的定义中运行它们:

productFlavors {
    one {
        versionName getVersionName("one")
        versionCode getVersionCode("one")
    }
    two {
        versionName getVersionName("two")
        versionCode getVersionCode("two")
    }
需要注意的是,我以前的尝试是尝试将versionName和versionCode设置合并到预构建任务的依赖项中。在这个过程中,“versionName”似乎无法再正确设置。我的任务不是从正确的风格设置它,这就是为什么我想出了另一个解决方案,但设置后读取它总是“空”

感谢Commonware的评论和建议。

我将“readVersions”任务分为“readVersionName”和“readVersionCode”

然后我在每种口味的定义中运行它们:

productFlavors {
    one {
        versionName getVersionName("one")
        versionCode getVersionCode("one")
    }
    two {
        versionName getVersionName("two")
        versionCode getVersionCode("two")
    }
需要注意的是,我以前的尝试是尝试将versionName和versionCode设置合并到预构建任务的依赖项中。在这个过程中,“versionName”似乎无法再正确设置。我的任务不是从正确的风格设置它,这就是为什么我想出了另一个解决方案,但设置后读取它总是“空”


感谢Commonware提供的意见和建议。

没有“主动风味”。你的
build.gradle
文件无法生成你的应用程序。你的
build.gradle
文件构建了一个如何构建你的应用程序的对象模型。构建对象模型的工作。对于这两种口味,您都需要
dependsOn
,其中相应的特定口味任务取决于您自定义的特定口味任务。是的,我理解这一点。这就是为什么我试图在我的“概念”描述中强调这一部分。你明白我想做什么吗?你知道如何建立一个对象模型来实现我的目标吗?如果没有的话,我可以尝试进一步定义我的目标。我不太确定是否要为口味创建一组自定义的“dependsOn”,因为合适的口味特定任务取决于您的自定义口味特定任务。如果我最后有10或20种口味呢?我只想从${flavor.Name}/version.properties文件中获取本地versionCode/Name。我真的需要20个自定义任务来实现这一点吗?“我真的需要20个自定义任务来实现这一点吗?”--是的。不过,您不一定需要20个手动生成的自定义任务来实现这一点。使用
productFlavors.all
,您似乎走上了正确的道路,不过我认为可能需要使用
buildVariants.all
。但随后你开始谈论“active flavor的任务”,并偏离了轨道。在您的循环中,获取您想说依赖于这个新生成的任务的特定于味道的任务。现在,我的情况稍微简单一些,我只是基于
Jar
任务配置一个任务实例,而不是完全手工制作。这就是为什么我要发表评论,因为我没有一个完整的答案给你。也许解决方案是定义一个处理任意风格的“通用”任务,然后在循环中设置该通用任务的特定风格实例,并设置
dependsOn
。没有“活动风格”。你的
build.gradle
文件无法生成你的应用程序。你的
build.gradle
文件构建了一个如何构建你的应用程序的对象模型。构建对象模型的工作。对于这两种口味,您都需要
dependsOn
,其中相应的特定口味任务取决于您自定义的特定口味任务。是的,我理解这一点。这就是为什么我试图在我的“概念”描述中强调这一部分。你明白我想做什么吗?你知道如何建立一个对象模型来实现我的目标吗?如果没有的话,我可以尝试进一步定义我的目标。我不太确定是否要为口味创建一组自定义的“dependsOn”,因为合适的口味特定任务取决于您的自定义口味特定任务。如果我最后有10或20种口味呢?我只想从${flavor.Name}/version.properties文件中获取本地versionCode/Name。我真的需要20个自定义任务来实现这一点吗?“我真的需要20个自定义任务来实现这一点吗?”--是的。不过,您不一定需要20个手动生成的自定义任务来实现这一点。使用
productFlavors.all
,您似乎走上了正确的道路,不过我认为可能需要使用
buildVariants.all
。但随后你开始谈论“active flavor的任务”,并偏离了轨道。在您的循环中,获取您想说依赖于这个新生成的任务的特定于味道的任务。现在,我的情况稍微简单一些,我只是基于
Jar
任务配置一个任务实例,而不是完全手工制作。这就是为什么我要发表评论,因为我没有一个完整的答案给你。也许解决方案是定义一个“通用”任务
productFlavors {
    one {
        versionName getVersionName("one")
        versionCode getVersionCode("one")
    }
    two {
        versionName getVersionName("two")
        versionCode getVersionCode("two")
    }