diff --git a/src/main/java/com/reandroid/apk/ApkModuleXmlDecoder.java b/src/main/java/com/reandroid/apk/ApkModuleXmlDecoder.java index 010b1ce..f09c412 100644 --- a/src/main/java/com/reandroid/apk/ApkModuleXmlDecoder.java +++ b/src/main/java/com/reandroid/apk/ApkModuleXmlDecoder.java @@ -152,6 +152,22 @@ import java.util.*; for(PackageBlock packageBlock:tableBlock.listPackages()){ decodePublicXml(packageBlock, outDir); } + if(tableBlock.getPackageArray().childesCount()==0){ + decodeEmptyTable(outDir); + } + } + private void decodeEmptyTable(File outDir) throws IOException { + logMessage("Decoding empty table ..."); + String pkgName = apkModule.getPackageName(); + if(pkgName==null){ + return; + } + File pkgDir = new File(outDir, "0-"+pkgName); + File resDir = new File(pkgDir, ApkUtil.RES_DIR_NAME); + File values = new File(resDir, "values"); + File pubXml = new File(values, ApkUtil.FILE_NAME_PUBLIC_XML); + XMLDocument xmlDocument = new XMLDocument("resources"); + xmlDocument.save(pubXml, false); } private void decodePublicXml(PackageBlock packageBlock, File outDir) throws IOException { diff --git a/src/main/java/com/reandroid/apk/xmlencoder/RESEncoder.java b/src/main/java/com/reandroid/apk/xmlencoder/RESEncoder.java index f71428f..9a9ee0f 100644 --- a/src/main/java/com/reandroid/apk/xmlencoder/RESEncoder.java +++ b/src/main/java/com/reandroid/apk/xmlencoder/RESEncoder.java @@ -77,6 +77,9 @@ for(File pubXmlFile:pubXmlFileList){ ResourceIds.Table.Package pkgResourceIds=map.get(pubXmlFile); + if(pkgResourceIds==null){ + continue; + } addParsedFiles(pubXmlFile); PackageBlock packageBlock = createPackage(pkgResourceIds, pubXmlFile); @@ -101,6 +104,9 @@ } for(File pubXmlFile:pubXmlFileList){ ResourceIds.Table.Package pkgResourceIds=map.get(pubXmlFile); + if(pkgResourceIds==null){ + continue; + } addParsedFiles(pubXmlFile); PackageBlock packageBlock=packageBlockMap.get(pubXmlFile); @@ -165,8 +171,12 @@ } ResourceIds resourceIds=new ResourceIds(); resourceIds.fromXml(pubXmlFile); - ResourceIds.Table.Package pkg = resourceIds.getTable() - .listPackages().get(0); + List pkgList = resourceIds.getTable() + .listPackages(); + if(pkgList.size()==0){ + continue; + } + ResourceIds.Table.Package pkg = pkgList.get(0); if(pkg.name==null){ pkg.name=packageName; }