proguard-log.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. import argparse
  2. import os
  3. import re
  4. log_class = []
  5. log_level = []
  6. log_pattern = []
  7. def scan_dir(dir_path):
  8. file_list = os.listdir(dir_path)
  9. for filename in file_list:
  10. file_path = os.path.join(dir_path, filename)
  11. if os.path.isfile(file_path) and (filename.endswith('.java') or filename.endswith('.kt')):
  12. process_file(file_path)
  13. elif os.path.isdir(file_path):
  14. scan_dir(file_path)
  15. def process_file(file_path):
  16. new_lines = []
  17. record_lines = []
  18. stack = []
  19. # 使用 utf-8 进行文件读取,以防编码问题
  20. with open(file_path, 'r+', encoding='utf-8') as file:
  21. hiting = False
  22. match = None
  23. for line in file.readlines():
  24. if hiting is False:
  25. match = re.match(
  26. r'\s+(%s)\s*\.\s*(%s)\s*\(' % ('|'.join(log_class), '|'.join(log_level)), line)
  27. if match is not None:
  28. hiting = True
  29. else:
  30. new_lines.append(line)
  31. continue
  32. record_lines.append(' - ' + line)
  33. for letter in line.strip():
  34. if len(stack) == 0:
  35. if letter == '(':
  36. stack.append(letter)
  37. elif stack[-1] == '"':
  38. if letter == '"':
  39. stack.pop()
  40. elif stack[-1] == '(':
  41. if letter == '"':
  42. stack.append(letter)
  43. elif letter == '(':
  44. stack.append(letter)
  45. elif letter == ')':
  46. stack.pop()
  47. if len(stack) == 0:
  48. replace = match.group()
  49. if file_path.endswith('.java'):
  50. replace += '"TAG", "");'
  51. elif file_path.endswith('.kt'):
  52. replace += '"TAG", "")'
  53. replace += '\n'
  54. # new_lines.append(replace)
  55. # record_lines.append(' + ' + replace + '\n')
  56. new_lines.append('\n')
  57. record_lines.append(' + \n')
  58. match = None
  59. hiting = False
  60. break
  61. if len(record_lines) > 0:
  62. record_file.write(
  63. '--------------------------------------------------------------------\n')
  64. record_file.write(file_path + '\n')
  65. record_file.writelines(record_lines)
  66. file.seek(0)
  67. file.truncate()
  68. file.writelines(new_lines)
  69. if __name__ == '__main__':
  70. parser = argparse.ArgumentParser()
  71. parser.add_argument('-c', '--log_class', type=str, help='log class', required=True)
  72. parser.add_argument('-l', '--log_level', type=str, help='log level', required=True)
  73. args = parser.parse_args()
  74. log_class = args.log_class.split()
  75. log_level = args.log_level.split()
  76. print("remove class: " + str(log_class))
  77. print("remove level: " + str(log_level))
  78. with open('proguard_log.txt', 'w', encoding='utf-8') as record_file:
  79. # 获取父目录,确保路径跨平台可用
  80. cwd = os.path.abspath(os.path.join(os.getcwd(), os.pardir))
  81. print("cwd: " + cwd)
  82. scan_dir(cwd)