chore: Merge branch dev to main (#4801)

This commit is contained in:
LisoUseInAIKyrios 2025-04-15 18:38:29 +02:00 committed by GitHub
commit 1050c77efd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 31 additions and 38 deletions

View File

@ -1,3 +1,10 @@
## [5.20.1-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.20.0...v5.20.1-dev.1) (2025-04-15)
### Bug Fixes
* **Spotify - Custom theme:** Support latest app target ([#4800](https://github.com/ReVanced/revanced-patches/issues/4800)) ([03d0eb2](https://github.com/ReVanced/revanced-patches/commit/03d0eb2f8c0f3e48d53bdab38d34057f2020bb65))
# [5.20.0](https://github.com/ReVanced/revanced-patches/compare/v5.19.1...v5.20.0) (2025-04-15) # [5.20.0](https://github.com/ReVanced/revanced-patches/compare/v5.19.1...v5.20.0) (2025-04-15)

View File

@ -3,4 +3,4 @@ org.gradle.jvmargs = -Xms512M -Xmx2048M
org.gradle.parallel = true org.gradle.parallel = true
android.useAndroidX = true android.useAndroidX = true
kotlin.code.style = official kotlin.code.style = official
version = 5.20.0 version = 5.20.1-dev.1

View File

@ -5,7 +5,10 @@ import app.revanced.util.containsLiteralInstruction
import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.AccessFlags
internal val encoreThemeFingerprint = fingerprint { internal val encoreThemeFingerprint = fingerprint {
strings("No EncoreLayoutTheme provided") strings("Encore theme was not provided.") // Partial string match.
custom { method, _ ->
method.name == "invoke"
}
} }
internal const val PLAYLIST_BACKGROUND_COLOR_LITERAL = 0xFF121212 internal const val PLAYLIST_BACKGROUND_COLOR_LITERAL = 0xFF121212

View File

@ -3,15 +3,7 @@ package app.revanced.patches.spotify.misc.fix
import app.revanced.patcher.fingerprint import app.revanced.patcher.fingerprint
internal val getPackageInfoFingerprint = fingerprint { internal val getPackageInfoFingerprint = fingerprint {
strings(
"Failed to get the application signatures",
"Failed to get installer package"
)
}
internal val getPackageInfoLegacyFingerprint = fingerprint {
strings( strings(
"Failed to get the application signatures" "Failed to get the application signatures"
) )
} }

View File

@ -1,14 +1,15 @@
package app.revanced.patches.spotify.misc.fix package app.revanced.patches.spotify.misc.fix
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
import app.revanced.patcher.patch.bytecodePatch import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patches.spotify.misc.extension.IS_SPOTIFY_LEGACY_APP_TARGET import app.revanced.util.findInstructionIndicesReversedOrThrow
import app.revanced.util.addInstructionsAtControlFlowLabel import app.revanced.util.getReference
import app.revanced.util.indexOfFirstInstructionOrThrow
import app.revanced.util.indexOfFirstInstructionReversedOrThrow import app.revanced.util.indexOfFirstInstructionReversedOrThrow
import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
@Suppress("unused") @Suppress("unused")
val spoofPackageInfoPatch = bytecodePatch( val spoofPackageInfoPatch = bytecodePatch(
@ -18,18 +19,11 @@ val spoofPackageInfoPatch = bytecodePatch(
compatibleWith("com.spotify.music") compatibleWith("com.spotify.music")
execute { execute {
val getPackageInfoFingerprint = if (IS_SPOTIFY_LEGACY_APP_TARGET) {
getPackageInfoLegacyFingerprint
} else {
getPackageInfoFingerprint
}
getPackageInfoFingerprint.method.apply { getPackageInfoFingerprint.method.apply {
val stringMatches = getPackageInfoFingerprint.stringMatches!!
// region Spoof signature. // region Spoof signature.
val failedToGetSignaturesStringIndex = stringMatches.first().index val failedToGetSignaturesStringIndex =
getPackageInfoFingerprint.stringMatches!!.first().index
val concatSignaturesIndex = indexOfFirstInstructionReversedOrThrow( val concatSignaturesIndex = indexOfFirstInstructionReversedOrThrow(
failedToGetSignaturesStringIndex, failedToGetSignaturesStringIndex,
@ -45,26 +39,23 @@ val spoofPackageInfoPatch = bytecodePatch(
// region Spoof installer name. // region Spoof installer name.
if (IS_SPOTIFY_LEGACY_APP_TARGET) {
// Installer name is not used in the legacy app target.
return@execute
}
val expectedInstallerName = "com.android.vending" val expectedInstallerName = "com.android.vending"
val returnInstallerNameIndex = indexOfFirstInstructionOrThrow( findInstructionIndicesReversedOrThrow {
stringMatches.last().index, val reference = getReference<MethodReference>()
Opcode.RETURN_OBJECT reference?.name == "getInstallerPackageName" || reference?.name == "getInstallingPackageName"
) }.forEach { index ->
val returnObjectIndex = index + 1
val installerNameRegister = getInstruction<OneRegisterInstruction>( val installerPackageNameRegister = getInstruction<OneRegisterInstruction>(
returnInstallerNameIndex returnObjectIndex
).registerA ).registerA
addInstructionsAtControlFlowLabel( addInstruction(
returnInstallerNameIndex, returnObjectIndex + 1,
"const-string v$installerNameRegister, \"$expectedInstallerName\"" "const-string v$installerPackageNameRegister, \"$expectedInstallerName\""
) )
}
// endregion // endregion
} }