摇篮productflavors sourcesets老项目结构摇篮、结构、项目、sourcesets

2023-09-05 08:41:27 作者:爷不疼你谁疼你~

今天,我开始将我们的项目中使用的摇篮构建系统。我不能改变项目结构,我有不同的口味,所以我想知道我怎么能覆盖sourceset的开发和刺,因为这显然不工作:

  buildscript {
    库{
        mavenCentral()
    }

    依赖{
        类路径com.android.tools.build:gradle:0.4.2
    }
}

应用插件:'机器人'

安卓{
    compileSdkVersion 17
    buildToolsVersion17

    依赖{
        编制项目(:ABS)
        编制项目(:谷歌播放services_lib)
        编制项目(:MergeAdapter)
        编译文件树(导演:库,包括:的* .jar)
    }

    signingConfigs {
        推出 {
            storeFile文件(myapp.keystore)
                    storePassword**********
                    keyAlias​​**********
                    keyPassword**********
        }
    }

    sourceSets {
        主要 {
            manifest.srcFile的Andr​​oidManifest.xml
            java.srcDirs = ['src'中]
            resources.srcDirs = ['src'中]
            aild.srcDirs = ['src'中]
            renderscript.srcDirs = ['src'中]
            res.srcDirs = ['水库']
            assets.srcDirs = ['资产']
        }

        开发{
            java.srcDirs = ['SRC-dev的']
        }

        督促{
            java.srcDirs = ['SRC-PROD']
        }

        instrumentTest.setRoot(测试)
    }

    productFlavors {
        开发{
            软件包名com.myapp.dev
        }

        督促{
            软件包名com.myapp
        }
    }

    buildTypes {
        推出 {
            signingConfig signingConfigs.release
        }
    }
}
 

这使我有以下错误:

 与名称与该名称已存在无法添加AndroidSourceSet'开发'作为AndroidSourceSet。
 

关键是,我不能使用新的项目结构,我坚持这一条,让我怎么重写源代码目录在这里,所以它包括了开发版本,SRC-dev的并为PROD版本SRC (而不是钢骨混凝土/主/ java和SRC的/ dev / java或SRC /生产/ JAVA)-prod

THX!

编辑:SRC-PROD和SRC-dev的目录中只包含类与用于指向不同的环境常数。我会做同样的资产(用于开发ENV不同的图标)

解决方案 滨博微课堂丨市级示范项目 渔绳结 技艺体验课程 编中结

您需要首先声明你的口味,然后自定义sourceSets。

会发生什么事是,当你自定义创建android.productFlavors.dev它试图创建一个匹配android.sourceSets.dev和失败(因为它已经存在),当它创建android.sourceSets.dev,但随后

我们无法真正知道已创建sourceSet,就是要同样的事情,所以我们不能,而不是潜在的使用sourceSet为味道,当你的意思是要用于别的东西。

Today I started converting our project to use the gradle build system. I can't change the project structure, and I have different flavors, so I was wondering how I could override the sourceset for "dev" and "prod", because this apparently doesn't work:

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:0.4.2'
    }
}

apply plugin: 'android'

android {
    compileSdkVersion 17
    buildToolsVersion "17"

    dependencies {
        compile project(':ABS')
        compile project(':google-play-services_lib')
        compile project(':MergeAdapter')
        compile fileTree(dir: 'libs', include: '*.jar')
    }

    signingConfigs {
        release {
            storeFile file("myapp.keystore")
                    storePassword "**********"
                    keyAlias "**********"
                    keyPassword "**********"
        }
    }

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aild.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        dev {
            java.srcDirs = ['src-dev']
        }

        prod {
            java.srcDirs = ['src-prod']
        }

        instrumentTest.setRoot('tests')
    }

    productFlavors {
        dev {
            packageName "com.myapp.dev"
        }

        prod {
            packageName "com.myapp"
        }
    }

    buildTypes {
        release {
            signingConfig signingConfigs.release
        }
    }
}

This gives me the following error:

Cannot add a AndroidSourceSet with name 'dev' as a AndroidSourceSet with that name already exists.

The thing is, I can't use the new project structure and am stuck with this one, so how do I override the source directory here so it include, for the dev version, src-dev and for the prod version src-prod (instead of src/main/java and src/dev/java or src/prod/java)

Thx!

EDIT: The src-prod and src-dev directories only contain classes with constants that are used to point to different environments. I will do the same with assets (different icon for dev env)

解决方案

You need to first declare your flavors and then customize the sourceSets.

What happens is that when you customize the sourceSets it created android.sourceSets.dev, but then when creating android.productFlavors.dev it attempts to create a matching android.sourceSets.dev and fails (because it's already there).

We can't really know that the already created sourceSet is meant to be the same thing, so we fail rather than potentially using a sourceSet for that flavor when you meant it to be used for something else.