From cb5e39d73e0fbdbca26977582eff4a785f5e2cc5 Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Sun, 27 Aug 2023 04:47:07 +0200 Subject: [PATCH 1/3] build: Publish artifacts on Jitpack --- api/revanced-patcher.api | 0 build.gradle.kts | 42 +++++++++++++++++-- gradle.properties | 2 +- gradle/libs.versions.toml | 10 ++--- .../build.gradle.kts | 31 +------------- revanced-patcher/build.gradle.kts | 32 +------------- settings.gradle.kts | 21 ---------- 7 files changed, 47 insertions(+), 91 deletions(-) create mode 100644 api/revanced-patcher.api diff --git a/api/revanced-patcher.api b/api/revanced-patcher.api new file mode 100644 index 0000000..e69de29 diff --git a/build.gradle.kts b/build.gradle.kts index 491907e..49603fd 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,10 +1,46 @@ +import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension + plugins { - kotlin("jvm") version "1.9.0" apply false + kotlin("jvm") version "1.9.0" alias(libs.plugins.binary.compatibility.validator) + `maven-publish` + signing + java } -allprojects { +val publicationVersion = project.version.toString() + +subprojects { apply(plugin = "maven-publish") + apply(plugin = "signing") + apply(plugin = "java") + apply(plugin ="kotlin") group = "app.revanced" -} \ No newline at end of file + version = publicationVersion + + repositories { + mavenCentral() + mavenLocal() + maven { url = uri("https://jitpack.io") } + google() + } + + java { + withJavadocJar() + withSourcesJar() + } + + configure { + kotlin { jvmToolchain(11) } + } + + tasks { + test { + useJUnitPlatform() + testLogging { + events("PASSED", "SKIPPED", "FAILED") + } + } + } +} diff --git a/gradle.properties b/gradle.properties index 5a78296..7b06f5e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true kotlin.code.style = official -version = 16.0.2 +version = 16.0.2 \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 512c296..f10c02f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,12 +1,12 @@ [versions] android = "4.1.1.4" kotlin-reflect = "1.9.0" -apktool-lib = "2.8.2-6" +apktool-lib = "2.9.1" kotlin-test = "1.8.20-RC" -kotlinx-coroutines-core = "1.7.1" -multidexlib2 = "3.0.3.r2" +kotlinx-coroutines-core = "1.7.3" +multidexlib2 = "3.0.3.r3" smali = "3.0.3" -symbol-processing-api = "1.9.0-1.0.11" +symbol-processing-api = "1.9.10-1.0.13" xpp3 = "1.1.4c" binary-compatibility-validator = "0.13.2" kotlin-compile-testing-ksp = "1.5.0" @@ -16,7 +16,7 @@ ksp = "1.9.0-1.0.11" [libraries] android = { module = "com.google.android:android", version.ref = "android" } kotlin-reflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref = "kotlin-reflect" } -apktool-lib = { module = "app.revanced:apktool-lib", version.ref = "apktool-lib" } +apktool-lib = { module = "app.revanced:apktool", version.ref = "apktool-lib" } kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin-test" } kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinx-coroutines-core" } multidexlib2 = { module = "app.revanced:multidexlib2", version.ref = "multidexlib2" } diff --git a/revanced-patch-annotation-processor/build.gradle.kts b/revanced-patch-annotation-processor/build.gradle.kts index 2c2f860..5dafe1d 100644 --- a/revanced-patch-annotation-processor/build.gradle.kts +++ b/revanced-patch-annotation-processor/build.gradle.kts @@ -1,5 +1,4 @@ plugins { - kotlin("jvm") version "1.9.0" alias(libs.plugins.ksp) } @@ -12,39 +11,11 @@ dependencies { testImplementation(libs.kotlin.compile.testing) } -tasks { - test { - useJUnitPlatform() - testLogging { - events("PASSED", "SKIPPED", "FAILED") - } - } -} - -kotlin { jvmToolchain(11) } - -java { - withSourcesJar() -} - publishing { - repositories { - mavenLocal() - maven { - name = "GitHubPackages" - url = uri("https://maven.pkg.github.com/revanced/revanced-patcher") - credentials { - username = System.getenv("GITHUB_ACTOR") - password = System.getenv("GITHUB_TOKEN") - } - } - } publications { - create("gpr") { + create("revanced-patch-annotation-processor-publication") { from(components["java"]) - version = project.version.toString() - pom { name = "ReVanced patch annotation processor" description = "Annotation processor for patches." diff --git a/revanced-patcher/build.gradle.kts b/revanced-patcher/build.gradle.kts index 1a0713f..ff913b9 100644 --- a/revanced-patcher/build.gradle.kts +++ b/revanced-patcher/build.gradle.kts @@ -1,7 +1,3 @@ -plugins { - kotlin("jvm") version "1.9.0" -} - dependencies { implementation(libs.kotlinx.coroutines.core) implementation(libs.xpp3) @@ -17,42 +13,16 @@ dependencies { } tasks { - test { - useJUnitPlatform() - testLogging { - events("PASSED", "SKIPPED", "FAILED") - } - } - processResources { expand("projectVersion" to project.version) } } -kotlin { jvmToolchain(11) } - -java { - withSourcesJar() -} - publishing { - repositories { - mavenLocal() - maven { - name = "GitHubPackages" - url = uri("https://maven.pkg.github.com/revanced/revanced-patcher") - credentials { - username = System.getenv("GITHUB_ACTOR") - password = System.getenv("GITHUB_TOKEN") - } - } - } publications { - create("gpr") { + create("revanced-patcher-publication") { from(components["java"]) - version = project.version.toString() - pom { name = "ReVanced Patcher" description = "Patcher used by ReVanced." diff --git a/settings.gradle.kts b/settings.gradle.kts index 3761ccf..23a5a77 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,22 +1 @@ -val githubUsername: String = providers.gradleProperty("gpr.user").orNull ?: System.getenv("GITHUB_ACTOR") -val githubPassword: String = providers.gradleProperty("gpr.key").orNull ?: System.getenv("GITHUB_TOKEN") - -dependencyResolutionManagement { - repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) - repositories { - mavenCentral() - google() - mavenLocal() - listOf("multidexlib2", "apktool").forEach { repo -> - maven { - url = uri("https://maven.pkg.github.com/revanced/$repo") - credentials { - username = githubUsername - password = githubPassword - } - } - } - } -} - include("revanced-patch-annotation-processor", "revanced-patcher") \ No newline at end of file From 77dbee3d6ae7b8dc77543e036624daa68ae63504 Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Mon, 9 Oct 2023 04:10:20 +0200 Subject: [PATCH 2/3] feat: Add option to use single threaded writer for dex files BREAKING CHANGE: This commit gets rid of deprecated constructors. --- revanced-patcher/api/revanced-patcher.api | 8 +++--- .../app/revanced/patcher/PatcherOptions.kt | 13 +++++----- .../revanced/patcher/data/BytecodeContext.kt | 25 +++++++++++++------ 3 files changed, 27 insertions(+), 19 deletions(-) diff --git a/revanced-patcher/api/revanced-patcher.api b/revanced-patcher/api/revanced-patcher.api index 4cb3924..8c46723 100644 --- a/revanced-patcher/api/revanced-patcher.api +++ b/revanced-patcher/api/revanced-patcher.api @@ -67,10 +67,10 @@ public final class app/revanced/patcher/PatcherException$CircularDependencyExcep public final class app/revanced/patcher/PatcherOptions { public fun (Ljava/io/File;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;)V public synthetic fun (Ljava/io/File;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V - public fun (Ljava/io/File;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patcher/logging/Logger;)V - public synthetic fun (Ljava/io/File;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patcher/logging/Logger;ILkotlin/jvm/internal/DefaultConstructorMarker;)V - public final fun copy (Ljava/io/File;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patcher/logging/Logger;)Lapp/revanced/patcher/PatcherOptions; - public static synthetic fun copy$default (Lapp/revanced/patcher/PatcherOptions;Ljava/io/File;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patcher/logging/Logger;ILjava/lang/Object;)Lapp/revanced/patcher/PatcherOptions; + public fun (Ljava/io/File;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;Z)V + public synthetic fun (Ljava/io/File;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun copy (Ljava/io/File;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;Z)Lapp/revanced/patcher/PatcherOptions; + public static synthetic fun copy$default (Lapp/revanced/patcher/PatcherOptions;Ljava/io/File;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;ZILjava/lang/Object;)Lapp/revanced/patcher/PatcherOptions; public fun equals (Ljava/lang/Object;)Z public fun hashCode ()I public final fun recreateResourceCacheDirectory ()Ljava/io/File; diff --git a/revanced-patcher/src/main/kotlin/app/revanced/patcher/PatcherOptions.kt b/revanced-patcher/src/main/kotlin/app/revanced/patcher/PatcherOptions.kt index 1dfbdaa..1bed358 100644 --- a/revanced-patcher/src/main/kotlin/app/revanced/patcher/PatcherOptions.kt +++ b/revanced-patcher/src/main/kotlin/app/revanced/patcher/PatcherOptions.kt @@ -1,7 +1,6 @@ package app.revanced.patcher import app.revanced.patcher.data.ResourceContext -import app.revanced.patcher.logging.impl.NopLogger import brut.androlib.Config import java.io.File import java.util.logging.Logger @@ -12,16 +11,15 @@ import java.util.logging.Logger * @param resourceCachePath The path to the directory to use for caching resources. * @param aaptBinaryPath The path to a custom aapt binary. * @param frameworkFileDirectory The path to the directory to cache the framework file in. - * @param unusedLogger The logger to use for logging. + * @param multithreadingDexFileWriter Whether to use multiple threads for writing dex files. + * This can impact memory usage. */ -data class PatcherOptions -@Deprecated("Use the constructor without the logger parameter instead") -constructor( +data class PatcherOptions( internal val inputFile: File, internal val resourceCachePath: File = File("revanced-resource-cache"), internal val aaptBinaryPath: String? = null, internal val frameworkFileDirectory: String? = null, - internal val unusedLogger: app.revanced.patcher.logging.Logger = NopLogger + internal val multithreadingDexFileWriter: Boolean = false, ) { private val logger = Logger.getLogger(PatcherOptions::class.java.name) @@ -47,6 +45,7 @@ constructor( * @param aaptBinaryPath The path to a custom aapt binary. * @param frameworkFileDirectory The path to the directory to cache the framework file in. */ + @Deprecated("Use the constructor with the multithreadingDexFileWriter parameter instead") constructor( inputFile: File, resourceCachePath: File = File("revanced-resource-cache"), @@ -57,7 +56,7 @@ constructor( resourceCachePath, aaptBinaryPath, frameworkFileDirectory, - NopLogger + false, ) fun recreateResourceCacheDirectory() = resourceCachePath.also { diff --git a/revanced-patcher/src/main/kotlin/app/revanced/patcher/data/BytecodeContext.kt b/revanced-patcher/src/main/kotlin/app/revanced/patcher/data/BytecodeContext.kt index fd6a131..0dee449 100644 --- a/revanced-patcher/src/main/kotlin/app/revanced/patcher/data/BytecodeContext.kt +++ b/revanced-patcher/src/main/kotlin/app/revanced/patcher/data/BytecodeContext.kt @@ -12,11 +12,11 @@ import com.android.tools.smali.dexlib2.Opcodes import com.android.tools.smali.dexlib2.iface.ClassDef import com.android.tools.smali.dexlib2.iface.DexFile import com.android.tools.smali.dexlib2.iface.Method -import com.android.tools.smali.dexlib2.writer.io.MemoryDataStore import lanchon.multidexlib2.BasicDexFileNamer import lanchon.multidexlib2.DexIO import lanchon.multidexlib2.MultiDexIO import java.io.File +import java.io.FileFilter import java.io.Flushable import java.util.logging.Logger @@ -142,16 +142,25 @@ class BytecodeContext internal constructor(private val options: PatcherOptions) * @return The compiled bytecode. */ override fun get(): List { - logger.info("Compiling modified dex files") + logger.info("Compiling patched dex files") - return mutableMapOf().apply { + val patchedDexFileResults = options.resourceCachePath.resolve("dex").also { + it.deleteRecursively() // Make sure the directory is empty. + it.mkdirs() + }.apply { MultiDexIO.writeDexFile( - true, -1, // Defaults to amount of available cores. - this, BasicDexFileNamer(), object : DexFile { + true, + if (options.multithreadingDexFileWriter) -1 else 1, + this, + BasicDexFileNamer(), + object : DexFile { override fun getClasses() = this@BytecodeContext.classes.also(ProxyClassList::replaceClasses) override fun getOpcodes() = this@BytecodeContext.opcodes - }, DexIO.DEFAULT_MAX_DEX_POOL_SIZE, null - ) - }.map { PatcherResult.PatchedDexFile(it.key, it.value.readAt(0)) } + }, + DexIO.DEFAULT_MAX_DEX_POOL_SIZE + ) { _, entryName, _ -> logger.info("Compiled $entryName") } + }.listFiles(FileFilter { it.isFile })!!.map { PatcherResult.PatchedDexFile(it.name, it.inputStream()) } + + return patchedDexFileResults } } \ No newline at end of file From a1962fe600152f5d554d9d1a272aad13bfebc152 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 9 Oct 2023 12:53:08 +0000 Subject: [PATCH 3/3] chore(release): 17.0.0-dev.1 [skip ci] # [17.0.0-dev.1](https://github.com/ReVanced/revanced-patcher/compare/v16.0.2...v17.0.0-dev.1) (2023-10-09) ### Features * Add option to use single threaded writer for dex files ([77dbee3](https://github.com/ReVanced/revanced-patcher/commit/77dbee3d6ae7b8dc77543e036624daa68ae63504)) ### BREAKING CHANGES * This commit gets rid of deprecated constructors. --- CHANGELOG.md | 12 ++++++++++++ gradle.properties | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5d17d1b..a02576d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,15 @@ +# [17.0.0-dev.1](https://github.com/ReVanced/revanced-patcher/compare/v16.0.2...v17.0.0-dev.1) (2023-10-09) + + +### Features + +* Add option to use single threaded writer for dex files ([77dbee3](https://github.com/ReVanced/revanced-patcher/commit/77dbee3d6ae7b8dc77543e036624daa68ae63504)) + + +### BREAKING CHANGES + +* This commit gets rid of deprecated constructors. + ## [16.0.2](https://github.com/ReVanced/revanced-patcher/compare/v16.0.1...v16.0.2) (2023-10-06) diff --git a/gradle.properties b/gradle.properties index 7b06f5e..c33c0bb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true kotlin.code.style = official -version = 16.0.2 \ No newline at end of file +version = 17.0.0-dev.1