chore: Merge branch dev to main (#252)

This commit is contained in:
oSumAtrIX 2023-10-09 14:56:10 +02:00 committed by GitHub
commit 5953d6cfb5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 86 additions and 110 deletions

View File

@ -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) ## [16.0.2](https://github.com/ReVanced/revanced-patcher/compare/v16.0.1...v16.0.2) (2023-10-06)

0
api/revanced-patcher.api Normal file
View File

View File

@ -1,10 +1,46 @@
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension
plugins { plugins {
kotlin("jvm") version "1.9.0" apply false kotlin("jvm") version "1.9.0"
alias(libs.plugins.binary.compatibility.validator) alias(libs.plugins.binary.compatibility.validator)
`maven-publish`
signing
java
} }
allprojects { val publicationVersion = project.version.toString()
subprojects {
apply(plugin = "maven-publish") apply(plugin = "maven-publish")
apply(plugin = "signing")
apply(plugin = "java")
apply(plugin ="kotlin")
group = "app.revanced" group = "app.revanced"
} version = publicationVersion
repositories {
mavenCentral()
mavenLocal()
maven { url = uri("https://jitpack.io") }
google()
}
java {
withJavadocJar()
withSourcesJar()
}
configure<KotlinJvmProjectExtension> {
kotlin { jvmToolchain(11) }
}
tasks {
test {
useJUnitPlatform()
testLogging {
events("PASSED", "SKIPPED", "FAILED")
}
}
}
}

View File

@ -1,4 +1,4 @@
org.gradle.parallel = true org.gradle.parallel = true
org.gradle.caching = true org.gradle.caching = true
kotlin.code.style = official kotlin.code.style = official
version = 16.0.2 version = 17.0.0-dev.1

View File

@ -1,12 +1,12 @@
[versions] [versions]
android = "4.1.1.4" android = "4.1.1.4"
kotlin-reflect = "1.9.0" kotlin-reflect = "1.9.0"
apktool-lib = "2.8.2-6" apktool-lib = "2.9.1"
kotlin-test = "1.8.20-RC" kotlin-test = "1.8.20-RC"
kotlinx-coroutines-core = "1.7.1" kotlinx-coroutines-core = "1.7.3"
multidexlib2 = "3.0.3.r2" multidexlib2 = "3.0.3.r3"
smali = "3.0.3" 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" xpp3 = "1.1.4c"
binary-compatibility-validator = "0.13.2" binary-compatibility-validator = "0.13.2"
kotlin-compile-testing-ksp = "1.5.0" kotlin-compile-testing-ksp = "1.5.0"
@ -16,7 +16,7 @@ ksp = "1.9.0-1.0.11"
[libraries] [libraries]
android = { module = "com.google.android:android", version.ref = "android" } android = { module = "com.google.android:android", version.ref = "android" }
kotlin-reflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref = "kotlin-reflect" } 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" } 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" } kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinx-coroutines-core" }
multidexlib2 = { module = "app.revanced:multidexlib2", version.ref = "multidexlib2" } multidexlib2 = { module = "app.revanced:multidexlib2", version.ref = "multidexlib2" }

View File

