2015-11-05 22 views
1

我有一個帶有本機部分的android項目。我想建立自己的標誌不同的本地代碼,這取決於buildType和productFlavor,例如:基於庫變體gradle編輯屬性android

android { 
    project.ext.buildFlags = ['-j16', 'all'] 
    buildTypes { 
     debug { project.ext.buildFlags.add('NDK_DEBUG=1')} 
    } 
    productFlavors { 
     pretty {project.ext.buildFlags.add('PRETTY')} 
     ugly {project.ext.buildFlags.add('UGLY')} 
    } 

    task buildNativeCode(type: Exec) { 
     commandLine 'ndk-build', project.ext.buildFlags 
    } 

    tasks.withType(JavaCompile) { 
     compileTask -> compileTask.dependsOn buildNative 
    } 
} 

所以,uglyDebug我想建立自己的本地庫與「醜陋」和「NDK_DEBUG」標誌,'PRETTY'和'NDK_DEBUG'標誌的prettyDebug等等。但是,不管選擇的配置如何,它們總是被添加。從我收集的內容來看,這是在項目評估過程中完成的,我不知道如何正確設置它。現在我最終創建了許多具有幾乎相同內容的buildNativeXXX任務。我很想避免代碼重複。

回答

1

您可以使用下面的命令之後修改任何任務:

afterEvaluate { 
    productFlavors.each { productFlavorName -> 
     buildTypes.each { buildTypeName -> 

     project.ext.buildFlags.add('NDK_DEBUG=1') 

     if (productFlavorName.equals("pretty")) { 
      //enter code here 
      project.ext.buildFlags.add('PRETTY') 
     } else { 
      project.ext.buildFlags.add('UGLY') 
     } 
    } 
    } 
} 

現在,你有怎樣的gradle添加buildFlags你完全控制。 :)

如果你想使用buildConfig變量,您可以使用設置它們:

applicationVariants.all { variant -> 
      variant.buildConfigField "String", "COMMIT_HASH", "HASH123456789" 
} 
+0

這恐怕是行不通的。 (除了應該比較productFlavors和buildTypes的.name屬性外)。它將遍歷每個productFlavor和BuildType。因此,即使我選擇uglyRelease,我的buildFlags列表中也會有NDK_DEBUG = 1,PRETTY和UGLY。 –