package com.basic.security.utils; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import java.io.File; import java.io.FileReader; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.TreeMap; public class RUtilsMain { public static Map idMap = new TreeMap<>(Collections.reverseOrder()); static File RUtilsFile = new File("E:\\workspace\\Security_yuyin_landscape_dual\\app\\src\\main\\java\\com\\basic\\security\\utils\\RUtils.java"); static String RUtilsFileContent = "package com.basic.security.utils;\n" + "public class RUtils {\n"; public static void main(String[] args) { listFile(new File("E:\\workspace\\Security_yuyin_landscape_dual\\app\\src\\main\\java\\com\\basic"), "find"); listFile(new File("E:\\workspace\\Security_yuyin_landscape_dual\\app\\src\\main\\java\\com\\basic"), "replace"); RUtilsFileContent += "}"; // System1.out.println(RUtilsFileContent); try { FileUtils.write(RUtilsFile, RUtilsFileContent); } catch (Exception e) { e.printStackTrace(); } } private static void listFile(File file, String type) { if (file.isDirectory()) { File[] subFiles = file.listFiles(); for (File subFile : subFiles) { listFile(subFile, type); } } if (file.isFile()) { String fileName = file.getName(); if (fileName.endsWith(".java") && !"RUtils.java".equals(fileName) && !"RUtilsMain.java".equals(fileName) && !"ResolutionAdaptation.java".equals(fileName) && !"ResolutionUtil.java".equals(fileName) && !"LayoutUtil.java".equals(fileName) ) { try { List lines = IOUtils.readLines(new FileReader(file)); for (int i = 0; i < lines.size(); i++) { String line = lines.get(i); if ("find".equals(type)) { generateMethods(line, new String[]{ "R.dimen.", "R.layout.", "R.drawable.", "R.color.", "R.raw.", "R.style.", "R.styleable.", "R.attr.", "R.id." }); } if ("replace".equals(type)) { for (Map.Entry entry : idMap.entrySet()) { if (line.contains(entry.getKey())) { line = line.replace(entry.getKey(), entry.getValue()); } } } lines.set(i, line); } FileUtils.writeLines(file, lines); } catch (Exception e) { e.printStackTrace(); } } } } public static void generateMethods(String line, String[] resourcePrefixs) { for (String resourcePrefix : resourcePrefixs) { List ids = new ArrayList<>(); if (!line.contains(resourcePrefix)) { continue; } if (line.contains("R.color.transparent")) { System1.out.println("RUtilsMain.generateMethods"); } String id = line.substring(line.indexOf(resourcePrefix)); id = id.replace(");", "").trim(); id = id.replace("}", ""); id = id.replace(")", ""); id = id.replace("(", ""); id = id.replace(";", ""); id = id.replace(":", ""); if (id.contains(",")) { String[] idsArray = id.split(","); for (String id1 : idsArray) { id1 = id1.trim(); if (id1.length() > 0 && id1.startsWith(resourcePrefix)) { ids.add(id1); } } } else { ids.add(id); } for (String id2 : ids) { if (line.contains("android." + id2)) { continue; } if (idMap.containsKey(id2)) { continue; } else { String call = "com.basic.security.utils.RUtils." + id2.replace(".", "_") + ""; System1.out.println("RUtilsMain.generateMethods " + call); idMap.put(id2, call); } if (id2.startsWith("R.styleable.") && line.contains("obtainStyledAttributes")) { String method = "public static final int[] " + id2.replace(".", "_") + "= com.basic.security.yuyin.indoor." + id2 + "; \n "; RUtilsFileContent += method + "\r\n"; } else { String method = "public static final int " + id2.replace(".", "_") + "= com.basic.security.yuyin.indoor." + id2 + "; \n "; RUtilsFileContent += method + "\r\n"; } // System1.out.println("" + id + " " + method); } } } }