Modify all flavors .class in gradle


(su) #1

I have many flavors in my app.gradle. When I exec gradlew assembleRelease I can find all flavors class in dir app/build/intermediates/classes. Now, I want to modify class(do my task) after class generated. How can I do that?

My task name is m.

gradle.projectsEvaluated {
    def buildTypes = android.buildTypes.collect { type -> type.name }
    def productFlavors = android.productFlavors.collect { flavor -> flavor.name }
    // When no product flavors defined, use empty
    if (!productFlavors) {
        productFlavors.add('')
    }
    productFlavors.each { productFlavorName ->
        buildTypes.each { buildTypeName ->
            def flavorNameCapitalized = "${productFlavorName.capitalize()}"
            def buildNameCapitalized = "${buildTypeName.capitalize()}"
            def targetName = "${flavorNameCapitalized}${buildNameCapitalized}"
            def preTaskName = "compile${targetName}JavaWithJavac"
            def nextTaskName = "compile${targetName}Ndk"
            if (!isDebug(buildNameCapitalized.toString())) {
                    project.tasks.findByName("generate${targetName}Sources").doLast { //generate${targetName}Sources
                    println("projectsEvaluated flavorName: " + flavorNameCapitalized.toString())
                    println("projectsEvaluated buildName: " + buildNameCapitalized.toString())
                    project.ext.set("flavorName", flavorNameCapitalized.toString());
                    project.ext.set("buildName", buildNameCapitalized.toString());
                }
                m.dependsOn project.tasks.findByName(preTaskName)
                project.tasks.findByName(nextTaskName).dependsOn m
            }
        }
    }
}

I have many flavors in my app.gradle. When I exec gradlew assembleRelease I can find all flavors class in dir app/build/intermediates/classes. Now, I want to modify class(do my task) after class generated. How can I do that?

My task name is m.

gradle.projectsEvaluated {
def buildTypes = android.buildTypes.collect { type -> type.name }
def productFlavors = android.productFlavors.collect { flavor -> flavor.name }
// When no product flavors defined, use empty
if (!productFlavors) {
productFlavors.add(’’)
}
productFlavors.each { productFlavorName ->
buildTypes.each { buildTypeName ->
def flavorNameCapitalized = "${productFlavorName.capitalize()}"
def buildNameCapitalized = "${buildTypeName.capitalize()}"
def targetName = "${flavorNameCapitalized}${buildNameCapitalized}"
def preTaskName = "compile${targetName}JavaWithJavac"
def nextTaskName = "compile${targetName}Ndk"
if (!isDebug(buildNameCapitalized.toString())) {
project.tasks.findByName(“generate${targetName}Sources”).doLast { //generate${targetName}Sources
println("projectsEvaluated flavorName: " + flavorNameCapitalized.toString())
println("projectsEvaluated buildName: " + buildNameCapitalized.toString())
project.ext.set(“flavorName”, flavorNameCapitalized.toString());
project.ext.set(“buildName”, buildNameCapitalized.toString());
}
m.dependsOn project.tasks.findByName(preTaskName)
project.tasks.findByName(nextTaskName).dependsOn m
}
}
}
}
But my task only run once. Help
same question in http://stackoverflow.com/questions/42197440/modify-all-flavors-class-in-gradle