从发布版本的android项目中删除代码行

时间:2015-03-29 08:51:41

标签: java logging proguard android-gradle

我创建了一个Logger类,我在其中放置一个字符串并记录Level。 这条线看起来像这样:

  Logger.log("The error is" + err , Logger.DEBUG);

我想删除在发布版本上使用Logger.DEBUG日志级别的所有Logger.log消息。 目前我还没有找到使用gradle做到这一点的技巧。 此外,我尝试使用proguard -assumenosideeffects但我无法找到为所有项目提交它的确切规则。 Proguard说:

  

您可以让ProGuard删除日志记录代码。诀窍是指定   伐木方法没有副作用 - 即使它们   实际上,因为他们写入控制台或日志文件。   ProGuard会接受你的意见并删除调用(在   优化步骤)并且如果可能的话,记录类和方法   他们自己(在缩小的步骤中)。

1 个答案:

答案 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或其他构建工具将其添加到构建过程中。

小心在没有备份的项目上运行它,因为它将使用上述正则表达式从代码中删除所有行。