feat(YouTube): Support versions 18.48.39
, 18.49.37
and 19.01.34
(#2551)
Co-authored-by: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com>
This commit is contained in:
parent
57908dbeef
commit
a938e736fa
|
@ -24,15 +24,16 @@ import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction35c
|
||||||
],
|
],
|
||||||
compatiblePackages = [
|
compatiblePackages = [
|
||||||
CompatiblePackage(
|
CompatiblePackage(
|
||||||
"com.google.android.youtube",
|
"com.google.android.youtube", [
|
||||||
[
|
|
||||||
"18.32.39",
|
"18.32.39",
|
||||||
"18.37.36",
|
"18.37.36",
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -25,8 +25,10 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -29,8 +29,10 @@ import app.revanced.patches.youtube.misc.settings.SettingsPatch
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -17,15 +17,10 @@ import app.revanced.patches.youtube.video.information.VideoInformationPatch
|
||||||
],
|
],
|
||||||
compatiblePackages = [
|
compatiblePackages = [
|
||||||
CompatiblePackage(
|
CompatiblePackage(
|
||||||
"com.google.android.youtube",
|
"com.google.android.youtube", [
|
||||||
[
|
"18.48.39",
|
||||||
"18.32.39",
|
"18.49.37",
|
||||||
"18.37.36",
|
"19.01.34"
|
||||||
"18.38.44",
|
|
||||||
"18.43.45",
|
|
||||||
"18.44.41",
|
|
||||||
"18.45.41",
|
|
||||||
"18.45.43"
|
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -17,15 +17,10 @@ import app.revanced.patches.youtube.video.information.VideoInformationPatch
|
||||||
],
|
],
|
||||||
compatiblePackages = [
|
compatiblePackages = [
|
||||||
CompatiblePackage(
|
CompatiblePackage(
|
||||||
"com.google.android.youtube",
|
"com.google.android.youtube", [
|
||||||
[
|
"18.48.39",
|
||||||
"18.32.39",
|
"18.49.37",
|
||||||
"18.37.36",
|
"19.01.34"
|
||||||
"18.38.44",
|
|
||||||
"18.43.45",
|
|
||||||
"18.44.41",
|
|
||||||
"18.45.41",
|
|
||||||
"18.45.43"
|
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
|
@ -27,8 +27,10 @@ import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -29,8 +29,10 @@ import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||||
[
|
[
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -25,8 +25,10 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||||
[
|
[
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
package app.revanced.patches.youtube.interaction.swipecontrols
|
package app.revanced.patches.youtube.interaction.swipecontrols
|
||||||
|
|
||||||
import app.revanced.util.transformMethods
|
|
||||||
import app.revanced.util.traverseClassHierarchy
|
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
import app.revanced.patcher.patch.BytecodePatch
|
import app.revanced.patcher.patch.BytecodePatch
|
||||||
import app.revanced.patcher.patch.annotation.CompatiblePackage
|
import app.revanced.patcher.patch.annotation.CompatiblePackage
|
||||||
|
@ -10,7 +8,9 @@ import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod.Companion.toMu
|
||||||
import app.revanced.patches.youtube.interaction.swipecontrols.fingerprints.SwipeControlsHostActivityFingerprint
|
import app.revanced.patches.youtube.interaction.swipecontrols.fingerprints.SwipeControlsHostActivityFingerprint
|
||||||
import app.revanced.patches.youtube.misc.integrations.IntegrationsPatch
|
import app.revanced.patches.youtube.misc.integrations.IntegrationsPatch
|
||||||
import app.revanced.patches.youtube.misc.playertype.PlayerTypeHookPatch
|
import app.revanced.patches.youtube.misc.playertype.PlayerTypeHookPatch
|
||||||
import app.revanced.patches.youtube.shared.fingerprints.WatchWhileActivityFingerprint
|
import app.revanced.patches.youtube.shared.fingerprints.MainActivityFingerprint
|
||||||
|
import app.revanced.util.transformMethods
|
||||||
|
import app.revanced.util.traverseClassHierarchy
|
||||||
import com.android.tools.smali.dexlib2.AccessFlags
|
import com.android.tools.smali.dexlib2.AccessFlags
|
||||||
import com.android.tools.smali.dexlib2.immutable.ImmutableMethod
|
import com.android.tools.smali.dexlib2.immutable.ImmutableMethod
|
||||||
|
|
||||||
|
@ -31,8 +31,10 @@ import com.android.tools.smali.dexlib2.immutable.ImmutableMethod
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
@ -40,19 +42,19 @@ import com.android.tools.smali.dexlib2.immutable.ImmutableMethod
|
||||||
@Suppress("unused")
|
@Suppress("unused")
|
||||||
object SwipeControlsBytecodePatch : BytecodePatch(
|
object SwipeControlsBytecodePatch : BytecodePatch(
|
||||||
setOf(
|
setOf(
|
||||||
WatchWhileActivityFingerprint,
|
MainActivityFingerprint,
|
||||||
SwipeControlsHostActivityFingerprint
|
SwipeControlsHostActivityFingerprint
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
override fun execute(context: BytecodeContext) {
|
override fun execute(context: BytecodeContext) {
|
||||||
val wrapperClass = SwipeControlsHostActivityFingerprint.result!!.mutableClass
|
val wrapperClass = SwipeControlsHostActivityFingerprint.result!!.mutableClass
|
||||||
val targetClass = WatchWhileActivityFingerprint.result!!.mutableClass
|
val targetClass = MainActivityFingerprint.result!!.mutableClass
|
||||||
|
|
||||||
// inject the wrapper class from integrations into the class hierarchy of WatchWhileActivity
|
// Inject the wrapper class from integrations into the class hierarchy of MainActivity.
|
||||||
wrapperClass.setSuperClass(targetClass.superclass)
|
wrapperClass.setSuperClass(targetClass.superclass)
|
||||||
targetClass.setSuperClass(wrapperClass.type)
|
targetClass.setSuperClass(wrapperClass.type)
|
||||||
|
|
||||||
// ensure all classes and methods in the hierarchy are non-final, so we can override them in integrations
|
// Ensure all classes and methods in the hierarchy are non-final, so we can override them in integrations.
|
||||||
context.traverseClassHierarchy(targetClass) {
|
context.traverseClassHierarchy(targetClass) {
|
||||||
accessFlags = accessFlags and AccessFlags.FINAL.value.inv()
|
accessFlags = accessFlags and AccessFlags.FINAL.value.inv()
|
||||||
transformMethods {
|
transformMethods {
|
||||||
|
|
|
@ -29,8 +29,10 @@ import app.revanced.patches.youtube.misc.settings.SettingsPatch
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
|
|
|
@ -27,8 +27,10 @@ import app.revanced.patches.youtube.misc.settings.SettingsPatch
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -37,8 +37,10 @@ import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -28,8 +28,10 @@ import com.android.tools.smali.dexlib2.Opcode
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -34,8 +34,10 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -32,8 +32,10 @@ import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction3rc
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -27,8 +27,10 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -27,8 +27,10 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -26,8 +26,10 @@ import app.revanced.patches.youtube.misc.settings.SettingsPatch
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -27,8 +27,10 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -30,8 +30,10 @@ import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction21c
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -27,8 +27,10 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -23,8 +23,10 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -23,8 +23,10 @@ import app.revanced.patches.youtube.misc.settings.SettingsPatch
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -37,8 +37,10 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -34,8 +34,10 @@ import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -23,8 +23,10 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -23,8 +23,10 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -20,15 +20,20 @@ import app.revanced.patches.youtube.misc.settings.SettingsPatch
|
||||||
SettingsPatch::class
|
SettingsPatch::class
|
||||||
],
|
],
|
||||||
compatiblePackages = [
|
compatiblePackages = [
|
||||||
CompatiblePackage("com.google.android.youtube", [
|
CompatiblePackage(
|
||||||
|
"com.google.android.youtube", [
|
||||||
"18.32.39",
|
"18.32.39",
|
||||||
"18.37.36",
|
"18.37.36",
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.41",
|
||||||
"18.45.43"
|
"18.45.43",
|
||||||
])
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
|
]
|
||||||
|
)
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
@Suppress("unused")
|
@Suppress("unused")
|
||||||
|
|
|
@ -25,8 +25,10 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||||
"com.google.android.youtube", [
|
"com.google.android.youtube", [
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -31,8 +31,10 @@ import app.revanced.patches.youtube.shared.fingerprints.SeekbarOnDrawFingerprint
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -35,8 +35,10 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -22,8 +22,10 @@ import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -19,13 +19,14 @@ import app.revanced.patches.youtube.misc.settings.SettingsPatch
|
||||||
compatiblePackages = [
|
compatiblePackages = [
|
||||||
CompatiblePackage(
|
CompatiblePackage(
|
||||||
"com.google.android.youtube", [
|
"com.google.android.youtube", [
|
||||||
"18.32.39",
|
|
||||||
"18.37.36",
|
"18.37.36",
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -24,8 +24,10 @@ import app.revanced.patches.youtube.misc.settings.SettingsPatch
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -18,8 +18,10 @@ import org.w3c.dom.Element
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
|
|
|
@ -5,7 +5,6 @@ import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
|
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
|
||||||
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.fingerprint.MethodFingerprint
|
import app.revanced.patcher.fingerprint.MethodFingerprint
|
||||||
import app.revanced.patcher.patch.BytecodePatch
|
import app.revanced.patcher.patch.BytecodePatch
|
||||||
import app.revanced.patcher.patch.PatchException
|
import app.revanced.patcher.patch.PatchException
|
||||||
|
@ -18,7 +17,7 @@ import app.revanced.patches.youtube.layout.returnyoutubedislike.fingerprints.Lik
|
||||||
import app.revanced.patches.youtube.layout.returnyoutubedislike.fingerprints.RemoveLikeFingerprint
|
import app.revanced.patches.youtube.layout.returnyoutubedislike.fingerprints.RemoveLikeFingerprint
|
||||||
import app.revanced.patches.youtube.layout.returnyoutubedislike.fingerprints.RollingNumberMeasureAnimatedTextFingerprint
|
import app.revanced.patches.youtube.layout.returnyoutubedislike.fingerprints.RollingNumberMeasureAnimatedTextFingerprint
|
||||||
import app.revanced.patches.youtube.layout.returnyoutubedislike.fingerprints.RollingNumberMeasureStaticLabelFingerprint
|
import app.revanced.patches.youtube.layout.returnyoutubedislike.fingerprints.RollingNumberMeasureStaticLabelFingerprint
|
||||||
import app.revanced.patches.youtube.layout.returnyoutubedislike.fingerprints.RollingNumberMeasureTextParentFingerprint
|
import app.revanced.patches.youtube.layout.returnyoutubedislike.fingerprints.RollingNumberMeasureStaticLabelParentFingerprint
|
||||||
import app.revanced.patches.youtube.layout.returnyoutubedislike.fingerprints.RollingNumberSetterFingerprint
|
import app.revanced.patches.youtube.layout.returnyoutubedislike.fingerprints.RollingNumberSetterFingerprint
|
||||||
import app.revanced.patches.youtube.layout.returnyoutubedislike.fingerprints.RollingNumberTextViewFingerprint
|
import app.revanced.patches.youtube.layout.returnyoutubedislike.fingerprints.RollingNumberTextViewFingerprint
|
||||||
import app.revanced.patches.youtube.layout.returnyoutubedislike.fingerprints.ShortsTextViewFingerprint
|
import app.revanced.patches.youtube.layout.returnyoutubedislike.fingerprints.ShortsTextViewFingerprint
|
||||||
|
@ -55,11 +54,8 @@ import com.android.tools.smali.dexlib2.iface.reference.TypeReference
|
||||||
compatiblePackages = [
|
compatiblePackages = [
|
||||||
CompatiblePackage(
|
CompatiblePackage(
|
||||||
"com.google.android.youtube", [
|
"com.google.android.youtube", [
|
||||||
"18.38.44",
|
"18.49.37",
|
||||||
"18.43.45",
|
"19.01.34"
|
||||||
"18.44.41",
|
|
||||||
"18.45.41",
|
|
||||||
"18.45.43"
|
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
@ -76,7 +72,8 @@ object ReturnYouTubeDislikePatch : BytecodePatch(
|
||||||
DislikeFingerprint,
|
DislikeFingerprint,
|
||||||
RemoveLikeFingerprint,
|
RemoveLikeFingerprint,
|
||||||
RollingNumberSetterFingerprint,
|
RollingNumberSetterFingerprint,
|
||||||
RollingNumberMeasureTextParentFingerprint,
|
RollingNumberMeasureStaticLabelParentFingerprint,
|
||||||
|
RollingNumberMeasureAnimatedTextFingerprint,
|
||||||
RollingNumberTextViewFingerprint,
|
RollingNumberTextViewFingerprint,
|
||||||
RollingNumberTextViewAnimationUpdateFingerprint
|
RollingNumberTextViewAnimationUpdateFingerprint
|
||||||
)
|
)
|
||||||
|
@ -276,24 +273,19 @@ object ReturnYouTubeDislikePatch : BytecodePatch(
|
||||||
|
|
||||||
// Rolling Number text views use the measured width of the raw string for layout.
|
// Rolling Number text views use the measured width of the raw string for layout.
|
||||||
// Modify the measure text calculation to include the left drawable separator if needed.
|
// Modify the measure text calculation to include the left drawable separator if needed.
|
||||||
RollingNumberMeasureAnimatedTextFingerprint.also {
|
RollingNumberMeasureAnimatedTextFingerprint.result?.also {
|
||||||
if (!it.resolve(context, RollingNumberMeasureTextParentFingerprint.result!!.classDef))
|
val scanResult = it.scanResult.patternScanResult!!
|
||||||
throw it.exception
|
// Additional check to verify the opcodes are at the start of the method
|
||||||
}.result?.also {
|
if (scanResult.startIndex != 0) throw PatchException("Unexpected opcode location")
|
||||||
|
val endIndex = scanResult.endIndex
|
||||||
it.mutableMethod.apply {
|
it.mutableMethod.apply {
|
||||||
val returnInstructionIndex = it.scanResult.patternScanResult!!.endIndex
|
val measuredTextWidthRegister = getInstruction<OneRegisterInstruction>(endIndex).registerA
|
||||||
val measuredTextWidthRegister =
|
|
||||||
getInstruction<OneRegisterInstruction>(returnInstructionIndex).registerA
|
|
||||||
|
|
||||||
replaceInstruction( // Replace instruction to preserve control flow label.
|
|
||||||
returnInstructionIndex,
|
|
||||||
"invoke-static {p1, v$measuredTextWidthRegister}, $INTEGRATIONS_CLASS_DESCRIPTOR->onRollingNumberMeasured(Ljava/lang/String;F)F"
|
|
||||||
)
|
|
||||||
addInstructions(
|
addInstructions(
|
||||||
returnInstructionIndex + 1,
|
endIndex + 1,
|
||||||
"""
|
"""
|
||||||
|
invoke-static {p1, v$measuredTextWidthRegister}, $INTEGRATIONS_CLASS_DESCRIPTOR->onRollingNumberMeasured(Ljava/lang/String;F)F
|
||||||
move-result v$measuredTextWidthRegister
|
move-result v$measuredTextWidthRegister
|
||||||
return v$measuredTextWidthRegister
|
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -301,12 +293,10 @@ object ReturnYouTubeDislikePatch : BytecodePatch(
|
||||||
|
|
||||||
// Additional text measurement method. Used if YouTube decides not to animate the likes count
|
// Additional text measurement method. Used if YouTube decides not to animate the likes count
|
||||||
// and sometimes used for initial video load.
|
// and sometimes used for initial video load.
|
||||||
RollingNumberMeasureStaticLabelFingerprint.also {
|
RollingNumberMeasureStaticLabelFingerprint.resolve(context, RollingNumberMeasureStaticLabelParentFingerprint.resultOrThrow().classDef)
|
||||||
if (!it.resolve(context, RollingNumberMeasureTextParentFingerprint.result!!.classDef))
|
RollingNumberMeasureStaticLabelFingerprint.result?.also {
|
||||||
throw it.exception
|
|
||||||
}.result?.also {
|
|
||||||
it.mutableMethod.apply {
|
|
||||||
val measureTextIndex = it.scanResult.patternScanResult!!.startIndex + 1
|
val measureTextIndex = it.scanResult.patternScanResult!!.startIndex + 1
|
||||||
|
it.mutableMethod.apply {
|
||||||
val freeRegister = getInstruction<TwoRegisterInstruction>(0).registerA
|
val freeRegister = getInstruction<TwoRegisterInstruction>(0).registerA
|
||||||
|
|
||||||
addInstructions(
|
addInstructions(
|
||||||
|
|
|
@ -5,19 +5,24 @@ import app.revanced.patcher.fingerprint.MethodFingerprint
|
||||||
import com.android.tools.smali.dexlib2.AccessFlags
|
import com.android.tools.smali.dexlib2.AccessFlags
|
||||||
import com.android.tools.smali.dexlib2.Opcode
|
import com.android.tools.smali.dexlib2.Opcode
|
||||||
|
|
||||||
/**
|
|
||||||
* Resolves to class found in [RollingNumberMeasureTextParentFingerprint].
|
|
||||||
*/
|
|
||||||
internal object RollingNumberMeasureAnimatedTextFingerprint : MethodFingerprint(
|
internal object RollingNumberMeasureAnimatedTextFingerprint : MethodFingerprint(
|
||||||
returnType = "F",
|
returnType = "Lj\$/util/Optional;",
|
||||||
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
|
accessFlags = AccessFlags.PUBLIC or AccessFlags.STATIC,
|
||||||
parameters = listOf("Ljava/lang/String;"),
|
parameters = listOf(
|
||||||
|
"L",
|
||||||
|
"Ljava/lang/String;",
|
||||||
|
"L"
|
||||||
|
),
|
||||||
opcodes = listOf(
|
opcodes = listOf(
|
||||||
Opcode.INVOKE_VIRTUAL,
|
Opcode.IGET, // First instruction of method
|
||||||
|
Opcode.IGET_OBJECT,
|
||||||
|
Opcode.IGET_OBJECT,
|
||||||
|
Opcode.CONST_HIGH16,
|
||||||
|
Opcode.INVOKE_STATIC,
|
||||||
Opcode.MOVE_RESULT,
|
Opcode.MOVE_RESULT,
|
||||||
Opcode.ADD_FLOAT_2ADDR,
|
Opcode.CONST_4,
|
||||||
Opcode.ADD_INT_LIT8,
|
Opcode.AGET,
|
||||||
Opcode.GOTO,
|
Opcode.CONST_4,
|
||||||
Opcode.RETURN
|
Opcode.CONST_4, // Measured text width
|
||||||
)
|
)
|
||||||
)
|
)
|
|
@ -6,7 +6,7 @@ import com.android.tools.smali.dexlib2.AccessFlags
|
||||||
import com.android.tools.smali.dexlib2.Opcode
|
import com.android.tools.smali.dexlib2.Opcode
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Resolves to class found in [RollingNumberMeasureTextParentFingerprint].
|
* Resolves to class found in [RollingNumberMeasureStaticLabelParentFingerprint].
|
||||||
*/
|
*/
|
||||||
internal object RollingNumberMeasureStaticLabelFingerprint : MethodFingerprint(
|
internal object RollingNumberMeasureStaticLabelFingerprint : MethodFingerprint(
|
||||||
returnType = "F",
|
returnType = "F",
|
||||||
|
|
|
@ -4,7 +4,7 @@ import app.revanced.patcher.extensions.or
|
||||||
import app.revanced.patcher.fingerprint.MethodFingerprint
|
import app.revanced.patcher.fingerprint.MethodFingerprint
|
||||||
import com.android.tools.smali.dexlib2.AccessFlags
|
import com.android.tools.smali.dexlib2.AccessFlags
|
||||||
|
|
||||||
internal object RollingNumberMeasureTextParentFingerprint : MethodFingerprint(
|
internal object RollingNumberMeasureStaticLabelParentFingerprint : MethodFingerprint(
|
||||||
returnType = "Ljava/lang/String;",
|
returnType = "Ljava/lang/String;",
|
||||||
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
|
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
|
||||||
parameters = listOf(),
|
parameters = listOf(),
|
|
@ -26,8 +26,10 @@ import app.revanced.patches.youtube.misc.settings.SettingsPatch
|
||||||
"18.37.36",
|
"18.37.36",
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -23,8 +23,10 @@ import app.revanced.patches.youtube.misc.integrations.IntegrationsPatch
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -38,13 +38,9 @@ import com.android.tools.smali.dexlib2.iface.reference.StringReference
|
||||||
compatiblePackages = [
|
compatiblePackages = [
|
||||||
CompatiblePackage(
|
CompatiblePackage(
|
||||||
"com.google.android.youtube", [
|
"com.google.android.youtube", [
|
||||||
"18.32.39",
|
"18.48.39",
|
||||||
"18.37.36",
|
"18.49.37",
|
||||||
"18.38.44",
|
"19.01.34"
|
||||||
"18.43.45",
|
|
||||||
"18.44.41",
|
|
||||||
"18.45.41",
|
|
||||||
"18.45.43"
|
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
|
|
|
@ -28,8 +28,10 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -24,8 +24,10 @@ import app.revanced.patches.youtube.misc.settings.SettingsPatch
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -32,8 +32,10 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -35,8 +35,10 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -40,8 +40,10 @@ import com.android.tools.smali.dexlib2.immutable.ImmutableMethod
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -10,7 +10,7 @@ import app.revanced.patcher.patch.annotation.Patch
|
||||||
import app.revanced.patches.shared.settings.preference.impl.StringResource
|
import app.revanced.patches.shared.settings.preference.impl.StringResource
|
||||||
import app.revanced.patches.shared.settings.preference.impl.SwitchPreference
|
import app.revanced.patches.shared.settings.preference.impl.SwitchPreference
|
||||||
import app.revanced.patches.youtube.misc.settings.SettingsPatch
|
import app.revanced.patches.youtube.misc.settings.SettingsPatch
|
||||||
import app.revanced.patches.youtube.shared.fingerprints.WatchWhileActivityFingerprint
|
import app.revanced.patches.youtube.shared.fingerprints.MainActivityFingerprint
|
||||||
import com.android.tools.smali.dexlib2.Opcode
|
import com.android.tools.smali.dexlib2.Opcode
|
||||||
|
|
||||||
@Patch(
|
@Patch(
|
||||||
|
@ -21,15 +21,15 @@ import com.android.tools.smali.dexlib2.Opcode
|
||||||
)
|
)
|
||||||
@Suppress("unused")
|
@Suppress("unused")
|
||||||
object AnnouncementsPatch : BytecodePatch(
|
object AnnouncementsPatch : BytecodePatch(
|
||||||
setOf(WatchWhileActivityFingerprint)
|
setOf(MainActivityFingerprint)
|
||||||
) {
|
) {
|
||||||
private const val INTEGRATIONS_CLASS_DESCRIPTOR =
|
private const val INTEGRATIONS_CLASS_DESCRIPTOR =
|
||||||
"Lapp/revanced/integrations/youtube/patches/announcements/AnnouncementsPatch;"
|
"Lapp/revanced/integrations/youtube/patches/announcements/AnnouncementsPatch;"
|
||||||
|
|
||||||
override fun execute(context: BytecodeContext) {
|
override fun execute(context: BytecodeContext) {
|
||||||
val onCreateMethod = WatchWhileActivityFingerprint.result?.let {
|
val onCreateMethod = MainActivityFingerprint.result?.let {
|
||||||
it.mutableClass.methods.find { method -> method.name == "onCreate" }
|
it.mutableClass.methods.find { method -> method.name == "onCreate" }
|
||||||
} ?: throw WatchWhileActivityFingerprint.exception
|
} ?: throw MainActivityFingerprint.exception
|
||||||
|
|
||||||
val superCallIndex = onCreateMethod.getInstructions().indexOfFirst { it.opcode == Opcode.INVOKE_SUPER_RANGE }
|
val superCallIndex = onCreateMethod.getInstructions().indexOfFirst { it.opcode == Opcode.INVOKE_SUPER_RANGE }
|
||||||
|
|
||||||
|
|
|
@ -28,8 +28,10 @@ import app.revanced.patches.youtube.misc.settings.SettingsPatch
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -23,12 +23,15 @@ import app.revanced.patches.youtube.misc.settings.SettingsPatch
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
@Suppress("unused")
|
||||||
object SpoofDeviceDimensionsPatch : BytecodePatch(
|
object SpoofDeviceDimensionsPatch : BytecodePatch(
|
||||||
setOf(DeviceDimensionsModelToStringFingerprint)
|
setOf(DeviceDimensionsModelToStringFingerprint)
|
||||||
) {
|
) {
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package app.revanced.patches.youtube.misc.fix.backtoexitgesture
|
package app.revanced.patches.youtube.misc.fix.backtoexitgesture
|
||||||
|
|
||||||
import app.revanced.util.exception
|
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||||
import app.revanced.patcher.fingerprint.MethodFingerprint
|
import app.revanced.patcher.fingerprint.MethodFingerprint
|
||||||
|
@ -10,6 +9,7 @@ import app.revanced.patches.youtube.misc.fix.backtoexitgesture.fingerprints.OnBa
|
||||||
import app.revanced.patches.youtube.misc.fix.backtoexitgesture.fingerprints.RecyclerViewScrollingFingerprint
|
import app.revanced.patches.youtube.misc.fix.backtoexitgesture.fingerprints.RecyclerViewScrollingFingerprint
|
||||||
import app.revanced.patches.youtube.misc.fix.backtoexitgesture.fingerprints.RecyclerViewTopScrollingFingerprint
|
import app.revanced.patches.youtube.misc.fix.backtoexitgesture.fingerprints.RecyclerViewTopScrollingFingerprint
|
||||||
import app.revanced.patches.youtube.misc.fix.backtoexitgesture.fingerprints.RecyclerViewTopScrollingParentFingerprint
|
import app.revanced.patches.youtube.misc.fix.backtoexitgesture.fingerprints.RecyclerViewTopScrollingParentFingerprint
|
||||||
|
import app.revanced.util.exception
|
||||||
|
|
||||||
@Patch(description = "Fixes the swipe back to exit gesture.")
|
@Patch(description = "Fixes the swipe back to exit gesture.")
|
||||||
@Suppress("unused")
|
@Suppress("unused")
|
||||||
|
@ -37,7 +37,7 @@ internal object FixBackToExitGesturePatch : BytecodePatch(
|
||||||
methodName = "onScrollingViews"
|
methodName = "onScrollingViews"
|
||||||
),
|
),
|
||||||
OnBackPressedFingerprint to IntegrationsMethod(
|
OnBackPressedFingerprint to IntegrationsMethod(
|
||||||
"p0", "onBackPressed", "Lcom/google/android/apps/youtube/app/watchwhile/WatchWhileActivity;"
|
"p0", "onBackPressed", "Landroid/app/Activity;"
|
||||||
)
|
)
|
||||||
).forEach { (fingerprint, target) -> fingerprint.injectCall(target) }
|
).forEach { (fingerprint, target) -> fingerprint.injectCall(target) }
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,7 +12,9 @@ internal object OnBackPressedFingerprint : MethodFingerprint(
|
||||||
Opcode.RETURN_VOID
|
Opcode.RETURN_VOID
|
||||||
),
|
),
|
||||||
customFingerprint = { methodDef, _ ->
|
customFingerprint = { methodDef, _ ->
|
||||||
methodDef.definingClass.endsWith("WatchWhileActivity;")
|
(methodDef.definingClass.endsWith("MainActivity;") ||
|
||||||
|
// Old versions of YouTube called this class "WatchWhileActivity" instead.
|
||||||
|
methodDef.definingClass.endsWith("WatchWhileActivity;"))
|
||||||
&& methodDef.name == "onBackPressed"
|
&& methodDef.name == "onBackPressed"
|
||||||
}
|
}
|
||||||
)
|
)
|
|
@ -10,22 +10,16 @@ import app.revanced.patcher.patch.annotation.Patch
|
||||||
import app.revanced.patches.youtube.misc.fix.playback.fingerprints.UserAgentHeaderBuilderFingerprint
|
import app.revanced.patches.youtube.misc.fix.playback.fingerprints.UserAgentHeaderBuilderFingerprint
|
||||||
import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction
|
import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction
|
||||||
|
|
||||||
|
|
||||||
@Patch(
|
@Patch(
|
||||||
name = "Client spoof",
|
name = "Client spoof",
|
||||||
description = "Adds options to spoof the client to allow video playback.",
|
description = "Adds options to spoof the client to allow video playback.",
|
||||||
dependencies = [SpoofSignaturePatch::class],
|
dependencies = [SpoofSignaturePatch::class],
|
||||||
compatiblePackages = [
|
compatiblePackages = [
|
||||||
CompatiblePackage(
|
CompatiblePackage(
|
||||||
"com.google.android.youtube",
|
"com.google.android.youtube", [
|
||||||
[
|
"18.48.39",
|
||||||
"18.32.39",
|
"18.49.37",
|
||||||
"18.37.36",
|
"19.01.34"
|
||||||
"18.38.44",
|
|
||||||
"18.43.45",
|
|
||||||
"18.44.41",
|
|
||||||
"18.45.41",
|
|
||||||
"18.45.43"
|
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -33,13 +33,9 @@ object GmsCoreSupportPatch : AbstractGmsCoreSupportPatch(
|
||||||
compatiblePackages = setOf(
|
compatiblePackages = setOf(
|
||||||
CompatiblePackage(
|
CompatiblePackage(
|
||||||
"com.google.android.youtube", setOf(
|
"com.google.android.youtube", setOf(
|
||||||
"18.32.39",
|
"18.48.39",
|
||||||
"18.37.36",
|
"18.49.37",
|
||||||
"18.38.44",
|
"19.01.34"
|
||||||
"18.43.45",
|
|
||||||
"18.44.41",
|
|
||||||
"18.45.41",
|
|
||||||
"18.45.43"
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
|
|
|
@ -25,12 +25,15 @@ import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction
|
||||||
[
|
[
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
@Suppress("unused")
|
||||||
object BypassURLRedirectsPatch : BytecodePatch(
|
object BypassURLRedirectsPatch : BytecodePatch(
|
||||||
setOf(ABUriParserFingerprint, HTTPUriParserFingerprint)
|
setOf(ABUriParserFingerprint, HTTPUriParserFingerprint)
|
||||||
) {
|
) {
|
||||||
|
|
|
@ -28,8 +28,10 @@ import com.android.tools.smali.dexlib2.iface.reference.StringReference
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -34,13 +34,9 @@ import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||||
CompatiblePackage(
|
CompatiblePackage(
|
||||||
"com.google.android.youtube",
|
"com.google.android.youtube",
|
||||||
[
|
[
|
||||||
"18.32.39",
|
"18.48.39",
|
||||||
"18.37.36",
|
"18.49.37",
|
||||||
"18.38.44",
|
"19.01.34"
|
||||||
"18.43.45",
|
|
||||||
"18.44.41",
|
|
||||||
"18.45.41",
|
|
||||||
"18.45.43"
|
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -30,8 +30,10 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
|
||||||
[
|
[
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -4,10 +4,12 @@ import app.revanced.patcher.extensions.or
|
||||||
import app.revanced.patcher.fingerprint.MethodFingerprint
|
import app.revanced.patcher.fingerprint.MethodFingerprint
|
||||||
import com.android.tools.smali.dexlib2.AccessFlags
|
import com.android.tools.smali.dexlib2.AccessFlags
|
||||||
|
|
||||||
internal object WatchWhileActivityFingerprint : MethodFingerprint(
|
internal object MainActivityFingerprint : MethodFingerprint(
|
||||||
accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR,
|
accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR,
|
||||||
parameters = listOf(),
|
parameters = listOf(),
|
||||||
customFingerprint = { methodDef, _ ->
|
customFingerprint = { methodDef, _ ->
|
||||||
methodDef.definingClass.endsWith("WatchWhileActivity;")
|
methodDef.definingClass.endsWith("MainActivity;")
|
||||||
|
// Old versions of YouTube called this class "WatchWhileActivity" instead.
|
||||||
|
|| methodDef.definingClass.endsWith("WatchWhileActivity;")
|
||||||
}
|
}
|
||||||
)
|
)
|
|
@ -26,8 +26,10 @@ import com.android.tools.smali.dexlib2.iface.reference.FieldReference
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package app.revanced.patches.youtube.video.information
|
package app.revanced.patches.youtube.video.information
|
||||||
|
|
||||||
import app.revanced.util.exception
|
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||||
|
@ -14,6 +13,7 @@ import app.revanced.patches.youtube.misc.integrations.IntegrationsPatch
|
||||||
import app.revanced.patches.youtube.video.information.fingerprints.*
|
import app.revanced.patches.youtube.video.information.fingerprints.*
|
||||||
import app.revanced.patches.youtube.video.playerresponse.PlayerResponseMethodHookPatch
|
import app.revanced.patches.youtube.video.playerresponse.PlayerResponseMethodHookPatch
|
||||||
import app.revanced.patches.youtube.video.videoid.VideoIdPatch
|
import app.revanced.patches.youtube.video.videoid.VideoIdPatch
|
||||||
|
import app.revanced.util.exception
|
||||||
import com.android.tools.smali.dexlib2.AccessFlags
|
import com.android.tools.smali.dexlib2.AccessFlags
|
||||||
import com.android.tools.smali.dexlib2.Opcode
|
import com.android.tools.smali.dexlib2.Opcode
|
||||||
import com.android.tools.smali.dexlib2.builder.BuilderInstruction
|
import com.android.tools.smali.dexlib2.builder.BuilderInstruction
|
||||||
|
|
|
@ -18,29 +18,44 @@ object PlayerResponseMethodHookPatch :
|
||||||
BytecodePatch(setOf(PlayerParameterBuilderFingerprint)),
|
BytecodePatch(setOf(PlayerParameterBuilderFingerprint)),
|
||||||
Closeable,
|
Closeable,
|
||||||
MutableSet<PlayerResponseMethodHookPatch.Hook> by mutableSetOf() {
|
MutableSet<PlayerResponseMethodHookPatch.Hook> by mutableSetOf() {
|
||||||
private const val VIDEO_ID_PARAMETER = 1
|
|
||||||
private const val IS_SHORT_AND_OPENING_OR_PLAYING_PARAMETER = 11
|
// Parameter numbers of the patched method.
|
||||||
private const val PROTO_BUFFER_PARAMETER_PARAMETER = 3
|
private const val PARAMETER_VIDEO_ID = 1
|
||||||
|
private const val PARAMETER_PROTO_BUFFER = 3
|
||||||
|
private const val PARAMETER_IS_SHORT_AND_OPENING_OR_PLAYING = 11
|
||||||
|
|
||||||
|
// Temporary 4-bit registers used to pass the parameters to integrations.
|
||||||
|
private const val REGISTER_VIDEO_ID = 0
|
||||||
|
private const val REGISTER_PROTO_BUFFER = 1
|
||||||
|
private const val REGISTER_IS_SHORT_AND_OPENING_OR_PLAYING = 2
|
||||||
|
|
||||||
private lateinit var playerResponseMethod: MutableMethod
|
private lateinit var playerResponseMethod: MutableMethod
|
||||||
|
|
||||||
|
private var numberOfInstructionsAdded = 0
|
||||||
|
|
||||||
override fun execute(context: BytecodeContext) {
|
override fun execute(context: BytecodeContext) {
|
||||||
playerResponseMethod = PlayerParameterBuilderFingerprint.result?.mutableMethod
|
playerResponseMethod = PlayerParameterBuilderFingerprint.result?.mutableMethod
|
||||||
?: throw PlayerParameterBuilderFingerprint.exception
|
?: throw PlayerParameterBuilderFingerprint.exception
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun close() {
|
override fun close() {
|
||||||
fun hookVideoId(hook: Hook) = playerResponseMethod.addInstruction(
|
fun hookVideoId(hook: Hook) {
|
||||||
0, "invoke-static {p$VIDEO_ID_PARAMETER, p$IS_SHORT_AND_OPENING_OR_PLAYING_PARAMETER}, $hook"
|
playerResponseMethod.addInstruction(
|
||||||
|
0, "invoke-static {v$REGISTER_VIDEO_ID, v$REGISTER_IS_SHORT_AND_OPENING_OR_PLAYING}, $hook"
|
||||||
)
|
)
|
||||||
|
numberOfInstructionsAdded++
|
||||||
|
}
|
||||||
|
|
||||||
fun hookProtoBufferParameter(hook: Hook) = playerResponseMethod.addInstructions(
|
fun hookProtoBufferParameter(hook: Hook) {
|
||||||
|
playerResponseMethod.addInstructions(
|
||||||
0,
|
0,
|
||||||
"""
|
"""
|
||||||
invoke-static {p$PROTO_BUFFER_PARAMETER_PARAMETER, p$IS_SHORT_AND_OPENING_OR_PLAYING_PARAMETER}, $hook
|
invoke-static {v$REGISTER_PROTO_BUFFER, v$REGISTER_IS_SHORT_AND_OPENING_OR_PLAYING}, $hook
|
||||||
move-result-object p$PROTO_BUFFER_PARAMETER_PARAMETER
|
move-result-object v$REGISTER_PROTO_BUFFER
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
|
numberOfInstructionsAdded += 2
|
||||||
|
}
|
||||||
|
|
||||||
// Reverse the order in order to preserve insertion order of the hooks.
|
// Reverse the order in order to preserve insertion order of the hooks.
|
||||||
val beforeVideoIdHooks = filterIsInstance<Hook.ProtoBufferParameterBeforeVideoId>().asReversed()
|
val beforeVideoIdHooks = filterIsInstance<Hook.ProtoBufferParameterBeforeVideoId>().asReversed()
|
||||||
|
@ -51,6 +66,23 @@ object PlayerResponseMethodHookPatch :
|
||||||
afterVideoIdHooks.forEach(::hookProtoBufferParameter)
|
afterVideoIdHooks.forEach(::hookProtoBufferParameter)
|
||||||
videoIdHooks.forEach(::hookVideoId)
|
videoIdHooks.forEach(::hookVideoId)
|
||||||
beforeVideoIdHooks.forEach(::hookProtoBufferParameter)
|
beforeVideoIdHooks.forEach(::hookProtoBufferParameter)
|
||||||
|
|
||||||
|
// On some app targets the method has too many registers pushing the parameters past v15.
|
||||||
|
// Move the parameters to 4-bit registers so they can be passed to integrations.
|
||||||
|
playerResponseMethod.addInstructions(
|
||||||
|
0, """
|
||||||
|
move-object/from16 v$REGISTER_VIDEO_ID, p$PARAMETER_VIDEO_ID
|
||||||
|
move-object/from16 v$REGISTER_PROTO_BUFFER, p$PARAMETER_PROTO_BUFFER
|
||||||
|
move/from16 v$REGISTER_IS_SHORT_AND_OPENING_OR_PLAYING, p$PARAMETER_IS_SHORT_AND_OPENING_OR_PLAYING
|
||||||
|
""",
|
||||||
|
)
|
||||||
|
numberOfInstructionsAdded += 3
|
||||||
|
|
||||||
|
// Move the modified register back.
|
||||||
|
playerResponseMethod.addInstruction(
|
||||||
|
numberOfInstructionsAdded,
|
||||||
|
"move-object/from16 p$PARAMETER_PROTO_BUFFER, v$REGISTER_PROTO_BUFFER"
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal abstract class Hook(private val methodDescriptor: String) {
|
internal abstract class Hook(private val methodDescriptor: String) {
|
||||||
|
|
|
@ -31,13 +31,9 @@ import com.android.tools.smali.dexlib2.iface.reference.FieldReference
|
||||||
compatiblePackages = [
|
compatiblePackages = [
|
||||||
CompatiblePackage(
|
CompatiblePackage(
|
||||||
"com.google.android.youtube", [
|
"com.google.android.youtube", [
|
||||||
"18.32.39",
|
"18.48.39",
|
||||||
"18.37.36",
|
"18.49.37",
|
||||||
"18.38.44",
|
"19.01.34"
|
||||||
"18.43.45",
|
|
||||||
"18.44.41",
|
|
||||||
"18.45.41",
|
|
||||||
"18.45.43"
|
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -14,13 +14,9 @@ import app.revanced.patches.youtube.video.speed.remember.RememberPlaybackSpeedPa
|
||||||
compatiblePackages = [
|
compatiblePackages = [
|
||||||
CompatiblePackage(
|
CompatiblePackage(
|
||||||
"com.google.android.youtube", [
|
"com.google.android.youtube", [
|
||||||
"18.32.39",
|
"18.48.39",
|
||||||
"18.37.36",
|
"18.49.37",
|
||||||
"18.38.44",
|
"19.01.34"
|
||||||
"18.43.45",
|
|
||||||
"18.44.41",
|
|
||||||
"18.45.41",
|
|
||||||
"18.45.43"
|
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
@ -29,7 +29,13 @@ import com.android.tools.smali.dexlib2.immutable.ImmutableField
|
||||||
|
|
||||||
@Patch(
|
@Patch(
|
||||||
description = "Adds custom playback speed options.",
|
description = "Adds custom playback speed options.",
|
||||||
dependencies = [IntegrationsPatch::class, LithoFilterPatch::class, SettingsPatch::class, RecyclerViewTreeHookPatch::class]
|
dependencies = [
|
||||||
|
IntegrationsPatch::class,
|
||||||
|
LithoFilterPatch::class,
|
||||||
|
SettingsPatch::class,
|
||||||
|
RecyclerViewTreeHookPatch::class,
|
||||||
|
CustomPlaybackSpeedResourcePatch::class
|
||||||
|
]
|
||||||
)
|
)
|
||||||
object CustomPlaybackSpeedPatch : BytecodePatch(
|
object CustomPlaybackSpeedPatch : BytecodePatch(
|
||||||
setOf(
|
setOf(
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
package app.revanced.patches.youtube.video.speed.custom
|
||||||
|
|
||||||
|
import app.revanced.patcher.data.ResourceContext
|
||||||
|
import app.revanced.patcher.patch.ResourcePatch
|
||||||
|
import app.revanced.patches.shared.mapping.misc.ResourceMappingPatch
|
||||||
|
|
||||||
|
internal object CustomPlaybackSpeedResourcePatch : ResourcePatch() {
|
||||||
|
var speedUnavailableId: Long = -1
|
||||||
|
|
||||||
|
override fun execute(context: ResourceContext) {
|
||||||
|
speedUnavailableId = ResourceMappingPatch.resourceMappings.single {
|
||||||
|
it.type == "string" && it.name == "varispeed_unavailable_message"
|
||||||
|
}.id
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,7 +1,10 @@
|
||||||
package app.revanced.patches.youtube.video.speed.custom.fingerprints
|
package app.revanced.patches.youtube.video.speed.custom.fingerprints
|
||||||
|
|
||||||
import app.revanced.patcher.fingerprint.MethodFingerprint
|
import app.revanced.patches.youtube.video.speed.custom.CustomPlaybackSpeedResourcePatch
|
||||||
|
import app.revanced.util.patch.LiteralValueFingerprint
|
||||||
|
|
||||||
internal object ShowOldPlaybackSpeedMenuFingerprint : MethodFingerprint(
|
internal object ShowOldPlaybackSpeedMenuFingerprint : LiteralValueFingerprint(
|
||||||
strings = listOf("PLAYBACK_RATE_MENU_BOTTOM_SHEET_FRAGMENT")
|
literalSupplier = {
|
||||||
|
CustomPlaybackSpeedResourcePatch.speedUnavailableId
|
||||||
|
}
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package app.revanced.patches.youtube.video.videoid
|
package app.revanced.patches.youtube.video.videoid
|
||||||
|
|
||||||
import app.revanced.util.exception
|
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||||
|
@ -13,6 +12,7 @@ import app.revanced.patches.youtube.misc.playertype.PlayerTypeHookPatch
|
||||||
import app.revanced.patches.youtube.video.playerresponse.PlayerResponseMethodHookPatch
|
import app.revanced.patches.youtube.video.playerresponse.PlayerResponseMethodHookPatch
|
||||||
import app.revanced.patches.youtube.video.videoid.fingerprint.VideoIdFingerprint
|
import app.revanced.patches.youtube.video.videoid.fingerprint.VideoIdFingerprint
|
||||||
import app.revanced.patches.youtube.video.videoid.fingerprint.VideoIdFingerprintBackgroundPlay
|
import app.revanced.patches.youtube.video.videoid.fingerprint.VideoIdFingerprintBackgroundPlay
|
||||||
|
import app.revanced.util.exception
|
||||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||||
|
|
||||||
@Patch(
|
@Patch(
|
||||||
|
@ -49,7 +49,7 @@ object VideoIdPatch : BytecodePatch(
|
||||||
consumer(it, insertIndex, videoIdRegister)
|
consumer(it, insertIndex, videoIdRegister)
|
||||||
|
|
||||||
}
|
}
|
||||||
} ?: throw VideoIdFingerprint.exception
|
} ?: throw exception
|
||||||
|
|
||||||
VideoIdFingerprint.setFields { method, index, register ->
|
VideoIdFingerprint.setFields { method, index, register ->
|
||||||
videoIdMethod = method
|
videoIdMethod = method
|
||||||
|
|
|
@ -10,19 +10,13 @@ internal object VideoIdFingerprint : MethodFingerprint(
|
||||||
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
|
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
|
||||||
parameters = listOf("L"),
|
parameters = listOf("L"),
|
||||||
opcodes = listOf(
|
opcodes = listOf(
|
||||||
Opcode.MOVE_RESULT_OBJECT,
|
|
||||||
Opcode.IF_EQZ,
|
|
||||||
Opcode.INVOKE_VIRTUAL,
|
|
||||||
Opcode.MOVE_RESULT_OBJECT,
|
|
||||||
Opcode.INVOKE_INTERFACE,
|
|
||||||
Opcode.MOVE_RESULT_OBJECT,
|
Opcode.MOVE_RESULT_OBJECT,
|
||||||
Opcode.IF_EQZ,
|
Opcode.IF_EQZ,
|
||||||
Opcode.IGET_OBJECT,
|
Opcode.IGET_OBJECT,
|
||||||
Opcode.INVOKE_VIRTUAL,
|
Opcode.IGET_OBJECT,
|
||||||
Opcode.MOVE_RESULT_OBJECT,
|
|
||||||
Opcode.INVOKE_INTERFACE,
|
Opcode.INVOKE_INTERFACE,
|
||||||
Opcode.MOVE_RESULT_OBJECT,
|
Opcode.MOVE_RESULT_OBJECT,
|
||||||
Opcode.INVOKE_INTERFACE,
|
Opcode.INVOKE_INTERFACE,
|
||||||
Opcode.MOVE_RESULT_OBJECT
|
Opcode.MOVE_RESULT_OBJECT,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
|
@ -10,18 +10,10 @@ internal object VideoIdFingerprintBackgroundPlay : MethodFingerprint(
|
||||||
accessFlags = AccessFlags.DECLARED_SYNCHRONIZED or AccessFlags.FINAL or AccessFlags.PUBLIC,
|
accessFlags = AccessFlags.DECLARED_SYNCHRONIZED or AccessFlags.FINAL or AccessFlags.PUBLIC,
|
||||||
parameters = listOf("L"),
|
parameters = listOf("L"),
|
||||||
opcodes = listOf(
|
opcodes = listOf(
|
||||||
Opcode.MONITOR_EXIT,
|
|
||||||
Opcode.RETURN_VOID,
|
|
||||||
Opcode.INVOKE_VIRTUAL,
|
|
||||||
Opcode.MOVE_RESULT_OBJECT,
|
|
||||||
Opcode.NEW_ARRAY,
|
|
||||||
Opcode.SGET_OBJECT,
|
|
||||||
Opcode.APUT_OBJECT,
|
|
||||||
Opcode.INVOKE_VIRTUAL,
|
Opcode.INVOKE_VIRTUAL,
|
||||||
Opcode.MOVE_RESULT,
|
Opcode.MOVE_RESULT,
|
||||||
Opcode.IF_EQZ,
|
Opcode.IF_EQZ,
|
||||||
Opcode.INVOKE_VIRTUAL,
|
Opcode.IGET_OBJECT,
|
||||||
Opcode.MOVE_RESULT_OBJECT,
|
|
||||||
Opcode.IF_EQZ,
|
Opcode.IF_EQZ,
|
||||||
Opcode.INVOKE_INTERFACE,
|
Opcode.INVOKE_INTERFACE,
|
||||||
Opcode.MOVE_RESULT_OBJECT,
|
Opcode.MOVE_RESULT_OBJECT,
|
||||||
|
|
|
@ -30,8 +30,10 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||||
"18.38.44",
|
"18.38.44",
|
||||||
"18.43.45",
|
"18.43.45",
|
||||||
"18.44.41",
|
"18.44.41",
|
||||||
"18.45.41",
|
"18.45.43",
|
||||||
"18.45.43"
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
Loading…
Reference in a new issue