From 6075ebe9c8b6fbed3f986bb8417db3977230a42e Mon Sep 17 00:00:00 2001 From: REAndroid Date: Tue, 3 Jan 2023 11:19:42 -0500 Subject: [PATCH] add extract root files on XML decoder --- .../lib/apk/ApkModuleXmlDecoder.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/main/java/com/reandroid/lib/apk/ApkModuleXmlDecoder.java b/src/main/java/com/reandroid/lib/apk/ApkModuleXmlDecoder.java index 6e6f0e8..4d3e2fa 100644 --- a/src/main/java/com/reandroid/lib/apk/ApkModuleXmlDecoder.java +++ b/src/main/java/com/reandroid/lib/apk/ApkModuleXmlDecoder.java @@ -15,6 +15,7 @@ */ package com.reandroid.lib.apk; +import com.reandroid.archive.InputSource; import com.reandroid.lib.apk.xmldecoder.XMLBagDecoder; import com.reandroid.lib.arsc.chunk.PackageBlock; import com.reandroid.lib.arsc.chunk.TableBlock; @@ -65,6 +66,8 @@ import java.util.*; decodeResFile(entryStore, outDir, resFile); } decodeValues(entryStore, outDir, tableBlock); + + extractRootFiles(outDir); } private void decodeResFile(EntryStore entryStore, File outDir, ResFile resFile) throws IOException, XMLException { @@ -238,6 +241,25 @@ import java.util.*; private String getPackageDirName(PackageBlock packageBlock){ return packageBlock.getIndex()+"-"+packageBlock.getName(); } + private void extractRootFiles(File outDir) throws IOException { + logMessage("Extracting root files"); + File rootDir = new File(outDir, "root"); + for(InputSource inputSource:apkModule.getApkArchive().listInputSources()){ + extractRootFiles(rootDir, inputSource); + } + } + private void extractRootFiles(File rootDir, InputSource inputSource) throws IOException { + String path=inputSource.getAlias(); + path=path.replace(File.separatorChar, '/'); + File file=new File(rootDir, path); + File dir=file.getParentFile(); + if(!dir.exists()){ + dir.mkdirs(); + } + FileOutputStream outputStream=new FileOutputStream(file); + inputSource.write(outputStream); + outputStream.close(); + } private void logMessage(String msg) { APKLogger apkLogger=apkModule.getApkLogger();