perf: depend on androlib instead of ApkDecoder

Signed-off-by: oSumAtrIX <johan.melkonyan1@web.de>
This commit is contained in:
oSumAtrIX 2022-05-07 05:07:27 +02:00
parent 99319e63da
commit cc9416dd11
No known key found for this signature in database
GPG Key ID: A9B3094ACDB604B4

View File

@ -12,7 +12,7 @@ import app.revanced.patcher.signature.MethodSignature
import app.revanced.patcher.signature.resolver.SignatureResolver import app.revanced.patcher.signature.resolver.SignatureResolver
import app.revanced.patcher.util.ListBackedSet import app.revanced.patcher.util.ListBackedSet
import brut.androlib.Androlib import brut.androlib.Androlib
import brut.androlib.ApkDecoder import brut.androlib.meta.UsesFramework
import brut.directory.ExtFile import brut.directory.ExtFile
import lanchon.multidexlib2.BasicDexFileNamer import lanchon.multidexlib2.BasicDexFileNamer
import lanchon.multidexlib2.DexIO import lanchon.multidexlib2.DexIO
@ -40,25 +40,32 @@ class Patcher(
val packageVersion: String val packageVersion: String
val packageName: String val packageName: String
private val usesFramework: UsesFramework
private val patcherData: PatcherData private val patcherData: PatcherData
private val opcodes: Opcodes private val opcodes: Opcodes
private var signaturesResolved = false private var signaturesResolved = false
private val androlib = Androlib() private val androlib = Androlib()
init { init {
// FIXME: only use androlib instead of ApkDecoder which is currently a temporal solution val extFileInput = ExtFile(inputFile)
val decoder = ApkDecoder(androlib) val resourceTable = androlib.getResTable(extFileInput, true)
val outDir = File(resourceCacheDirectory)
decoder.setApkFile(inputFile) if (outDir.exists()) outDir.deleteRecursively()
decoder.setDecodeSources(ApkDecoder.DECODE_SOURCES_NONE) outDir.mkdir()
decoder.setForceDelete(true)
// decode resources to cache directory
decoder.setOutDir(File(resourceCacheDirectory))
decoder.decode()
// get package info // 1. decode resources to cache directory
packageName = decoder.resTable.packageOriginal androlib.decodeManifestWithResources(extFileInput, outDir, resourceTable)
packageVersion = decoder.resTable.versionInfo.versionName androlib.decodeResourcesFull(extFileInput, outDir, resourceTable)
// 2. read framework ids from the resource table
usesFramework = UsesFramework()
usesFramework.ids = resourceTable.listFramePackages().map { it.id }.sorted()
// 3. read package info
packageName = resourceTable.packageOriginal
packageVersion = resourceTable.versionInfo.versionName
// read dex files // read dex files
val dexFile = MultiDexIO.readDexFile(true, inputFile, NAMER, null, null) val dexFile = MultiDexIO.readDexFile(true, inputFile, NAMER, null, null)
@ -116,7 +123,7 @@ class Patcher(
// build modified resources // build modified resources
if (patchResources) { if (patchResources) {
val extDir = ExtFile(resourceCacheDirectory) val extDir = ExtFile(resourceCacheDirectory)
androlib.buildResources(extDir, androlib.readMetaFile(extDir).usesFramework) androlib.buildResources(extDir, usesFramework)
} }
// write dex modified files // write dex modified files