From ace70e417fdf280c7630a5a89a773879fd240e96 Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Wed, 1 Jun 2022 01:36:25 +0200 Subject: [PATCH] fix: migrate to latest patcher api changes --- build.gradle.kts | 2 +- .../kotlin/app/revanced/cli/MainCommand.kt | 23 +++--- src/main/kotlin/app/revanced/cli/Patcher.kt | 3 +- .../app/revanced/utils/patcher/Patcher.kt | 40 ++++------- .../app/revanced/utils/signature/Signature.kt | 71 +++++++++---------- 5 files changed, 60 insertions(+), 79 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 73bfa86f..c3b60eda 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -24,7 +24,7 @@ repositories { dependencies { implementation("org.jetbrains.kotlin:kotlin-stdlib:1.6.21") - implementation("app.revanced:revanced-patcher:1.0.0-dev.16") + implementation("app.revanced:revanced-patcher:1.0.0-dev.17") implementation("info.picocli:picocli:4.6.3") diff --git a/src/main/kotlin/app/revanced/cli/MainCommand.kt b/src/main/kotlin/app/revanced/cli/MainCommand.kt index c9971228..bddc2c9c 100644 --- a/src/main/kotlin/app/revanced/cli/MainCommand.kt +++ b/src/main/kotlin/app/revanced/cli/MainCommand.kt @@ -1,7 +1,7 @@ package app.revanced.cli +import app.revanced.patcher.PatcherOptions import app.revanced.patcher.annotation.Name -import app.revanced.patcher.extensions.findAnnotationRecursively import app.revanced.patcher.util.patch.implementation.JarPatchBundle import app.revanced.utils.adb.Adb import app.revanced.utils.patcher.addPatchesFiltered @@ -54,21 +54,18 @@ internal object MainCommand : Runnable { override fun run() { if (listOnly) { - for (patchBundlePath in patchBundles) - for (it in JarPatchBundle(patchBundlePath).loadPatches()) - println( - "[available] ${ - it.findAnnotationRecursively( - Name::class.java - )?.name ?: it::class.java.name - }" - ) + for (patchBundlePath in patchBundles) for (it in JarPatchBundle(patchBundlePath).loadPatches()) { + + // TODO: adjust extension methods to be able to do this + val name = (it.annotations.find { it is Name } as? Name)?.name ?: it.simpleName + println( + "[available] $name" + ) + } return } - val patcher = app.revanced.patcher.Patcher( - inputFile, cacheDirectory, patchResources - ) + val patcher = app.revanced.patcher.Patcher(PatcherOptions(inputFile, cacheDirectory, patchResources)) if (signatureCheck) { patcher.addPatchesFiltered() diff --git a/src/main/kotlin/app/revanced/cli/Patcher.kt b/src/main/kotlin/app/revanced/cli/Patcher.kt index 779f1d99..ea943a8f 100644 --- a/src/main/kotlin/app/revanced/cli/Patcher.kt +++ b/src/main/kotlin/app/revanced/cli/Patcher.kt @@ -31,7 +31,8 @@ internal class Patcher { } if (MainCommand.patchResources) { - for (file in File(MainCommand.cacheDirectory).resolve("build/").listFiles(FileFilter { it.isDirectory })?.first()?.listFiles()!!) { + for (file in File(MainCommand.cacheDirectory).resolve("build/").listFiles(FileFilter { it.isDirectory }) + ?.first()?.listFiles()!!) { if (!file.isDirectory) { zipFileSystem.replaceFile(file.name, file.readBytes()) continue diff --git a/src/main/kotlin/app/revanced/utils/patcher/Patcher.kt b/src/main/kotlin/app/revanced/utils/patcher/Patcher.kt index e8aac78f..7b1c1262 100644 --- a/src/main/kotlin/app/revanced/utils/patcher/Patcher.kt +++ b/src/main/kotlin/app/revanced/utils/patcher/Patcher.kt @@ -2,29 +2,23 @@ package app.revanced.utils.patcher import app.revanced.cli.MainCommand import app.revanced.patcher.Patcher -import app.revanced.patcher.annotation.Compatibility -import app.revanced.patcher.annotation.Name import app.revanced.patcher.data.base.Data -import app.revanced.patcher.extensions.findAnnotationRecursively +import app.revanced.patcher.extensions.PatchExtensions.compatiblePackages +import app.revanced.patcher.extensions.PatchExtensions.patchName import app.revanced.patcher.patch.base.Patch import app.revanced.patcher.util.patch.implementation.JarPatchBundle fun Patcher.addPatchesFiltered( - packageCompatibilityFilter: Boolean = true, - packageVersionCompatibilityFilter: Boolean = true, includeFilter: Boolean = false ) { val packageName = this.packageName val packageVersion = this.packageVersion MainCommand.patchBundles.forEach { bundle -> - val includedPatches = mutableListOf>() - JarPatchBundle(bundle).loadPatches().forEach patch@{ p -> - val patch = p.getDeclaredConstructor().newInstance() - - val compatibilityAnnotation = patch.javaClass.findAnnotationRecursively(Compatibility::class.java) - - val patchName = patch.javaClass.findAnnotationRecursively(Name::class.java)?.name ?: patch.javaClass.name + val includedPatches = mutableListOf>>() + JarPatchBundle(bundle).loadPatches().forEach patch@{ patch -> + val compatiblePackages = patch.compatiblePackages + val patchName = patch.patchName val prefix = "[skipped] $patchName" @@ -33,24 +27,16 @@ fun Patcher.addPatchesFiltered( return@patch } - if (packageVersionCompatibilityFilter || packageCompatibilityFilter) { - - if (compatibilityAnnotation == null) { - println("$prefix: Missing compatibility annotation.") + if (compatiblePackages == null) println("$prefix: Missing compatibility annotation. Continuing.") + else compatiblePackages.forEach { compatiblePackage -> + if (compatiblePackage.name != packageName) { + println("$prefix: Package name not matching ${compatiblePackage.name}.") return@patch } - - compatibilityAnnotation.compatiblePackages.forEach { compatiblePackage -> - if (packageCompatibilityFilter && compatiblePackage.name != packageName) { - println("$prefix: Package name not matching ${compatiblePackage.name}.") - return@patch - } - - if (packageVersionCompatibilityFilter && !compatiblePackage.versions.any { it == packageVersion }) { - println("$prefix: Unsupported version.") - return@patch - } + if (!compatiblePackage.versions.any { it == packageVersion }) { + println("$prefix: Unsupported version.") + return@patch } } diff --git a/src/main/kotlin/app/revanced/utils/signature/Signature.kt b/src/main/kotlin/app/revanced/utils/signature/Signature.kt index 24afe9df..80573596 100644 --- a/src/main/kotlin/app/revanced/utils/signature/Signature.kt +++ b/src/main/kotlin/app/revanced/utils/signature/Signature.kt @@ -1,55 +1,52 @@ package app.revanced.utils.signature import app.revanced.patcher.Patcher -import app.revanced.patcher.extensions.findAnnotationRecursively -import app.revanced.patcher.signature.implementation.method.annotation.FuzzyPatternScanMethod -import app.revanced.patcher.signature.implementation.method.annotation.MatchingMethod import org.jf.dexlib2.iface.Method object Signature { fun checkSignatures(patcher: Patcher) { + TODO() + /** val failed = mutableListOf() for (signature in patcher.resolveSignatures()) { - val signatureClass = signature::class.java - val signatureName = - signatureClass.findAnnotationRecursively(app.revanced.patcher.annotation.Name::class.java)?.name - ?: signatureClass.name - if (!signature.resolved) { - failed.add(signatureName) - continue - } - - val method = signature.result!!.method - val matchingMethod = - signatureClass.findAnnotationRecursively(MatchingMethod::class.java) ?: MatchingMethod() - - println( - """ - [Signature] $signatureName - [Method] ${matchingMethod.definingClass}->${matchingMethod.name} - [Match] ${method.definingClass}->${method.toStr()} - """.trimIndent() - ) - - signatureClass.findAnnotationRecursively(FuzzyPatternScanMethod::class.java)?.let { - val warnings = signature.result!!.scanResult.warnings!! - println( - """ - [Warnings: ${warnings.count()}] - ${warnings.joinToString(separator = "\n") { warning -> "${warning.instructionIndex} / ${warning.patternIndex}: ${warning.wrongOpcode} (expected: ${warning.correctOpcode})" }} - """.trimIndent() - ) - } + val signatureClass = signature::class.java + val signatureName = signature.name ?: signatureClass.simpleName + if (!signature.resolved) { + failed.add(signatureName) + continue + } + + val method = signature.result!!.method + val matchingMethod = signature.matchingMethod ?: MatchingMethod() + + println( + """ + [Signature] $signatureName + [Method] ${matchingMethod.definingClass}->${matchingMethod.name} + [Match] ${method.definingClass}->${method.toStr()} + """.trimIndent() + ) + + signature.fuzzyThreshold.let { + val warnings = signature.result!!.scanResult.warnings!! + println( + """ + [Warnings: ${warnings.count()}] + ${warnings.joinToString(separator = "\n") { warning -> "${warning.instructionIndex} / ${warning.patternIndex}: ${warning.wrongOpcode} (expected: ${warning.correctOpcode})" }} + """.trimIndent() + ) + } } println( - """ - ${"=".repeat(50)} - [Failed signatures: ${failed.size}] - ${failed.joinToString(separator = "\n") { it }} + """ + ${"=".repeat(50)} + [Failed signatures: ${failed.size}] + ${failed.joinToString(separator = "\n") { it }} """.trimIndent() ) + */ } private fun Method.toStr(): String {