gradle task脚本删除log日志

作者: 敖大胆 | 来源:发表于2016-09-21 16:30 被阅读612次

    gradle task脚本删除log日志

    正在学习gradle,所以不多说直接上代码

    build.gradle中加入以下task,然后在Android Studio 的Terminal中执行,windows输入gradlew -q dl,mac gradle -q dl,等一会你就发现所有Log.的代码被删除。

          task dl << {
    
          def rootPath = project.projectDir.absolutePath;
    
          def files = new File(rootPath + "/src");
    
          println files.getAbsolutePath()
    
          deleteLog(files)
        }
    
        void deleteLog(File listFiles) {
          if (listFiles != null) {
            listFiles.eachFile {File file ->
              if (file != null) {
                if (file.isFile()) {
                  if (file.canRead() && file.name.endsWith(LogConstant.suffix)) {
                    println file.getAbsolutePath()
    
                    deleteFileLog(file);
                  }
                } else if (file.isDirectory()) {
                  deleteLog(file);
                }
              }
            }
          }
        }
    

    --

        void deleteFileLog(File javafile) {
          def endFlag = 0;
          File ftmp = file(javafile.getAbsolutePath() + ".tmp");
          def printWriter = ftmp.newPrintWriter(LogConstant.charset);
          def reader = javafile.newReader(LogConstant.charset);
          def tmpline = null;
          String line;
          while ((line = reader.readLine()) != null) {
            if (line != null) {
              tmpline = line.trim();
              if (tmpline.startsWith(LogConstant.head) || endFlag == 1) {
    
                if (tmpline.endsWith(LogConstant.tail_end)) {
                  endFlag = 0;
                  printWriter.write(";\n")
                  continue
                } else {
                  endFlag = 1;
                  continue
                }
              } else {
                printWriter.write(line + "\n");
              }
            }
          }
    
          reader.close();
    
          printWriter.flush();
          printWriter.close();
    
          javafile.delete();
          ftmp.renameTo(javafile.getAbsolutePath());
        }
    

    --

        task LogConstant {
          ext.head = 'Log.'
          ext.tail_end = ');'
          ext.suffix = '.java'
          ext.charset = "utf-8"
        }

    相关文章

      网友评论

      • 一息尚存:这样做的话,代价是非常大的,不争建议使用,如果程序崩溃了,就可能会出现崩溃日志给出的崩溃位置和你源代码对不上的情况。如果你的代码是要进行代码混淆的,那就更老火了。
        敖大胆: @一息尚存 谢谢提醒,正式版出现错误后定位问题所在确实可能因为删除log日志导致行数变化,不过log删除的逻辑是会被替换成;,也就是多行的会变成一行,单行的正常。

      本文标题:gradle task脚本删除log日志

      本文链接:https://www.haomeiwen.com/subject/mwuaettx.html