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 {
}
}
一位天才开发者留下了System.out.println语句,而不是'src / main / java'中数百个Java源文件中的Log语句。理想情况下,我们不希望Sysout语句与任何applicationVariants捆绑在一起,特别是flavor1Release和flavor2Release。
在我们修改数百个Java源文件并最终将Sysout语句切换到Log语句之前,我们需要紧急关闭它们。
两种可能的解决方案 -
解决方案2似乎是最快,最简单,最优雅的。特别是当Gradle Custom-task独立执行时。除此之外,Android-Studio中的Gradle-sync似乎正在复制从'src / main'到'src / release'的所有内容,包括资产,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-task中没有任何内容可能导致此错误使“src / release”成为“src / main”的精确副本,而这并不是原来的。
任何可以防止“src / main”默认副本为“src / release”的指针都将非常感激。
答案 0 :(得分:0)
基于RaGe的评论 - &#34;如何使用* .java作为查找模式而不是*?&#34;
奖励。我不应该打破&#34;发现| xargs egrep&#34;在&#39; |&#39;之前在exec任务的args []中分成两个独立的args。确实,天才!!!