的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