在Android studio中使用gradle删除发布版本上的代码行

在Android studio中使用gradle删除发布版本上的代码行,android,android-gradle-plugin,Android,Android Gradle Plugin,我已经构建了一个SDK JAR项目,其中包含一个Logger类,用于通知系统日志。 例如: Logger.log(“第123行错误,请检查”,Logger.SDK_DEBUG) 目前,我可以使用的日志级别很少 在发布构建时,我希望在JAR构建过程之前删除代码中Logger.SDK_DEBUG的所有日志消息。有没有可能用Gradle做到这一点?我编写了一个Gradle脚本,用于删除项目中的所有日志记录行。您将希望在任何Gradle build命令之前运行此命令 task deleteJavaDeb

我已经构建了一个SDK JAR项目,其中包含一个Logger类,用于通知系统日志。 例如:

Logger.log(“第123行错误,请检查”,Logger.SDK_DEBUG)

目前,我可以使用的日志级别很少


在发布构建时,我希望在JAR构建过程之前删除代码中Logger.SDK_DEBUG的所有日志消息。有没有可能用Gradle做到这一点?

我编写了一个Gradle脚本,用于删除项目中的所有日志记录行。您将希望在任何Gradle build命令之前运行此命令

task deleteJavaDebugLogs << {
    description("This function will delete all SDK DEBUG log level from the project, be careful with it!")
    //Put your project full path for exmple 'src/main/java/myproject' , the path must be with quotes
    FileTree  javaFiles = fileTree('[your_project_path]') {
        // if you have more files that are not .java include them also.
        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)
    }
}
任务删除Java调试日志
println“开始替换$javaFile.name上的正则表达式”
String content=javaFile.getText()
content=content.replaceAll(regex,“”)
javaFile.setText(内容)
}
}

祝你好运!:)

我还没有测试过它,但是从代码混淆器的定义来看,它应该可以为您做到这一点。因为它应该找到所有无法访问的代码并将其删除。如果Logger.SDK_调试是最终的,他应该知道它是不可访问的,对吗?

@user1096901-是的,我将以新注释的形式编写答案。我编写的脚本将删除android studio活动项目中的所有Logger.SDK_调试行。之后,为了发布它,您必须编译和构建它。我还没有在模糊代码上尝试过它,因为我想删除并稍后验证项目是否仍在编译。我在Jenkins中将其作为一个步骤来执行,如果由于某种原因项目将不被遵守,我将在编译步骤中得到通知。当我调查这个问题时,我发现proguard也可以删除日志行,但我觉得使用gradle脚本更安全。重点是,您应该始终混淆android应用程序的发布版本,并且无法访问记录器代码行,这些代码行应该在混淆过程中自动删除。顺便说一句,更安全?在最坏的情况下,您将得到几行无法访问的代码,日志会使.apk文件最大值变大。但我不认为这有什么风险。