diff --git a/api/android/revanced-library.api b/api/android/revanced-library.api index 763f582..1f13fef 100644 --- a/api/android/revanced-library.api +++ b/api/android/revanced-library.api @@ -26,7 +26,7 @@ public final class app/revanced/library/ApkSigner$Signer { public final class app/revanced/library/ApkUtils { public static final field INSTANCE Lapp/revanced/library/ApkUtils; - public final fun applyTo (Lapp/revanced/patcher/PatcherResult;Ljava/io/File;)V + public final fun applyTo (Lapp/revanced/patcher/PatchesResult;Ljava/io/File;)V public final fun signApk (Ljava/io/File;Ljava/io/File;Ljava/lang/String;Lapp/revanced/library/ApkUtils$KeyStoreDetails;)V } diff --git a/api/jvm/revanced-library.api b/api/jvm/revanced-library.api index 3a5a797..bcd7b0a 100644 --- a/api/jvm/revanced-library.api +++ b/api/jvm/revanced-library.api @@ -26,7 +26,7 @@ public final class app/revanced/library/ApkSigner$Signer { public final class app/revanced/library/ApkUtils { public static final field INSTANCE Lapp/revanced/library/ApkUtils; - public final fun applyTo (Lapp/revanced/patcher/PatcherResult;Ljava/io/File;)V + public final fun applyTo (Lapp/revanced/patcher/PatchesResult;Ljava/io/File;)V public final fun signApk (Ljava/io/File;Ljava/io/File;Ljava/lang/String;Lapp/revanced/library/ApkUtils$KeyStoreDetails;)V } diff --git a/build.gradle.kts b/build.gradle.kts index 13f8f99..783ed40 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -69,6 +69,13 @@ kotlin { implementation(libs.revanced.patcher) } } + + compilerOptions { + freeCompilerArgs.addAll( + "-Xexplicit-backing-fields", + "-Xcontext-parameters", + ) + } } android { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 65d2ed0..bafe31d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -4,7 +4,7 @@ binary-compatibility-validator = "0.18.1" core-ktx = "1.17.0" guava = "33.5.0-jre" jadb = "1.2.1.1" -kotlin = "2.2.21" +kotlin = "2.3.0" kotlinx-coroutines = "1.10.2" kotlinx-serialization = "1.9.0" libsu = "5.2.2" @@ -25,7 +25,7 @@ kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serializa libsu-core = { module = "com.github.topjohnwu.libsu:core", version.ref = "libsu" } libsu-nio = { module = "com.github.topjohnwu.libsu:nio", version.ref = "libsu" } libsu-service = { module = "com.github.topjohnwu.libsu:service", version.ref = "libsu" } -revanced-patcher = { module = "app.revanced:revanced-patcher", version.ref = "revanced-patcher" } +revanced-patcher = { module = "app.revanced:patcher", version.ref = "revanced-patcher" } bouncycastle-bcpkix = { module = "org.bouncycastle:bcpkix-jdk18on", version.ref = "bouncy-castle" } bouncycastle-pgp = { module = "org.bouncycastle:bcpg-jdk18on", version.ref = "bouncy-castle" } sigstore-java = { module = "dev.sigstore:sigstore-java", version.ref = "sigstore" } diff --git a/src/commonMain/kotlin/app/revanced/library/ApkUtils.kt b/src/commonMain/kotlin/app/revanced/library/ApkUtils.kt index 63bc123..9d5b089 100644 --- a/src/commonMain/kotlin/app/revanced/library/ApkUtils.kt +++ b/src/commonMain/kotlin/app/revanced/library/ApkUtils.kt @@ -1,7 +1,7 @@ package app.revanced.library import app.revanced.library.ApkSigner.newPrivateKeyCertificatePair -import app.revanced.patcher.PatcherResult +import app.revanced.patcher.PatchesResult import com.android.tools.build.apkzlib.zip.AlignmentRules import com.android.tools.build.apkzlib.zip.StoredEntry import com.android.tools.build.apkzlib.zip.ZFile @@ -38,7 +38,7 @@ object ApkUtils { ) /** - * Applies the [PatcherResult] to the given [apkFile]. + * Applies the [PatchesResult] to the given [apkFile]. * * The order of operation is as follows: * 1. Write patched dex files. @@ -50,7 +50,7 @@ object ApkUtils { * * @param apkFile The file to apply the patched files to. */ - fun PatcherResult.applyTo(apkFile: File) { + fun PatchesResult.applyTo(apkFile: File) { ZFile.openReadWrite(apkFile, zFileOptions).use { targetApkZFile -> dexFiles.forEach { dexFile -> targetApkZFile.add(dexFile.name, dexFile.stream) diff --git a/src/commonMain/kotlin/app/revanced/library/Options.kt b/src/commonMain/kotlin/app/revanced/library/Options.kt index 2e1bd39..3f72aeb 100644 --- a/src/commonMain/kotlin/app/revanced/library/Options.kt +++ b/src/commonMain/kotlin/app/revanced/library/Options.kt @@ -18,7 +18,7 @@ private val logger = Logger.getLogger("Options") * * @param options The options to set. The key is the patch name and the value is a map of option keys to option values. */ -fun Set>.setOptions(options: PatchesOptions) = filter { it.name != null }.forEach { patch -> +fun Set.setOptions(options: PatchesOptions) = filter { it.name != null }.forEach { patch -> options[patch.name]?.forEach setOption@{ (optionKey, optionValue) -> if (optionKey !in patch.options) { return@setOption logger.warning( diff --git a/src/commonMain/kotlin/app/revanced/library/Patch.kt b/src/commonMain/kotlin/app/revanced/library/Patch.kt index 3595c77..67ae1c6 100644 --- a/src/commonMain/kotlin/app/revanced/library/Patch.kt +++ b/src/commonMain/kotlin/app/revanced/library/Patch.kt @@ -17,7 +17,7 @@ typealias PackageNameMap = Map * @param countUnusedPatches Whether to count patches that are not used. * @return A map of package names to a map of versions to their count. */ -fun Set>.mostCommonCompatibleVersions( +fun Set.mostCommonCompatibleVersions( packageNames: Set? = null, countUnusedPatches: Boolean = false, ): PackageNameMap = buildMap { diff --git a/src/commonMain/kotlin/app/revanced/library/Serialization.kt b/src/commonMain/kotlin/app/revanced/library/Serialization.kt index 6dbfac5..5a69706 100644 --- a/src/commonMain/kotlin/app/revanced/library/Serialization.kt +++ b/src/commonMain/kotlin/app/revanced/library/Serialization.kt @@ -16,7 +16,7 @@ import kotlinx.serialization.json.encodeToStream import kotlinx.serialization.serializer import java.io.OutputStream -private class PatchSerializer : KSerializer> { +private class PatchSerializer : KSerializer { override val descriptor = buildClassSerialDescriptor("Patch") { element("name") element("description") @@ -29,7 +29,7 @@ private class PatchSerializer : KSerializer> { override fun deserialize(decoder: Decoder) = throw NotImplementedError("Deserialization is unsupported") @OptIn(ExperimentalSerializationApi::class) - override fun serialize(encoder: Encoder, value: Patch<*>) { + override fun serialize(encoder: Encoder, value: Patch) { encoder.encodeStructure(descriptor) { encodeNullableSerializableElement( descriptor, @@ -108,7 +108,7 @@ private val patchSerializer by lazy { Json } * @param prettyPrint Whether to pretty print the JSON. */ @OptIn(ExperimentalSerializationApi::class) -fun Set>.serializeTo( +fun Set.serializeTo( outputStream: OutputStream, prettyPrint: Boolean = true, ) = if (prettyPrint) { diff --git a/src/commonTest/kotlin/app/revanced/library/MostCommonCompatibleVersionsTest.kt b/src/commonTest/kotlin/app/revanced/library/MostCommonCompatibleVersionsTest.kt index e025dd2..e0ae9e3 100644 --- a/src/commonTest/kotlin/app/revanced/library/MostCommonCompatibleVersionsTest.kt +++ b/src/commonTest/kotlin/app/revanced/library/MostCommonCompatibleVersionsTest.kt @@ -50,19 +50,18 @@ internal class MostCommonCompatibleVersionsTest { @Test fun `common versions correctly ordered for each package`() { - fun assertEqualsExpected(compatiblePackageNames: Set?) = - assertEqualsVersions( - expected = - mapOf( - "some.package" to linkedMapOf("a" to 3, "b" to 2, "c" to 1), - "some.other.package" to linkedMapOf("b" to 3, "c" to 2, "d" to 1), - "some.other.other.package" to linkedMapOf("a" to 1, "b" to 1), - "some.other.other.other.package" to linkedMapOf(), - ), - patches, - compatiblePackageNames, - countUnusedPatches = true, - ) + fun assertEqualsExpected(compatiblePackageNames: Set?) = assertEqualsVersions( + expected = + mapOf( + "some.package" to linkedMapOf("a" to 3, "b" to 2, "c" to 1), + "some.other.package" to linkedMapOf("b" to 3, "c" to 2, "d" to 1), + "some.other.other.package" to linkedMapOf("a" to 1, "b" to 1), + "some.other.other.other.package" to linkedMapOf(), + ), + patches, + compatiblePackageNames, + countUnusedPatches = true, + ) assertEqualsExpected( compatiblePackageNames = @@ -112,7 +111,7 @@ internal class MostCommonCompatibleVersionsTest { @Test fun `return null because no patches were supplied`() { - assertEqualsVersion(null, emptySet(), "some.package") + assertEqualsVersion(null, emptySet(), "some.package") } @Test @@ -135,7 +134,7 @@ internal class MostCommonCompatibleVersionsTest { private fun assertEqualsVersions( expected: PackageNameMap, - patches: Set>, + patches: Set, compatiblePackageNames: Set?, countUnusedPatches: Boolean = false, ) = assertEquals( @@ -145,7 +144,7 @@ internal class MostCommonCompatibleVersionsTest { private fun assertEqualsVersion( expected: String?, - patches: Set>, + patches: Set, compatiblePackageName: String, ) { assertEquals(