我创建了一个Logger类,我在其中放置一个字符串并记录Level。 这条线看起来像这样:
Logger.log("The error is" + err , Logger.DEBUG);
我想删除在发布版本上使用Logger.DEBUG日志级别的所有Logger.log消息。 目前我还没有找到使用gradle做到这一点的技巧。 此外,我尝试使用proguard -assumenosideeffects但我无法找到为所有项目提交它的确切规则。 Proguard说:
您可以让ProGuard删除日志记录代码。诀窍是指定 伐木方法没有副作用 - 即使它们 实际上,因为他们写入控制台或日志文件。 ProGuard会接受你的意见并删除调用(在 优化步骤)并且如果可能的话,记录类和方法 他们自己(在缩小的步骤中)。
答案 0 :(得分:2)
我通过编写gradle脚本解决了这个问题:
task deleteJavaDebugLogs << {
description "This function will delete all SDK DEBUG log level from the project, be careful with it!"
FileTree javaFiles = fileTree('src/main/java/com/"your-name"') {
include '**/*.java'
}
String regex = "Logger.log[^,]+[^L]+(.*)Logger.SDK_DEBUG[^;];"
javaFiles.each { File javaFile ->
println "Start replacing regex on $javaFile.name"
String content = javaFile.getText()
content = content.replaceAll(regex, "")
javaFile.setText(content)
}
}
每次发布之前我都会运行这个gradle脚本。 使用正则表达式它只删除项目中有问题的行。 我建议使用Jenkins或其他构建工具将其添加到构建过程中。
小心在没有备份的项目上运行它,因为它将使用上述正则表达式从代码中删除所有行。