Android Studio 2.0 Preview 2,Gradle Wrapper 2.8,Mac OS X
-MainProjectWorkspace
-|-build.gradle
-|-settings.gradle
-|-gradle.properties
-|-gradle
-|-MyLibraryDependencies
-|-MyMainModule
--|-build.gradle
--|-build
--|-src
---|-androidTest
---|-main
----|-assets
----|-jniLibs
----|-libs
----|-java
-----|-com
----|-res
----|-AndroidManifest.xml
MyMainModule/build.gradle
//Not a single SourceSets configurations.
productFlavors {
flavor1 {
}
flavor2 {
}
}
buildTypes {
release {
}
debug {
}
}
一位天才的开发人员在“src / main / java”中的数百个Java源文件中保留了System.out.println语句,而不是Log语句。理想情况下,我们不希望Sysout语句与任何applicationVariants bundle 在一起,尤其是flavor1Release和flavor2Release。
在对这数百个Java源文件进行修改并最终将Sysout语句切换为Log语句之前,我们需要紧急将其关闭。
两种可能的解决方案-
解决方案2似乎是最快,最简单,最优雅的。特别是当Gradle自定义任务独立执行时。除此之外,Android-Studio中的Gradle-sync似乎正在复制从“src / main”到“src / release”的所有内容,包括 Assets ,jniLibs,libs,res甚至AndroidManifest.xml。幸运的是,Java源文件被剥离了“src / release”中的Sysout语句,这是预期的结果,理想情况下,仅应保留“src / release / java”而没有任何其他文件夹。
task prepareRelease(type: Task) {
Pattern sysoutRegex = Pattern.compile(<Sysout-Pattern>)
try {
File releaseFolder = file("src/release")
File mainFolder = file("src/main")
ByteArrayOutputStream output = new ByteArrayOutputStream()
exec {
commandLine = "sh"
args = ["-c", "find ${mainFolder.canonicalPath} -name '*' -type f -print ",
"| xargs egrep -l '${sysoutRegex.pattern()}'"]
standardOutput = output
}
def fileList = output.toString().split(System.getProperty("line.separator"))
fileList.each { line ->
File srcFile = file(line)
File destFile = file(srcFile.canonicalPath.replace("main", "release"))
def content = srcFile.readLines()
if (!destFile.exists()) {
destFile.parentFile.mkdirs()
destFile.createNewFile()
destFile.writable = true
}
destFile.withWriter { out ->
content.eachWithIndex { contentLine, index ->
if (!sysoutRegex.matcher(contentLine).find()) {
out.println contentLine
}
}
}
} catch (Exception fail) {
throw fail
}
}
自定义Gradle任务中没有任何内容可能会导致使“src / release”成为“src / main”的精确副本的错误,而这并非原本的意图。
防止此默认副本从“src / main”到“src / release”的任何指针都将受到赞赏。
最佳答案
基于RaGe的评论-“如何将* .java用作查找模式而不是*?”
荣誉我不应该在'|'之前打破“find | xargs egrep”在exec任务的args []中分为两个单独的args。确实,天才!!!
关于android - Android Studio Gradle sourceSets复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34231967/