mirror of
https://github.com/ReVanced/revanced-patches.git
synced 2026-01-23 02:31:03 +00:00
feat(YouTube Music): Add Unlock Android Auto Media Browser patch (#6477)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de> (cherry picked from commit 89645dcc2e13603b8f2fedb5e16231cb396e5965)
This commit is contained in:
committed by
oSumAtrIX
parent
9c18e1e649
commit
5edd9dccae
@@ -501,6 +501,10 @@ public final class app/revanced/patches/music/misc/androidauto/BypassCertificate
|
||||
public static final fun getBypassCertificateChecksPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/music/misc/androidauto/UnlockAndroidAutoMediaBrowserPatchKt {
|
||||
public static final fun getUnlockAndroidAutoMediaBrowserPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/music/misc/backgroundplayback/BackgroundPlaybackPatchKt {
|
||||
public static final fun getBackgroundPlaybackPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
@@ -5,24 +5,11 @@ import app.revanced.patches.music.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.music.misc.settings.settingsPatch
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Deprecated("This patch is useless by itself and has been merged into another patch.", ReplaceWith("unlockAndroidAutoMediaBrowserPatch"))
|
||||
|
||||
@Suppress("unused")
|
||||
val bypassCertificateChecksPatch = bytecodePatch(
|
||||
name = "Bypass certificate checks",
|
||||
description = "Bypasses certificate checks which prevent YouTube Music from working on Android Auto.",
|
||||
) {
|
||||
dependsOn(
|
||||
sharedExtensionPatch,
|
||||
settingsPatch
|
||||
)
|
||||
|
||||
compatibleWith(
|
||||
"com.google.android.apps.youtube.music"(
|
||||
"7.29.52",
|
||||
"8.10.52"
|
||||
)
|
||||
)
|
||||
|
||||
execute {
|
||||
checkCertificateFingerprint.method.returnEarly(true)
|
||||
}
|
||||
dependsOn(unlockAndroidAutoMediaBrowserPatch)
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package app.revanced.patches.music.misc.androidauto
|
||||
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val checkCertificateFingerprint = fingerprint {
|
||||
@@ -10,4 +9,13 @@ internal val checkCertificateFingerprint = fingerprint {
|
||||
"X509",
|
||||
"Failed to get certificate" // Partial String match.
|
||||
)
|
||||
}
|
||||
|
||||
internal val searchMediaItemsConstructorFingerprint = fingerprint {
|
||||
returns("V")
|
||||
strings("ytm_media_browser/search_media_items")
|
||||
}
|
||||
|
||||
internal val searchMediaItemsExecuteFingerprint = fingerprint {
|
||||
parameters()
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
package app.revanced.patches.music.misc.androidauto
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.instructions
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.util.getReference
|
||||
import app.revanced.util.registersUsed
|
||||
import app.revanced.util.returnEarly
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.iface.reference.FieldReference
|
||||
|
||||
@Suppress("unused")
|
||||
val unlockAndroidAutoMediaBrowserPatch = bytecodePatch(
|
||||
name = "Unlock Android Auto Media Browser",
|
||||
description = "Unlocks Android Auto Media Browser which enables the search function including speech to text.",
|
||||
) {
|
||||
compatibleWith(
|
||||
"com.google.android.apps.youtube.music"(
|
||||
"7.29.52",
|
||||
"8.10.52"
|
||||
)
|
||||
)
|
||||
|
||||
execute {
|
||||
checkCertificateFingerprint.method.returnEarly(true)
|
||||
|
||||
searchMediaItemsExecuteFingerprint
|
||||
.match(searchMediaItemsConstructorFingerprint.classDef)
|
||||
.method.apply {
|
||||
val targetIndex = instructions.indexOfFirst {
|
||||
it.opcode == Opcode.IGET_OBJECT && it.getReference<FieldReference>()?.type == "Ljava/lang/String;"
|
||||
}
|
||||
|
||||
val register = instructions[targetIndex].registersUsed.first()
|
||||
replaceInstruction(targetIndex, "const-string v$register, \"com.google.android.apps.youtube.music\"")
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user