diff --git a/src/main/java/com/reandroid/lib/apk/xmlencoder/RESEncoder.java b/src/main/java/com/reandroid/lib/apk/xmlencoder/RESEncoder.java index 97a4e47..849a497 100644 --- a/src/main/java/com/reandroid/lib/apk/xmlencoder/RESEncoder.java +++ b/src/main/java/com/reandroid/lib/apk/xmlencoder/RESEncoder.java @@ -73,6 +73,8 @@ Map map = initializeEncodeMaterials(pubXmlFileList, encodeMaterials); + Map packageBlockMap=new HashMap<>(); + for(File pubXmlFile:pubXmlFileList){ ResourceIds.Table.Package pkgResourceIds=map.get(pubXmlFile); addParsedFiles(pubXmlFile); @@ -82,6 +84,36 @@ PackageBlock packageBlock = packageCreator.createNew(tableBlock, pkgResourceIds); encodeMaterials.setCurrentPackage(packageBlock); + packageBlockMap.put(pubXmlFile, packageBlock); + + ValuesEncoder valuesEncoder = new ValuesEncoder(encodeMaterials); + File fileIds = toId(pubXmlFile); + if(fileIds.isFile()){ + valuesEncoder.encodeValuesXml(fileIds); + packageBlock.sortTypes(); + packageBlock.refresh(); + addParsedFiles(fileIds); + } + File fileAttrs = toAttr(pubXmlFile); + if(fileAttrs.isFile()){ + valuesEncoder.encodeValuesXml(fileAttrs); + packageBlock.sortTypes(); + packageBlock.refresh(); + addParsedFiles(fileAttrs); + } + } + for(File pubXmlFile:pubXmlFileList){ + ResourceIds.Table.Package pkgResourceIds=map.get(pubXmlFile); + addParsedFiles(pubXmlFile); + + PackageBlock packageBlock=packageBlockMap.get(pubXmlFile); + + if(packageBlock==null){ + PackageCreator packageCreator = new PackageCreator(); + packageCreator.setPackageName(pkgResourceIds.name); + packageBlock = packageCreator.createNew(tableBlock, pkgResourceIds); + } + encodeMaterials.setCurrentPackage(packageBlock); File resDir=toResDirectory(pubXmlFile); encodeResDir(encodeMaterials, resDir); @@ -178,6 +210,12 @@ .getParentFile() .getParentFile(); } + private File toId(File pubXmlFile){ + return new File(pubXmlFile.getParentFile(), "ids.xml"); + } + private File toAttr(File pubXmlFile){ + return new File(pubXmlFile.getParentFile(), "attrs.xml"); + } private List listValuesDir(File resDir){ List results=new ArrayList<>(); File def=new File(resDir, "values");