@ -1,5 +1,4 @@
plugins { plugins {
kotlin("jvm") version "1.9.0"
alias(libs.plugins.ksp) alias(libs.plugins.ksp)
} }
@ -12,39 +11,11 @@ dependencies {
testImplementation(libs.kotlin.compile.testing) testImplementation(libs.kotlin.compile.testing)
} }
tasks {
test {
useJUnitPlatform()
testLogging {
events("PASSED", "SKIPPED", "FAILED")
}
}
}
kotlin { jvmToolchain(11) }
java {
withSourcesJar()
}
publishing { 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 { publications {
create<MavenPublication>("gpr") { create<MavenPublication>("revanced-patch-annotation-processor-publication") {
from(components["java"]) from(components["java"])
version = project.version.toString()
pom { pom {
name = "ReVanced patch annotation processor" name = "ReVanced patch annotation processor"
description = "Annotation processor for patches." description = "Annotation processor for patches."

View File

@ -67,10 +67,10 @@ public final class app/revanced/patcher/PatcherException$CircularDependencyExcep
public final class app/revanced/patcher/PatcherOptions { public final class app/revanced/patcher/PatcherOptions {
public fun <init> (Ljava/io/File;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;)V public fun <init> (Ljava/io/File;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;)V
public synthetic fun <init> (Ljava/io/File;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public synthetic fun <init> (Ljava/io/File;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun <init> (Ljava/io/File;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patcher/logging/Logger;)V public fun <init> (Ljava/io/File;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;Z)V
public synthetic fun <init> (Ljava/io/File;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patcher/logging/Logger;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public synthetic fun <init> (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;Lapp/revanced/patcher/logging/Logger;)Lapp/revanced/patcher/PatcherOptions; 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;Lapp/revanced/patcher/logging/Logger;ILjava/lang/Object;)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 equals (Ljava/lang/Object;)Z
public fun hashCode ()I public fun hashCode ()I
public final fun recreateResourceCacheDirectory ()Ljava/io/File; public final fun recreateResourceCacheDirectory ()Ljava/io/File;

View File

@ -1,7 +1,3 @@
plugins {
kotlin("jvm") version "1.9.0"
}
dependencies { dependencies {
implementation(libs.kotlinx.coroutines.core) implementation(libs.kotlinx.coroutines.core)
implementation(libs.xpp3) implementation(libs.xpp3)
@ -17,42 +13,16 @@ dependencies {
} }
tasks { tasks {
test {
useJUnitPlatform()
testLogging {
events("PASSED", "SKIPPED", "FAILED")
}
}
processResources { processResources {
expand("projectVersion" to project.version) expand("projectVersion" to project.version)
} }
} }
kotlin { jvmToolchain(11) }
java {
withSourcesJar()
}
publishing { 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 { publications {
create<MavenPublication>("gpr") { create<MavenPublication>("revanced-patcher-publication") {
from(components["java"]) from(components["java"])
version = project.version.toString()
pom { pom {
name = "ReVanced Patcher" name = "ReVanced Patcher"
description = "Patcher used by ReVanced." description = "Patcher used by ReVanced."

View File

@ -1,7 +1,6 @@
package app.revanced.patcher package app.revanced.patcher
import app.revanced.patcher.data.ResourceContext import app.revanced.patcher.data.ResourceContext
import app.revanced.patcher.logging.impl.NopLogger
import brut.androlib.Config import brut.androlib.Config
import java.io.File import java.io.File
import java.util.logging.Logger 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 resourceCachePath The path to the directory to use for caching resources.
* @param aaptBinaryPath The path to a custom aapt binary. * @param aaptBinaryPath The path to a custom aapt binary.
* @param frameworkFileDirectory The path to the directory to cache the framework file in. * @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 data class PatcherOptions(
@Deprecated("Use the constructor without the logger parameter instead")
constructor(
internal val inputFile: File, internal val inputFile: File,
internal val resourceCachePath: File = File("revanced-resource-cache"), internal val resourceCachePath: File = File("revanced-resource-cache"),
internal val aaptBinaryPath: String? = null, internal val aaptBinaryPath: String? = null,
internal val frameworkFileDirectory: 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) private val logger = Logger.getLogger(PatcherOptions::class.java.name)
@ -47,6 +45,7 @@ constructor(
* @param aaptBinaryPath The path to a custom aapt binary. * @param aaptBinaryPath The path to a custom aapt binary.
* @param frameworkFileDirectory The path to the directory to cache the framework file in. * @param frameworkFileDirectory The path to the directory to cache the framework file in.
*/ */
@Deprecated("Use the constructor with the multithreadingDexFileWriter parameter instead")
constructor( constructor(
inputFile: File, inputFile: File,
resourceCachePath: File = File("revanced-resource-cache"), resourceCachePath: File = File("revanced-resource-cache"),
@ -57,7 +56,7 @@ constructor(
resourceCachePath, resourceCachePath,
aaptBinaryPath, aaptBinaryPath,
frameworkFileDirectory, frameworkFileDirectory,
NopLogger false,
) )
fun recreateResourceCacheDirectory() = resourceCachePath.also { fun recreateResourceCacheDirectory() = resourceCachePath.also {

View File

@ -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.ClassDef
import com.android.tools.smali.dexlib2.iface.DexFile import com.android.tools.smali.dexlib2.iface.DexFile
import com.android.tools.smali.dexlib2.iface.Method import com.android.tools.smali.dexlib2.iface.Method
import com.android.tools.smali.dexlib2.writer.io.MemoryDataStore
import lanchon.multidexlib2.BasicDexFileNamer import lanchon.multidexlib2.BasicDexFileNamer
import lanchon.multidexlib2.DexIO import lanchon.multidexlib2.DexIO
import lanchon.multidexlib2.MultiDexIO import lanchon.multidexlib2.MultiDexIO
import java.io.File import java.io.File
import java.io.FileFilter
import java.io.Flushable import java.io.Flushable
import java.util.logging.Logger import java.util.logging.Logger
@ -142,16 +142,25 @@ class BytecodeContext internal constructor(private val options: PatcherOptions)
* @return The compiled bytecode. * @return The compiled bytecode.
*/ */
override fun get(): List<PatcherResult.PatchedDexFile> { override fun get(): List<PatcherResult.PatchedDexFile> {
logger.info("Compiling modified dex files") logger.info("Compiling patched dex files")
return mutableMapOf<String, MemoryDataStore>().apply { val patchedDexFileResults = options.resourceCachePath.resolve("dex").also {
it.deleteRecursively() // Make sure the directory is empty.
it.mkdirs()
}.apply {
MultiDexIO.writeDexFile( MultiDexIO.writeDexFile(
true, -1, // Defaults to amount of available cores. true,
this, BasicDexFileNamer(), object : DexFile { if (options.multithreadingDexFileWriter) -1 else 1,
this,
BasicDexFileNamer(),
object : DexFile {
override fun getClasses() = this@BytecodeContext.classes.also(ProxyClassList::replaceClasses) override fun getClasses() = this@BytecodeContext.classes.also(ProxyClassList::replaceClasses)
override fun getOpcodes() = this@BytecodeContext.opcodes override fun getOpcodes() = this@BytecodeContext.opcodes
}, DexIO.DEFAULT_MAX_DEX_POOL_SIZE, null },
) DexIO.DEFAULT_MAX_DEX_POOL_SIZE
}.map { PatcherResult.PatchedDexFile(it.key, it.value.readAt(0)) } ) { _, entryName, _ -> logger.info("Compiled $entryName") }
}.listFiles(FileFilter { it.isFile })!!.map { PatcherResult.PatchedDexFile(it.name, it.inputStream()) }
return patchedDexFileResults
} }
} }

View File

@ -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") include("revanced-patch-annotation-processor", "revanced-patcher")