的Android 2.0工作室预览2,摇篮包装2.8,Mac OS X的的Android工作室摇篮sourceSets复制
-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 {
}
}
天才开发者在几百的Java源 - 左System.out.println语句,而不是日志报表'src/main/java'中的文件。理想情况下,我们不希望Sysout语句与任何applicationVariants绑定,特别是flavor1Release和flavor2Release。
在我们修改那些数百个Java源文件并最终将Sysout语句切换到Log语句之前,我们需要紧急关闭它们。
两种可能的解决方案 -
- 执行一个简单的脚本,将删除所有在Java源文件中的SYSOUT语句“的src/main/java目录”。但关于这一点,变体flavor1Debug和flavor2Debug需要记录器显示App中正在发生的事情。
- 在构建时执行简单的Gradle任务,将Java源文件从“src/main/java”复制到“src/release/java”,确保省略了Sysout语句。
解决方案2似乎是最快,最简单,最优雅。特别是当Gradle Custom-task独立执行时。除此之外,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
}
}
没有什么自定义摇篮任务,可能会导致制造“的src /释放”“的src/main”的精确副本,这是不打算成为这个错误。
任何阻止“src/main”默认拷贝到“src/release”的指针都将不胜感激。
如何将S.O.P重定向到日志? http://stackoverflow.com/questions/1200175/log4j-redirect-stdout-to-dailyrollingfileappender – RaGe
http://stackoverflow.com/questions/5712764/redirect-system-out-println-to-log4j-while-keeping-班级名称信息 – RaGe
http://bonfab.io/2015/09/redirect-system-out-to-logger/ – RaGe