从发布版本的 android 项目中删除代码行
Remove code lines from android project on release build
我创建了一个记录器 class,我在其中放置了一个字符串和日志级别。
该行看起来像这样:
Logger.log("The error is" + err , Logger.DEBUG);
我想删除在发布版本中使用 Logger.DEBUG 日志级别的所有 Logger.log 消息。
目前我还没有找到使用 gradle 执行此操作的技巧。
我也尝试使用 proguard -assumenosideeffects 但我找不到为所有项目提交它的确切规则。 Proguard 说:
You can let ProGuard remove logging code. The trick is to specify that
the logging methods don't have side-effects — even though they
actually do, since they write to the console or to a log file.
ProGuard will take your word for it and remove the invocations (in the
optimization step) and if possible the logging classes and methods
themselves (in the shrinking step).
我通过编写 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脚本。
使用 Regex 它只会从项目中删除有问题的行。
我建议使用 Jenkins 或其他构建工具将其添加到您的构建过程中。
小心 运行在 none 备份项目上使用它,因为它会从您的代码中使用上述正则表达式删除所有行。
我创建了一个记录器 class,我在其中放置了一个字符串和日志级别。 该行看起来像这样:
Logger.log("The error is" + err , Logger.DEBUG);
我想删除在发布版本中使用 Logger.DEBUG 日志级别的所有 Logger.log 消息。 目前我还没有找到使用 gradle 执行此操作的技巧。 我也尝试使用 proguard -assumenosideeffects 但我找不到为所有项目提交它的确切规则。 Proguard 说:
You can let ProGuard remove logging code. The trick is to specify that the logging methods don't have side-effects — even though they actually do, since they write to the console or to a log file. ProGuard will take your word for it and remove the invocations (in the optimization step) and if possible the logging classes and methods themselves (in the shrinking step).
我通过编写 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脚本。 使用 Regex 它只会从项目中删除有问题的行。 我建议使用 Jenkins 或其他构建工具将其添加到您的构建过程中。
小心 运行在 none 备份项目上使用它,因为它会从您的代码中使用上述正则表达式删除所有行。