From 5a96f2d99f09193f2514dd38790db727b87c0b7a Mon Sep 17 00:00:00 2001 From: Lucaskyy Date: Tue, 24 May 2022 17:43:43 +0200 Subject: [PATCH] refactor: use apktool fork also fixed some compilation issues --- build.gradle.kts | 28 ++++++++++--------- .../kotlin/app/revanced/patcher/Patcher.kt | 8 +++--- .../revanced/patcher/extensions/Extensions.kt | 8 +++++- .../patcher/util/patch/PatchLoader.kt | 2 +- 4 files changed, 27 insertions(+), 19 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index c5a36cf..fd0d48d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -8,29 +8,31 @@ group = "app.revanced" repositories { mavenCentral() - maven { - url = uri("https://maven.pkg.github.com/revanced/multidexlib2") - credentials { - // DO NOT set these variables in the project's gradle.properties. - // Instead, you should set them in: - // Windows: %homepath%\.gradle\gradle.properties - // Linux: ~/.gradle/gradle.properties - username = project.findProperty("gpr.user") as String? ?: System.getenv("GITHUB_ACTOR") // DO NOT CHANGE! - password = project.findProperty("gpr.key") as String? ?: System.getenv("GITHUB_TOKEN") // DO NOT CHANGE! + listOf("multidexlib2", "Apktool").forEach { repo -> + maven { + url = uri("https://maven.pkg.github.com/revanced/$repo") + credentials { + // DO NOT set these variables in the project's gradle.properties. + // Instead, you should set them in: + // Windows: %homepath%\.gradle\gradle.properties + // Linux: ~/.gradle/gradle.properties + username = project.findProperty("gpr.user") as String? ?: System.getenv("GITHUB_ACTOR") // DO NOT CHANGE! + password = project.findProperty("gpr.key") as String? ?: System.getenv("GITHUB_TOKEN") // DO NOT CHANGE! + } } } } dependencies { - implementation("org.jetbrains.kotlin:kotlin-stdlib:1.6.21") + implementation(kotlin("stdlib")) api("xpp3:xpp3:1.1.4c") - api("org.apktool:apktool-lib:2.6.1") + api("org.apktool:apktool-lib:2.6.2-SNAPSHOT") api("app.revanced:multidexlib2:2.5.2.r2") api("org.smali:smali:2.5.2") - testImplementation("org.jetbrains.kotlin:kotlin-test:1.6.21") - implementation("org.jetbrains.kotlin:kotlin-reflect:1.6.21") + testImplementation(kotlin("test")) + implementation(kotlin("reflect")) } tasks { diff --git a/src/main/kotlin/app/revanced/patcher/Patcher.kt b/src/main/kotlin/app/revanced/patcher/Patcher.kt index e2e762d..784cde5 100644 --- a/src/main/kotlin/app/revanced/patcher/Patcher.kt +++ b/src/main/kotlin/app/revanced/patcher/Patcher.kt @@ -5,6 +5,7 @@ import app.revanced.patcher.data.PatcherData import app.revanced.patcher.data.base.Data import app.revanced.patcher.data.implementation.findIndexed import app.revanced.patcher.extensions.findAnnotationRecursively +import app.revanced.patcher.extensions.nullOutputStream import app.revanced.patcher.patch.base.Patch import app.revanced.patcher.patch.implementation.BytecodePatch import app.revanced.patcher.patch.implementation.ResourcePatch @@ -28,7 +29,6 @@ import org.jf.dexlib2.iface.ClassDef import org.jf.dexlib2.iface.DexFile import org.jf.dexlib2.writer.io.MemoryDataStore import java.io.File -import java.io.OutputStream val NAMER = BasicDexFileNamer() @@ -41,7 +41,8 @@ val NAMER = BasicDexFileNamer() class Patcher( inputFile: File, // TODO: maybe a file system in memory is better. Could cause high memory usage. - private val resourceCacheDirectory: String, private val patchResources: Boolean = false + private val resourceCacheDirectory: String, + private val patchResources: Boolean = false ) { val packageVersion: String val packageName: String @@ -51,7 +52,6 @@ class Patcher( private val opcodes: Opcodes private var signaturesResolved = false - init { val extFileInput = ExtFile(inputFile) val outDir = File(resourceCacheDirectory) @@ -85,7 +85,7 @@ class Patcher( XmlPullStreamDecoder( axmlParser, AndrolibResources().resXmlSerializer ).decodeManifest( - extFileInput.directory.getFileInput("AndroidManifest.xml"), OutputStream.nullOutputStream() + extFileInput.directory.getFileInput("AndroidManifest.xml"), nullOutputStream ) } diff --git a/src/main/kotlin/app/revanced/patcher/extensions/Extensions.kt b/src/main/kotlin/app/revanced/patcher/extensions/Extensions.kt index 5357864..6828613 100644 --- a/src/main/kotlin/app/revanced/patcher/extensions/Extensions.kt +++ b/src/main/kotlin/app/revanced/patcher/extensions/Extensions.kt @@ -9,6 +9,7 @@ import org.jf.dexlib2.iface.reference.MethodReference import org.jf.dexlib2.immutable.ImmutableMethod import org.jf.dexlib2.immutable.ImmutableMethodImplementation import org.jf.dexlib2.util.MethodUtil +import java.io.OutputStream /** * Recursively find a given annotation on a class @@ -105,4 +106,9 @@ internal fun parametersEqual( ) } } -} \ No newline at end of file +} + +internal val nullOutputStream: OutputStream = + object : OutputStream() { + override fun write(b: Int) {} + } \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patcher/util/patch/PatchLoader.kt b/src/main/kotlin/app/revanced/patcher/util/patch/PatchLoader.kt index b11e4f0..3d4f16f 100644 --- a/src/main/kotlin/app/revanced/patcher/util/patch/PatchLoader.kt +++ b/src/main/kotlin/app/revanced/patcher/util/patch/PatchLoader.kt @@ -19,7 +19,7 @@ object PatchLoader { val entry = entries.nextElement() if (!entry.name.endsWith(".class") || entry.name.contains("$")) continue - val clazz = classLoader.loadClass(entry.realName.replace('/', '.').replace(".class", "")) + val clazz = classLoader.loadClass(entry.name.replace('/', '.').replace(".class", "")) if (!clazz.isAnnotationPresent(app.revanced.patcher.patch.annotations.Patch::class.java)) continue