6

I am facing an weird problem regarding Gradle source set. I suspect this problem belongs to Android Studio. My Gradle file defines 4 product flavors and 4 source set including main. My activity files are put on different source set but not in main source set. But when I open an activity file from any of source sets, Android studio showing: "Duplicate file found on the file... refer to other source set file." Since there is no copy of the file in main source set this message shouldn't appear. However I can build and run using any product flavours and working correctly according to source set.

My gradle file looks like:

defaultConfig {
    applicationId "com.x.y.z"
    minSdkVersion 14
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
    multiDexEnabled true
}
buildTypes {
    debug {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.release
    }
}
productFlavors {
    design {
        resValue("string", "app_name", "App Design")
        applicationIdSuffix ".design"
        versionNameSuffix "-design"
    }
    dev {
        resValue("string", "app_name", "App Dev")
        applicationIdSuffix ".dev"
        versionNameSuffix "-dev"
    }
    prod {
        resValue("string", "app_name", "App Prod")
        applicationIdSuffix ".prod"
        versionNameSuffix "-prod"
    }
    playStore {
        resValue("string", "app_name", "Real App Name")
    }
}
sourceSets {
    main {
        java.srcDirs = ['src/main/java']
        res.srcDirs = ['src/main/res']
        assets.srcDirs = ['src/main/assets']
    }

    design {
        java.srcDirs = ['src/design/java']
        res.srcDirs = ['src/design/res']
        assets.srcDirs = ['src/design/assets']
    }

    dev {
        java.srcDirs = ['src/dev/java']
        res.srcDirs = ['src/dev/res']
        assets.srcDirs = ['src/dev/assets']
    }

    prod {
        java.srcDirs = ['src/prod/java']
        res.srcDirs = ['src/prod/res']
        assets.srcDirs = ['src/prod/assets']
    }
}

Source directory looks like:

src
--androidTest
--design
  --assets
  --java
  --res
--dev
  --assets
  --java
  --res
--main
  --assets
  --java
  --res
--prod
  --assets
  --java
  --res
iamcrypticcoder
  • 2,609
  • 4
  • 27
  • 50

0 Answers0