mirror of
https://github.com/ReVanced/revanced-patches.git
synced 2026-01-24 03:01:03 +00:00
Merge remote-tracking branch 'Ushie/refactor/modernize-api-ushie' into fork/Ushie/refactor/modernize-api-ushie
# Conflicts: # patches/src/main/kotlin/app/revanced/patches/amazon/DeepLinkingPatch.kt # patches/src/main/kotlin/app/revanced/patches/cieid/restrictions/root/BypassRootChecksPatch.kt # patches/src/main/kotlin/app/revanced/patches/duolingo/debug/EnableDebugMenuPatch.kt # patches/src/main/kotlin/app/revanced/patches/facebook/ads/story/HideStoryAdsPatch.kt # patches/src/main/kotlin/app/revanced/patches/finanzonline/detection/bootloader/BootloaderDetectionPatch.kt # patches/src/main/kotlin/app/revanced/patches/hexeditor/ad/DisableAdsPatch.kt # patches/src/main/kotlin/app/revanced/patches/inshorts/ad/InshortsAdsPatch.kt # patches/src/main/kotlin/app/revanced/patches/lightroom/misc/bypassVersionCheck/DisableVersionCheckPatch.kt # patches/src/main/kotlin/app/revanced/patches/music/layout/buttons/HideButtons.kt # patches/src/main/kotlin/app/revanced/patches/music/layout/compactheader/HideCategoryBar.kt # patches/src/main/kotlin/app/revanced/patches/music/layout/navigationbar/NavigationBarPatch.kt # patches/src/main/kotlin/app/revanced/patches/music/misc/backgroundplayback/BackgroundPlaybackPatch.kt # patches/src/main/kotlin/app/revanced/patches/protonvpn/splittunneling/UnlockSplitTunneling.kt # patches/src/main/kotlin/app/revanced/patches/strava/upselling/DisableSubscriptionSuggestionsPatch.kt # patches/src/main/kotlin/app/revanced/patches/tiktok/interaction/cleardisplay/RememberClearDisplayPatch.kt # patches/src/main/kotlin/app/revanced/patches/tiktok/interaction/downloads/DownloadsPatch.kt # patches/src/main/kotlin/app/revanced/patches/tiktok/interaction/speed/PlaybackSpeedPatch.kt # patches/src/main/kotlin/app/revanced/patches/tiktok/misc/login/fixgoogle/FixGoogleLoginPatch.kt # patches/src/main/kotlin/app/revanced/patches/tumblr/annoyances/popups/DisableGiftMessagePopupPatch.kt # patches/src/main/kotlin/app/revanced/patches/twitch/chat/autoclaim/AutoClaimChannelPointsPatch.kt # patches/src/main/kotlin/app/revanced/patches/twitter/layout/viewcount/HideViewCountPatch.kt # patches/src/main/kotlin/app/revanced/patches/youtube/layout/miniplayer/MiniplayerPatch.kt # patches/src/main/kotlin/app/revanced/patches/youtube/misc/navigation/Fingerprints.kt
This commit is contained in:
@@ -1,12 +1,11 @@
|
||||
package app.revanced.patches.all.misc.build
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.patcher.patch.longOption
|
||||
import app.revanced.patcher.patch.stringOption
|
||||
|
||||
@Suppress("unused")
|
||||
val spoofBuildInfoPatch = bytecodePatch(
|
||||
name = "Spoof build info",
|
||||
val `Spoof build info` by creatingBytecodePatch(
|
||||
description = "Spoofs the information about the current build.",
|
||||
use = false,
|
||||
) {
|
||||
|
||||
@@ -2,8 +2,8 @@ package app.revanced.patches.all.misc.connectivity.telephony.sim.spoof
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
|
||||
@Deprecated("Patch was renamed", ReplaceWith("spoofSimProviderPatch"))
|
||||
@Deprecated("Patch was renamed", ReplaceWith("`Spoof SIM provider`"))
|
||||
@Suppress("unused")
|
||||
val spoofSimCountryPatch = bytecodePatch {
|
||||
dependsOn(spoofSimProviderPatch)
|
||||
dependsOn(`Spoof SIM provider`)
|
||||
}
|
||||
@@ -2,7 +2,7 @@ package app.revanced.patches.all.misc.connectivity.telephony.sim.spoof
|
||||
|
||||
import app.revanced.patcher.extensions.getInstruction
|
||||
import app.revanced.patcher.extensions.replaceInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.patcher.patch.intOption
|
||||
import app.revanced.patcher.patch.stringOption
|
||||
import app.revanced.patches.all.misc.transformation.transformInstructionsPatch
|
||||
@@ -15,8 +15,7 @@ import com.android.tools.smali.dexlib2.util.MethodUtil
|
||||
import java.util.*
|
||||
|
||||
@Suppress("unused")
|
||||
val spoofSimProviderPatch = bytecodePatch(
|
||||
name = "Spoof SIM provider",
|
||||
val `Spoof SIM provider` by creatingBytecodePatch(
|
||||
description = "Spoofs information about the SIM card provider.",
|
||||
use = false,
|
||||
) {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package app.revanced.patches.all.misc.connectivity.wifi.spoof
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.patches.all.misc.transformation.IMethodCall
|
||||
import app.revanced.patches.all.misc.transformation.filterMapInstruction35c
|
||||
import app.revanced.patches.all.misc.transformation.transformInstructionsPatch
|
||||
@@ -11,8 +11,7 @@ private const val EXTENSION_CLASS_DESCRIPTOR_PREFIX =
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR = "$EXTENSION_CLASS_DESCRIPTOR_PREFIX;"
|
||||
|
||||
@Suppress("unused")
|
||||
val spoofWifiPatch = bytecodePatch(
|
||||
name = "Spoof Wi-Fi connection",
|
||||
val `Spoof Wi-Fi connection` by creatingBytecodePatch(
|
||||
description = "Spoofs an existing Wi-Fi connection.",
|
||||
use = false,
|
||||
) {
|
||||
|
||||
@@ -2,15 +2,14 @@ package app.revanced.patches.all.misc.customcertificates
|
||||
|
||||
import app.revanced.patcher.patch.PatchException
|
||||
import app.revanced.patcher.patch.booleanOption
|
||||
import app.revanced.patcher.patch.resourcePatch
|
||||
import app.revanced.patcher.patch.creatingResourcePatch
|
||||
import app.revanced.patcher.patch.stringsOption
|
||||
import app.revanced.util.Utils.trimIndentMultiline
|
||||
import app.revanced.util.getNode
|
||||
import org.w3c.dom.Element
|
||||
import java.io.File
|
||||
|
||||
val customNetworkSecurityPatch = resourcePatch(
|
||||
name = "Custom network security",
|
||||
val `Custom network security` = creatingResourcePatch(
|
||||
description = "Allows trusting custom certificate authorities for a specific domain.",
|
||||
use = false
|
||||
) {
|
||||
|
||||
@@ -1,15 +1,14 @@
|
||||
package app.revanced.patches.all.misc.directory.documentsprovider
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.resourcePatch
|
||||
import app.revanced.patcher.patch.creatingResourcePatch
|
||||
import app.revanced.util.asSequence
|
||||
import app.revanced.util.getNode
|
||||
|
||||
@Suppress("unused")
|
||||
val exportInternalDataDocumentsProviderPatch = resourcePatch(
|
||||
name = "Export internal data documents provider",
|
||||
val `Export internal data documents provider` = creatingResourcePatch(
|
||||
description = "Exports a documents provider that grants access to the internal data directory of this app " +
|
||||
"to file managers and other apps that support the Storage Access Framework.",
|
||||
"to file managers and other apps that support the Storage Access Framework.",
|
||||
use = false,
|
||||
) {
|
||||
dependsOn(
|
||||
|
||||
@@ -1,15 +1,14 @@
|
||||
package app.revanced.patches.all.misc.hex
|
||||
|
||||
import app.revanced.patcher.patch.PatchException
|
||||
import app.revanced.patcher.patch.rawResourcePatch
|
||||
import app.revanced.patcher.patch.creatingRawResourcePatch
|
||||
import app.revanced.patcher.patch.stringsOption
|
||||
import app.revanced.patches.shared.misc.hex.HexPatchBuilder
|
||||
import app.revanced.patches.shared.misc.hex.hexPatch
|
||||
import app.revanced.util.Utils.trimIndentMultiline
|
||||
|
||||
@Suppress("unused")
|
||||
val hexPatch = rawResourcePatch(
|
||||
name = "Hex",
|
||||
val Hex = creatingRawResourcePatch(
|
||||
description = "Replaces a hexadecimal patterns of bytes of files in an APK.",
|
||||
use = false,
|
||||
) {
|
||||
|
||||
@@ -26,10 +26,9 @@ fun setOrGetFallbackPackageName(fallbackPackageName: String): String {
|
||||
}
|
||||
}
|
||||
|
||||
val changePackageNamePatch = resourcePatch(
|
||||
name = "Change package name",
|
||||
val `Change package name` = creatingResourcePatch(
|
||||
description = "Appends \".revanced\" to the package name by default. " +
|
||||
"Changing the package name of the app can lead to unexpected issues.",
|
||||
"Changing the package name of the app can lead to unexpected issues.",
|
||||
use = false,
|
||||
) {
|
||||
packageNameOption = stringOption(
|
||||
@@ -46,14 +45,14 @@ val changePackageNamePatch = resourcePatch(
|
||||
default = false,
|
||||
name = "Update permissions",
|
||||
description = "Update compatibility receiver permissions. " +
|
||||
"Enabling this can fix installation errors, but this can also break features in certain apps.",
|
||||
"Enabling this can fix installation errors, but this can also break features in certain apps.",
|
||||
)
|
||||
|
||||
val updateProviders by booleanOption(
|
||||
default = false,
|
||||
name = "Update providers",
|
||||
description = "Update provider names declared by the app. " +
|
||||
"Enabling this can fix installation errors, but this can also break features in certain apps.",
|
||||
"Enabling this can fix installation errors, but this can also break features in certain apps.",
|
||||
)
|
||||
|
||||
afterDependents {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package app.revanced.patches.all.misc.playintegrity
|
||||
|
||||
import app.revanced.patcher.extensions.replaceInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.patches.all.misc.transformation.transformInstructionsPatch
|
||||
import app.revanced.util.getReference
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction35c
|
||||
@@ -20,8 +20,7 @@ private val CONTEXT_BIND_SERVICE_METHOD_REFERENCE = ImmutableMethodReference(
|
||||
|
||||
|
||||
@Suppress("unused")
|
||||
val disablePlayIntegrityPatch = bytecodePatch(
|
||||
name = "Disable Play Integrity",
|
||||
val `Disable Play Integrity` by creatingBytecodePatch(
|
||||
description = "Prevents apps from using Play Integrity by pretending it is not available.",
|
||||
use = false,
|
||||
) {
|
||||
@@ -42,7 +41,8 @@ val disablePlayIntegrityPatch = bytecodePatch(
|
||||
transform = { method, entry ->
|
||||
val (instruction, index, parameterTypes) = entry
|
||||
val parameterString = parameterTypes.joinToString(separator = "")
|
||||
val registerString = "v${instruction.registerC}, v${instruction.registerD}, v${instruction.registerE}, v${instruction.registerF}"
|
||||
val registerString =
|
||||
"v${instruction.registerC}, v${instruction.registerD}, v${instruction.registerE}, v${instruction.registerF}"
|
||||
|
||||
method.replaceInstruction(
|
||||
index,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package app.revanced.patches.all.misc.shortcut.sharetargets
|
||||
|
||||
import app.revanced.patcher.patch.resourcePatch
|
||||
import app.revanced.patcher.patch.creatingResourcePatch
|
||||
import app.revanced.util.asSequence
|
||||
import app.revanced.util.getNode
|
||||
import org.w3c.dom.Element
|
||||
@@ -8,8 +8,7 @@ import java.io.FileNotFoundException
|
||||
import java.util.logging.Logger
|
||||
|
||||
@Suppress("unused")
|
||||
val removeShareTargetsPatch = resourcePatch(
|
||||
name = "Remove share targets",
|
||||
val `Remove share targets` = creatingResourcePatch(
|
||||
description = "Removes share targets like directly sharing to a frequent contact.",
|
||||
use = false,
|
||||
) {
|
||||
@@ -18,7 +17,8 @@ val removeShareTargetsPatch = resourcePatch(
|
||||
document("res/xml/shortcuts.xml")
|
||||
} catch (_: FileNotFoundException) {
|
||||
return@apply Logger.getLogger(this::class.java.name).warning(
|
||||
"The app has no shortcuts. No changes applied.")
|
||||
"The app has no shortcuts. No changes applied."
|
||||
)
|
||||
}.use { document ->
|
||||
val rootNode = document.getNode("shortcuts") as? Element ?: return@use
|
||||
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
package app.revanced.patches.all.misc.spoof
|
||||
|
||||
import app.revanced.patcher.patch.resourcePatch
|
||||
import app.revanced.patcher.patch.creatingResourcePatch
|
||||
import app.revanced.patcher.patch.stringOption
|
||||
import app.revanced.util.getNode
|
||||
import com.android.apksig.ApkVerifier
|
||||
import com.android.apksig.apk.ApkFormatException
|
||||
import org.w3c.dom.Element
|
||||
import java.io.File
|
||||
import java.io.IOException
|
||||
import java.nio.file.InvalidPathException
|
||||
@@ -15,8 +14,8 @@ import java.security.cert.CertificateFactory
|
||||
import java.util.*
|
||||
|
||||
@Suppress("unused")
|
||||
val enableRomSignatureSpoofing = resourcePatch(
|
||||
name = "Enable ROM signature spoofing",
|
||||
val `Enable ROM signature spoofing` = creatingResourcePatch(
|
||||
name = "",
|
||||
description = "Spoofs the signature via the manifest meta-data \"fake-signature\". " +
|
||||
"This patch only works with ROMs that support signature spoofing.",
|
||||
use = false,
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
package app.revanced.patches.all.misc.targetSdk
|
||||
|
||||
import app.revanced.patcher.patch.resourcePatch
|
||||
import app.revanced.patcher.patch.creatingResourcePatch
|
||||
import app.revanced.util.getNode
|
||||
import org.w3c.dom.Element
|
||||
import java.util.logging.Logger
|
||||
|
||||
@Suppress("unused")
|
||||
val setTargetSdkVersion34 = resourcePatch(
|
||||
name = "Set target SDK version 34",
|
||||
val `Set target SDK version 34` = creatingResourcePatch(
|
||||
description = "Changes the target SDK to version 34 (Android 14). " +
|
||||
"For devices running Android 15+, this will disable edge-to-edge display.",
|
||||
use = false,
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
package app.revanced.patches.all.misc.versioncode
|
||||
|
||||
import app.revanced.patcher.patch.creatingResourcePatch
|
||||
import app.revanced.patcher.patch.intOption
|
||||
import app.revanced.patcher.patch.resourcePatch
|
||||
import app.revanced.util.getNode
|
||||
import org.w3c.dom.Element
|
||||
|
||||
@Suppress("unused")
|
||||
val changeVersionCodePatch = resourcePatch(
|
||||
name = "Change version code",
|
||||
val `Change version code` = creatingResourcePatch(
|
||||
description = "Changes the version code of the app. This will turn off app store updates " +
|
||||
"and allows downgrading an existing app install to an older app version.",
|
||||
use = false,
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
package app.revanced.patches.amazon
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Suppress("unused")
|
||||
val deepLinkingPatch = bytecodePatch(
|
||||
name = "Always allow deep-linking",
|
||||
val `Always allow deep-linking` by creatingBytecodePatch(
|
||||
description = "Open Amazon links, even if the app is not set to handle Amazon links.",
|
||||
) {
|
||||
compatibleWith("com.amazon.mShop.android.shopping")
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
package app.revanced.patches.angulus.ads
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patches.shared.misc.pairip.license.disableLicenseCheckPatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.patches.shared.misc.pairip.license.`Disable Pairip license check`
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Suppress("unused")
|
||||
val angulusPatch = bytecodePatch(name = "Hide ads") {
|
||||
val `Hide ads` by creatingBytecodePatch {
|
||||
compatibleWith("com.drinkplusplus.angulus")
|
||||
|
||||
dependsOn(disableLicenseCheckPatch)
|
||||
dependsOn(`Disable Pairip license check`)
|
||||
|
||||
apply {
|
||||
// Always return 0 as the daily measurement count.
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
package app.revanced.patches.bandcamp.limitations
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Suppress("unused")
|
||||
val removePlayLimitsPatch = bytecodePatch(
|
||||
name = "Remove play limits",
|
||||
val `Remove play limits` by creatingBytecodePatch(
|
||||
description = "Disables purchase nagging and playback limits of not purchased tracks.",
|
||||
) {
|
||||
compatibleWith("com.bandcamp.android")
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
package app.revanced.patches.cieid.restrictions.root
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.extensions.addInstruction
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Suppress("unused")
|
||||
val bypassRootChecksPatch = bytecodePatch(
|
||||
name = "Bypass root checks",
|
||||
val `Bypass root checks` by creatingBytecodePatch(
|
||||
description = "Removes the restriction to use the app with root permissions or on a custom ROM.",
|
||||
) {
|
||||
compatibleWith("it.ipzs.cieid")
|
||||
|
||||
@@ -1,18 +1,17 @@
|
||||
package app.revanced.patches.com.sbs.ondemand.tv
|
||||
|
||||
import app.revanced.patcher.extensions.addInstructions
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patches.shared.misc.pairip.license.disableLicenseCheckPatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.patches.shared.misc.pairip.license.`Disable Pairip license check`
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Suppress("unused")
|
||||
val removeAdsPatch = bytecodePatch(
|
||||
name = "Remove ads",
|
||||
val `Remove ads` by creatingBytecodePatch(
|
||||
description = "Removes pre-roll, pause and on-demand advertisements from SBS On Demand TV.",
|
||||
) {
|
||||
compatibleWith("com.sbs.ondemand.tv")
|
||||
|
||||
dependsOn(disableLicenseCheckPatch)
|
||||
dependsOn(`Disable Pairip license check`)
|
||||
|
||||
apply {
|
||||
shouldShowAdvertisingTVMethod.returnEarly(true)
|
||||
@@ -25,7 +24,7 @@ val removeAdsPatch = bytecodePatch(
|
||||
// 3. Exception triggers fallbackToAkamaiProvider() which loads actual content.
|
||||
// 4. This preserves the intended app flow: first try ads, then fail gracefully, then load content.
|
||||
requestAdStreamMethod.addInstructions(
|
||||
0,
|
||||
0,
|
||||
"""
|
||||
new-instance v0, Ljava/lang/RuntimeException;
|
||||
const-string v1, "Ad stream disabled"
|
||||
|
||||
@@ -2,7 +2,7 @@ package app.revanced.patches.cricbuzz.ads
|
||||
|
||||
import app.revanced.patcher.extensions.addInstruction
|
||||
import app.revanced.patcher.extensions.getInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.patches.cricbuzz.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.util.getReference
|
||||
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||
@@ -15,9 +15,7 @@ private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/cricbuzz/ads/HideAdsPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val disableAdsPatch = bytecodePatch (
|
||||
name = "Hide ads",
|
||||
) {
|
||||
val `Hide ads` by creatingBytecodePatch {
|
||||
compatibleWith("com.cricbuzz.android"("6.24.01"))
|
||||
|
||||
dependsOn(sharedExtensionPatch)
|
||||
@@ -28,12 +26,13 @@ val disableAdsPatch = bytecodePatch (
|
||||
// Remove region-specific Cricbuzz11 elements.
|
||||
cb11ConstructorMethod.addInstruction(0, "const/4 p7, 0x0")
|
||||
getBottomBarMethod.apply {
|
||||
val getIndex = indexOfFirstInstructionOrThrow() {
|
||||
val getIndex = indexOfFirstInstructionOrThrow {
|
||||
opcode == Opcode.IGET_OBJECT && getReference<FieldReference>()?.name == "bottomBar"
|
||||
}
|
||||
val getRegister = getInstruction<TwoRegisterInstruction>(getIndex).registerA
|
||||
|
||||
addInstruction(getIndex + 1,
|
||||
addInstruction(
|
||||
getIndex + 1,
|
||||
"invoke-static { v$getRegister }, $EXTENSION_CLASS_DESCRIPTOR->filterCb11(Ljava/util/List;)V"
|
||||
)
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ import app.revanced.patcher.classDef
|
||||
import app.revanced.patcher.extensions.addInstructions
|
||||
import app.revanced.patcher.extensions.getInstruction
|
||||
import app.revanced.patcher.extensions.instructions
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.util.getReference
|
||||
import app.revanced.util.indexOfFirstInstruction
|
||||
import app.revanced.util.removeFlags
|
||||
@@ -14,9 +14,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.reference.FieldReference
|
||||
|
||||
@Suppress("unused")
|
||||
val hideAdsPatch = bytecodePatch(
|
||||
name = "Hide ads"
|
||||
) {
|
||||
val `Hide ads` by creatingBytecodePatch {
|
||||
compatibleWith("com.crunchyroll.crunchyroid")
|
||||
|
||||
apply {
|
||||
@@ -42,6 +40,7 @@ val hideAdsPatch = bytecodePatch(
|
||||
move-object/from16 v0, p0
|
||||
const/4 v1, 0x0
|
||||
iput-boolean v1, v0, $enableAdsField
|
||||
""")
|
||||
"""
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -1,11 +1,10 @@
|
||||
package app.revanced.patches.disneyplus
|
||||
|
||||
import app.revanced.patcher.extensions.addInstructions
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
|
||||
@Suppress("unused")
|
||||
val skipAdsPatch = bytecodePatch(
|
||||
name = "Skip ads",
|
||||
val `Skip ads` by creatingBytecodePatch(
|
||||
description = "Automatically skips ads.",
|
||||
) {
|
||||
compatibleWith("com.disney.disneyplus")
|
||||
@@ -13,8 +12,8 @@ val skipAdsPatch = bytecodePatch(
|
||||
apply {
|
||||
arrayOf(insertionGetPointsMethod, insertionGetRangesMethod).forEach {
|
||||
it.addInstructions(
|
||||
0,
|
||||
"""
|
||||
0,
|
||||
"""
|
||||
new-instance v0, Ljava/util/ArrayList;
|
||||
invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V
|
||||
return-object v0
|
||||
|
||||
@@ -3,13 +3,11 @@ package app.revanced.patches.duolingo.ad
|
||||
import app.revanced.patcher.classDef
|
||||
import app.revanced.patcher.extensions.addInstructions
|
||||
import app.revanced.patcher.extensions.getInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
|
||||
|
||||
@Suppress("unused")
|
||||
val disableAdsPatch = bytecodePatch(
|
||||
"Disable ads",
|
||||
) {
|
||||
val `Disable ads` by creatingBytecodePatch {
|
||||
// 6.55.3 and higher can show ads after each exercise.
|
||||
compatibleWith("com.duolingo"("6.54.5"))
|
||||
|
||||
|
||||
@@ -3,13 +3,12 @@ package app.revanced.patches.duolingo.debug
|
||||
import app.revanced.patcher.classDef
|
||||
import app.revanced.patcher.extensions.addInstruction
|
||||
import app.revanced.patcher.extensions.getInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.util.returnEarly
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
|
||||
@Suppress("unused")
|
||||
val enableDebugMenuPatch = bytecodePatch(
|
||||
name = "Enable debug menu",
|
||||
val `Enable debug menu` by creatingBytecodePatch(
|
||||
use = false,
|
||||
) {
|
||||
compatibleWith("com.duolingo")
|
||||
|
||||
@@ -2,12 +2,11 @@ package app.revanced.patches.duolingo.energy
|
||||
|
||||
import app.revanced.patcher.classDef
|
||||
import app.revanced.patcher.extensions.addInstructions
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.util.findFieldFromToString
|
||||
|
||||
@Suppress("unused")
|
||||
val skipEnergyRechargeAdsPatch = bytecodePatch(
|
||||
name = "Skip energy recharge ads",
|
||||
val `Skip energy recharge ads` by creatingBytecodePatch(
|
||||
description = "Skips watching ads to recharge energy."
|
||||
) {
|
||||
compatibleWith("com.duolingo")
|
||||
|
||||
@@ -2,18 +2,16 @@ package app.revanced.patches.facebook.ads.mainfeed
|
||||
|
||||
import app.revanced.patcher.extensions.addInstructions
|
||||
import app.revanced.patcher.extensions.addInstructionsWithLabels
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import com.android.tools.smali.dexlib2.mutable.MutableMethod.Companion.toMutable
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.builder.MutableMethodImplementation
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction31i
|
||||
import com.android.tools.smali.dexlib2.immutable.ImmutableMethod
|
||||
import com.android.tools.smali.dexlib2.immutable.ImmutableMethodParameter
|
||||
import com.android.tools.smali.dexlib2.mutable.MutableMethod.Companion.toMutable
|
||||
|
||||
@Suppress("unused")
|
||||
val hideSponsoredStoriesPatch = bytecodePatch(
|
||||
name = "Hide 'Sponsored Stories'",
|
||||
) {
|
||||
val `Hide 'Sponsored Stories'` by creatingBytecodePatch {
|
||||
compatibleWith("com.facebook.katana"("490.0.0.63.82"))
|
||||
|
||||
apply {
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
package app.revanced.patches.facebook.ads.story
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.util.returnEarly
|
||||
import com.android.tools.smali.dexlib2.mutable.MutableMethod
|
||||
|
||||
@Suppress("unused")
|
||||
val hideStoryAdsPatch = bytecodePatch(
|
||||
name = "Hide story ads",
|
||||
val `Hide story ads` by creatingBytecodePatch(
|
||||
description = "Hides the ads in the Facebook app stories.",
|
||||
) {
|
||||
compatibleWith("com.facebook.katana")
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
package app.revanced.patches.finanzonline.detection.bootloader
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.util.returnEarly
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
|
||||
@Suppress("unused")
|
||||
val bootloaderDetectionPatch = bytecodePatch(
|
||||
name = "Remove bootloader detection",
|
||||
val `Remove bootloader detection` by creatingBytecodePatch(
|
||||
description = "Removes the check for an unlocked bootloader.",
|
||||
) {
|
||||
compatibleWith("at.gv.bmf.bmf2go")
|
||||
|
||||
@@ -2,12 +2,11 @@ package app.revanced.patches.googlenews.customtabs
|
||||
|
||||
import app.revanced.patcher.extensions.getInstruction
|
||||
import app.revanced.patcher.extensions.replaceInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
|
||||
@Suppress("unused")
|
||||
val enableCustomTabsPatch = bytecodePatch(
|
||||
name = "Enable CustomTabs",
|
||||
val `Enable CustomTabs` by creatingBytecodePatch(
|
||||
description = "Enables CustomTabs to open articles in your default browser.",
|
||||
) {
|
||||
compatibleWith("com.google.android.apps.magazines")
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
package app.revanced.patches.googlephotos.misc.backup
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Suppress("unused")
|
||||
val enableDCIMFoldersBackupControlPatch = bytecodePatch(
|
||||
name = "Enable DCIM folders backup control",
|
||||
val `Enable DCIM folders backup control` by creatingBytecodePatch(
|
||||
description = "Disables always on backup for the Camera and other DCIM folders, allowing you to control backup " +
|
||||
"for each folder individually. This will make the app default to having no folders backed up.",
|
||||
use = false,
|
||||
|
||||
@@ -2,7 +2,7 @@ package app.revanced.patches.googlephotos.misc.features
|
||||
|
||||
import app.revanced.patcher.extensions.instructions
|
||||
import app.revanced.patcher.extensions.replaceInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.patcher.patch.stringsOption
|
||||
import app.revanced.util.getReference
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
@@ -10,8 +10,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.reference.StringReference
|
||||
|
||||
@Suppress("unused")
|
||||
val spoofFeaturesPatch = bytecodePatch(
|
||||
name = "Spoof features",
|
||||
val `Spoof features` by creatingBytecodePatch(
|
||||
description = "Spoofs the device to enable Google Pixel exclusive features, including unlimited storage.",
|
||||
) {
|
||||
compatibleWith("com.google.android.apps.photos")
|
||||
@@ -49,7 +48,7 @@ val spoofFeaturesPatch = bytecodePatch(
|
||||
),
|
||||
name = "Features to disable",
|
||||
description = "Google Pixel exclusive features to disable." +
|
||||
"Features after Pixel XL may have to be disabled for unlimited storage depending on the device.",
|
||||
"Features after Pixel XL may have to be disabled for unlimited storage depending on the device.",
|
||||
required = true,
|
||||
)
|
||||
|
||||
|
||||
@@ -3,12 +3,11 @@ package app.revanced.patches.googlerecorder.restrictions
|
||||
import app.revanced.patcher.extensions.addInstruction
|
||||
import app.revanced.patcher.extensions.getInstruction
|
||||
import app.revanced.patcher.extensions.removeInstructions
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
|
||||
@Suppress("unused")
|
||||
val removeDeviceRestrictionsPatch = bytecodePatch(
|
||||
name = "Remove device restrictions",
|
||||
val `Remove device restrictions` by creatingBytecodePatch(
|
||||
description = "Removes restrictions from using the app on any device. Requires mounting patched app over original.",
|
||||
) {
|
||||
compatibleWith("com.google.android.apps.recorder")
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
package app.revanced.patches.hexeditor.ad
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.util.returnEarly
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
|
||||
@Suppress("unused")
|
||||
val disableAdsPatch = bytecodePatch(
|
||||
name = "Disable ads",
|
||||
) {
|
||||
val `Disable ads` by creatingBytecodePatch {
|
||||
compatibleWith("com.myprog.hexedit")
|
||||
|
||||
apply {
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
package app.revanced.patches.iconpackstudio.misc.pro
|
||||
|
||||
import app.revanced.patcher.extensions.addInstructions
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
|
||||
@Suppress("unused")
|
||||
val unlockProPatch = bytecodePatch(
|
||||
name = "Unlock pro",
|
||||
) {
|
||||
val `Unlock pro` by creatingBytecodePatch {
|
||||
compatibleWith("ginlemon.iconpackstudio"("2.2 build 016"))
|
||||
|
||||
apply {
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
package app.revanced.patches.idaustria.detection.deviceintegrity
|
||||
|
||||
import app.revanced.patcher.extensions.addInstructions
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Suppress("unused")
|
||||
val removeDeviceIntegrityChecksPatch = bytecodePatch(
|
||||
name = "Remove device integrity checks",
|
||||
val `Remove device integrity checks` by creatingBytecodePatch(
|
||||
description = "Removes the check for root permissions and unlocked bootloader.",
|
||||
) {
|
||||
compatibleWith("at.gv.oe.app")
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
package app.revanced.patches.idaustria.detection.root
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patches.idaustria.detection.deviceintegrity.removeDeviceIntegrityChecksPatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.patches.idaustria.detection.deviceintegrity.`Remove device integrity checks`
|
||||
|
||||
@Deprecated("Patch was superseded", ReplaceWith("removeDeviceIntegrityChecksPatch"))
|
||||
@Deprecated("Patch was superseded", ReplaceWith("`Remove device integrity checks`"))
|
||||
@Suppress("unused")
|
||||
val rootDetectionPatch = bytecodePatch {
|
||||
dependsOn(removeDeviceIntegrityChecksPatch)
|
||||
val rootDetectionPatch by creatingBytecodePatch {
|
||||
dependsOn(`Remove device integrity checks`)
|
||||
}
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
package app.revanced.patches.idaustria.detection.signature
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Suppress("unused")
|
||||
val spoofSignaturePatch = bytecodePatch(
|
||||
name = "Spoof signature",
|
||||
val `Spoof signature` by creatingBytecodePatch(
|
||||
description = "Spoofs the signature of the app.",
|
||||
) {
|
||||
compatibleWith("at.gv.oe.app")
|
||||
@@ -13,16 +12,16 @@ val spoofSignaturePatch = bytecodePatch(
|
||||
apply {
|
||||
val expectedSignature =
|
||||
"OpenSSLRSAPublicKey{modulus=ac3e6fd6050aa7e0d6010ae58190404cd89a56935b44f6fee" +
|
||||
"067c149768320026e10b24799a1339e414605e448e3f264444a327b9ae292be2b62ad567dd1800dbed4a88f718a33dc6db6b" +
|
||||
"f5178aa41aa0efff8a3409f5ca95dbfccd92c7b4298966df806ea7a0204a00f0e745f6d9f13bdf24f3df715d7b62c1600906" +
|
||||
"15de1c8a956b9286764985a3b3c060963c435fb9481a5543aaf0671fc2dba6c5c2b17d1ef1d85137f14dc9bbdf3490288087" +
|
||||
"324cd48341cce64fabf6a9b55d1a7bf23b2fcdff451fd85bf0c7feb0a5e884d7c5c078e413149566a12a686e6efa70ae5161" +
|
||||
"a0201307692834cda336c55157fef125e67c01c1359886f94742105596b42a790404bbcda5dad6a65f115aaff5e45ef3c28b" +
|
||||
"2316ff6cef07aa49a45aa58c07bf258051b13ef449ccb37a3679afd5cfb9132f70bb9d931a937897544f90c3bcc80ed012e9" +
|
||||
"f6ba020b8cdc23f8c29ac092b88f0e370ff9434e4f0f359e614ae0868dc526fa41e4b7596533e8d10279b66e923ecd9f0b20" +
|
||||
"0def55be2c1f6f9c72c92fb45d7e0a9ac571cb38f0a9a37bb33ea06f223fde8c7a92e8c47769e386f9799776e8f110c21df2" +
|
||||
"77ef1be61b2c01ebdabddcbf53cc4b6fd9a3c445606ee77b3758162c80ad8f8137b3c6864e92db904807dcb2be9d7717dd21" +
|
||||
"bf42c121d620ddfb7914f7a95c713d9e1c1b7bdb4a03d618e40cf7e9e235c0b5687e03b7ab3,publicExponent=10001}"
|
||||
"067c149768320026e10b24799a1339e414605e448e3f264444a327b9ae292be2b62ad567dd1800dbed4a88f718a33dc6db6b" +
|
||||
"f5178aa41aa0efff8a3409f5ca95dbfccd92c7b4298966df806ea7a0204a00f0e745f6d9f13bdf24f3df715d7b62c1600906" +
|
||||
"15de1c8a956b9286764985a3b3c060963c435fb9481a5543aaf0671fc2dba6c5c2b17d1ef1d85137f14dc9bbdf3490288087" +
|
||||
"324cd48341cce64fabf6a9b55d1a7bf23b2fcdff451fd85bf0c7feb0a5e884d7c5c078e413149566a12a686e6efa70ae5161" +
|
||||
"a0201307692834cda336c55157fef125e67c01c1359886f94742105596b42a790404bbcda5dad6a65f115aaff5e45ef3c28b" +
|
||||
"2316ff6cef07aa49a45aa58c07bf258051b13ef449ccb37a3679afd5cfb9132f70bb9d931a937897544f90c3bcc80ed012e9" +
|
||||
"f6ba020b8cdc23f8c29ac092b88f0e370ff9434e4f0f359e614ae0868dc526fa41e4b7596533e8d10279b66e923ecd9f0b20" +
|
||||
"0def55be2c1f6f9c72c92fb45d7e0a9ac571cb38f0a9a37bb33ea06f223fde8c7a92e8c47769e386f9799776e8f110c21df2" +
|
||||
"77ef1be61b2c01ebdabddcbf53cc4b6fd9a3c445606ee77b3758162c80ad8f8137b3c6864e92db904807dcb2be9d7717dd21" +
|
||||
"bf42c121d620ddfb7914f7a95c713d9e1c1b7bdb4a03d618e40cf7e9e235c0b5687e03b7ab3,publicExponent=10001}"
|
||||
|
||||
spoofSignatureMethod.returnEarly(expectedSignature)
|
||||
}
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
package app.revanced.patches.inshorts.ad
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.util.returnEarly
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
|
||||
@Suppress("unused")
|
||||
val hideAdsPatch = bytecodePatch(
|
||||
name = "Hide ads",
|
||||
) {
|
||||
val `Hide ads` by creatingBytecodePatch {
|
||||
compatibleWith("com.nis.app")
|
||||
|
||||
apply {
|
||||
|
||||
@@ -1,13 +1,11 @@
|
||||
package app.revanced.patches.instagram.ads
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.patches.meta.ads.adInjectorMethod
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Suppress("unused")
|
||||
val hideAdsPatch = bytecodePatch(
|
||||
name = "Hide ads",
|
||||
) {
|
||||
val `Hide ads` by creatingBytecodePatch {
|
||||
compatibleWith("com.instagram.android")
|
||||
|
||||
apply {
|
||||
|
||||
@@ -4,7 +4,7 @@ import app.revanced.patcher.classDef
|
||||
import app.revanced.patcher.extensions.addInstructions
|
||||
import app.revanced.patcher.extensions.getInstruction
|
||||
import app.revanced.patcher.fingerprint
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.patches.instagram.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.util.getReference
|
||||
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||
@@ -14,8 +14,7 @@ import com.android.tools.smali.dexlib2.iface.reference.FieldReference
|
||||
internal const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/instagram/feed/LimitFeedToFollowedProfiles;"
|
||||
|
||||
@Suppress("unused")
|
||||
val limitFeedToFollowedProfiles = bytecodePatch(
|
||||
name = "Limit feed to followed profiles",
|
||||
val `Limit feed to followed profiles` by creatingBytecodePatch(
|
||||
description = "Filters the home feed to display only content from profiles you follow.",
|
||||
use = false,
|
||||
) {
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
package app.revanced.patches.instagram.ghost.story
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.util.Utils.trimIndentMultiline
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Suppress("unused")
|
||||
val anonymousStoryViewingPatch = bytecodePatch(
|
||||
name = "Anonymous story viewing",
|
||||
val `Anonymous story viewing` by creatingBytecodePatch(
|
||||
description = """
|
||||
View stories without sending any information to the server.
|
||||
Your view will not appear in the story viewers list.
|
||||
|
||||
@@ -4,7 +4,7 @@ import app.revanced.patcher.Fingerprint
|
||||
import app.revanced.patcher.extensions.getInstruction
|
||||
import app.revanced.patcher.extensions.replaceInstruction
|
||||
import app.revanced.patcher.patch.BytecodePatchContext
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
|
||||
context(BytecodePatchContext)
|
||||
@@ -26,8 +26,7 @@ internal fun Fingerprint.replaceJsonFieldWithBogus(
|
||||
}
|
||||
|
||||
@Suppress("unused")
|
||||
val hideExploreFeedPatch = bytecodePatch(
|
||||
name = "Hide explore feed",
|
||||
val `Hide explore feed` by creatingBytecodePatch(
|
||||
description = "Hides posts and reels from the explore/search page.",
|
||||
use = false,
|
||||
) {
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
package app.revanced.patches.instagram.hide.stories
|
||||
|
||||
import app.revanced.patcher.extensions.removeInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
|
||||
@Suppress("unused")
|
||||
val hideStoriesPatch = bytecodePatch(
|
||||
name = "Hide Stories from Home",
|
||||
val `Hide Stories from Home` by creatingBytecodePatch(
|
||||
description = "Hides Stories from the main page, by removing the buttons.",
|
||||
use = false
|
||||
) {
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
package app.revanced.patches.instagram.hide.suggestions
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.patches.instagram.hide.explore.replaceJsonFieldWithBogus
|
||||
|
||||
@Suppress("unused")
|
||||
val hideSuggestedContent = bytecodePatch(
|
||||
name = "Hide suggested content",
|
||||
val `Hide suggested content` by creatingBytecodePatch(
|
||||
description = "Hides suggested stories, reels, threads and survey from feed (Suggested posts will still be shown).",
|
||||
use = false,
|
||||
) {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package app.revanced.patches.instagram.misc.devmenu
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.util.Utils.trimIndentMultiline
|
||||
import app.revanced.util.getReference
|
||||
import app.revanced.util.indexOfFirstInstructionReversedOrThrow
|
||||
@@ -9,8 +9,7 @@ import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||
|
||||
@Suppress("unused")
|
||||
val enableDeveloperMenuPatch = bytecodePatch(
|
||||
name = "Enable developer menu",
|
||||
val `Enable developer menu` by creatingBytecodePatch(
|
||||
description = """
|
||||
Enables the developer menu, which can be found at the bottom of settings menu with name 'Internal Settings'.
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ package app.revanced.patches.instagram.misc.links
|
||||
|
||||
import app.revanced.patcher.extensions.addInstructions
|
||||
import app.revanced.patcher.extensions.getInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.patches.instagram.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
@@ -11,8 +11,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/instagram/misc/links/OpenLinksExternallyPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val openLinksExternallyPatch = bytecodePatch(
|
||||
name = "Open links externally",
|
||||
val `Open links externally` by creatingBytecodePatch(
|
||||
description = "Changes links to always open in your external browser, instead of the in-app browser.",
|
||||
use = false,
|
||||
) {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package app.revanced.patches.instagram.misc.share.domain
|
||||
|
||||
import app.revanced.patcher.extensions.addInstructions
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.patcher.patch.stringOption
|
||||
import app.revanced.patches.instagram.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.instagram.misc.share.editShareLinksPatch
|
||||
@@ -11,8 +11,7 @@ internal const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/instagram/misc/share/domain/ChangeLinkSharingDomainPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val changeLinkSharingDomainPatch = bytecodePatch(
|
||||
name = "Change link sharing domain",
|
||||
val `Change link sharing domain` by creatingBytecodePatch(
|
||||
description = "Replaces the domain name of shared links.",
|
||||
use = false
|
||||
) {
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
package app.revanced.patches.instagram.misc.signature
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Suppress("unused")
|
||||
val signatureCheckPatch = bytecodePatch(
|
||||
name = "Disable signature check",
|
||||
val `Disable signature check` by creatingBytecodePatch(
|
||||
description = "Disables the signature check that can cause the app to crash on startup. " +
|
||||
"Using this patch may cause issues with sharing or opening external Instagram links.",
|
||||
use = false
|
||||
|
||||
@@ -2,12 +2,11 @@ package app.revanced.patches.instagram.reels
|
||||
|
||||
import app.revanced.patcher.classDef
|
||||
import app.revanced.patcher.extensions.addInstructions
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Suppress("unused")
|
||||
val disableReelsScrollingPatch = bytecodePatch(
|
||||
name = "Disable Reels scrolling",
|
||||
val `Disable Reels scrolling` by creatingBytecodePatch(
|
||||
description = "Disables the endless scrolling behavior in Instagram Reels, preventing swiping to the next Reel. " +
|
||||
"Note: On a clean install, the 'Tip' animation may appear but will stop on its own after a few seconds.",
|
||||
use = true
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
package app.revanced.patches.instagram.story.flipping
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Suppress("unused")
|
||||
val disableStoryAutoFlippingPatch = bytecodePatch(
|
||||
name = "Disable story auto flipping",
|
||||
val `Disable story auto flipping` by creatingBytecodePatch(
|
||||
description = "Disable stories automatically flipping/skipping after some seconds.",
|
||||
use = false
|
||||
) {
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
package app.revanced.patches.irplus.ad
|
||||
|
||||
import app.revanced.patcher.extensions.addInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
|
||||
@Suppress("unused")
|
||||
val removeAdsPatch = bytecodePatch(
|
||||
name = "Remove ads",
|
||||
) {
|
||||
val `Remove ads` by creatingBytecodePatch {
|
||||
compatibleWith("net.binarymode.android.irplus")
|
||||
|
||||
apply {
|
||||
|
||||
@@ -1,13 +1,11 @@
|
||||
package app.revanced.patches.letterboxd.ads
|
||||
|
||||
import app.revanced.patcher.extensions.addInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Suppress("unused")
|
||||
val hideAdsPatch = bytecodePatch(
|
||||
name = "Hide ads",
|
||||
) {
|
||||
val `Hide ads` by creatingBytecodePatch {
|
||||
compatibleWith("com.letterboxd.letterboxd")
|
||||
|
||||
apply {
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
package app.revanced.patches.letterboxd.unlock.unlockAppIcons
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Suppress("unused")
|
||||
val unlockAppIconsPatch = bytecodePatch(
|
||||
name = "Unlock app icons",
|
||||
) {
|
||||
val `Unlock app icons` by creatingBytecodePatch {
|
||||
compatibleWith("com.letterboxd.letterboxd")
|
||||
|
||||
apply {
|
||||
|
||||
@@ -2,12 +2,10 @@ package app.revanced.patches.lightroom.misc.login
|
||||
|
||||
import app.revanced.patcher.extensions.instructions
|
||||
import app.revanced.patcher.extensions.replaceInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
|
||||
@Suppress("unused")
|
||||
val disableMandatoryLoginPatch = bytecodePatch(
|
||||
name = "Disable mandatory login",
|
||||
) {
|
||||
val `Disable mandatory login` by creatingBytecodePatch {
|
||||
compatibleWith("com.adobe.lrmobile"("9.3.0"))
|
||||
|
||||
apply {
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
package app.revanced.patches.lightroom.misc.premium
|
||||
|
||||
import app.revanced.patcher.extensions.replaceInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
|
||||
@Suppress("unused")
|
||||
val unlockPremiumPatch = bytecodePatch(
|
||||
name = "Unlock Premium",
|
||||
) {
|
||||
val `Unlock Premium` by creatingBytecodePatch {
|
||||
compatibleWith("com.adobe.lrmobile"("9.3.0"))
|
||||
|
||||
apply {
|
||||
|
||||
@@ -1,14 +1,12 @@
|
||||
package app.revanced.patches.memegenerator.misc.pro
|
||||
|
||||
import app.revanced.patcher.extensions.replaceInstructions
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.patches.memegenerator.detection.license.licenseValidationPatch
|
||||
import app.revanced.patches.memegenerator.detection.signature.signatureVerificationPatch
|
||||
|
||||
@Suppress("unused")
|
||||
val unlockProVersionPatch = bytecodePatch(
|
||||
name = "Unlock pro",
|
||||
) {
|
||||
val `Unlock pro` by creatingBytecodePatch {
|
||||
dependsOn(signatureVerificationPatch, licenseValidationPatch)
|
||||
|
||||
compatibleWith("com.zombodroid.MemeGenerator"("4.6364", "4.6370", "4.6375", "4.6377"))
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
package app.revanced.patches.messenger.inbox
|
||||
|
||||
import app.revanced.patcher.extensions.replaceInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
|
||||
@Suppress("unused")
|
||||
val hideInboxAdsPatch = bytecodePatch(
|
||||
name = "Hide inbox ads",
|
||||
val `Hide inbox ads` by creatingBytecodePatch(
|
||||
description = "Hides ads in inbox.",
|
||||
) {
|
||||
compatibleWith("com.facebook.orca")
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
package app.revanced.patches.messenger.inbox
|
||||
|
||||
import app.revanced.patcher.extensions.replaceInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
|
||||
@Suppress("unused")
|
||||
val hideInboxSubtabsPatch = bytecodePatch(
|
||||
name = "Hide inbox subtabs",
|
||||
val `Hide inbox subtabs` by creatingBytecodePatch(
|
||||
description = "Hides Home and Channels tabs between active now tray and chats.",
|
||||
) {
|
||||
compatibleWith("com.facebook.orca")
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
package app.revanced.patches.messenger.layout
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Suppress("unused")
|
||||
val hideFacebookButtonPatch = bytecodePatch(
|
||||
name = "Hide Facebook button",
|
||||
val `Hide Facebook button` by creatingBytecodePatch(
|
||||
description = "Hides the Facebook button in the top toolbar."
|
||||
) {
|
||||
compatibleWith("com.facebook.orca")
|
||||
|
||||
@@ -4,7 +4,7 @@ import app.revanced.patcher.extensions.addInstructions
|
||||
import app.revanced.patcher.extensions.getInstruction
|
||||
import app.revanced.patcher.extensions.replaceInstruction
|
||||
import app.revanced.patcher.method
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.patches.messenger.misc.extension.sharedExtensionPatch
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.WideLiteralInstruction
|
||||
@@ -13,8 +13,7 @@ internal const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/messeng
|
||||
internal const val EXTENSION_METHOD_NAME = "overrideBooleanFlag"
|
||||
|
||||
@Suppress("unused")
|
||||
val removeMetaAIPatch = bytecodePatch(
|
||||
name = "Remove Meta AI",
|
||||
val `Remove Meta AI` by creatingBytecodePatch(
|
||||
description = "Removes UI elements related to Meta AI."
|
||||
) {
|
||||
compatibleWith("com.facebook.orca")
|
||||
|
||||
@@ -2,18 +2,17 @@ package app.revanced.patches.mifitness.misc.locale
|
||||
|
||||
import app.revanced.patcher.extensions.getInstruction
|
||||
import app.revanced.patcher.extensions.replaceInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patches.mifitness.misc.login.fixLoginPatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.patches.mifitness.misc.login.`Fix login`
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
|
||||
@Suppress("unused")
|
||||
val forceEnglishLocalePatch = bytecodePatch(
|
||||
name = "Force English locale",
|
||||
val `Force English locale` by creatingBytecodePatch(
|
||||
description = "Forces wearable devices to use the English locale.",
|
||||
) {
|
||||
compatibleWith("com.xiaomi.wearable")
|
||||
|
||||
dependsOn(fixLoginPatch)
|
||||
dependsOn(`Fix login`)
|
||||
|
||||
apply {
|
||||
syncBluetoothLanguageMethod.apply {
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
package app.revanced.patches.mifitness.misc.login
|
||||
|
||||
import app.revanced.patcher.extensions.addInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
|
||||
val fixLoginPatch = bytecodePatch(
|
||||
name = "Fix login",
|
||||
val `Fix login` by creatingBytecodePatch(
|
||||
description = "Fixes login for uncertified Mi Fitness app",
|
||||
) {
|
||||
compatibleWith("com.xiaomi.wearable")
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package app.revanced.patches.music.ad.video
|
||||
|
||||
import app.revanced.patcher.extensions.addInstructions
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.patches.all.misc.resources.addResources
|
||||
import app.revanced.patches.all.misc.resources.addResourcesPatch
|
||||
import app.revanced.patches.music.misc.extension.sharedExtensionPatch
|
||||
@@ -12,8 +12,7 @@ import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/music/patches/HideVideoAdsPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val hideVideoAdsPatch = bytecodePatch(
|
||||
name = "Hide music video ads",
|
||||
val `Hide music video ads` by creatingBytecodePatch(
|
||||
description = "Adds an option to hide ads that appear while listening to or streaming music videos, podcasts, or songs.",
|
||||
) {
|
||||
dependsOn(
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
package app.revanced.patches.music.audio.exclusiveaudio
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.patches.music.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.music.misc.settings.settingsPatch
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Suppress("unused")
|
||||
val enableExclusiveAudioPlaybackPatch = bytecodePatch(
|
||||
name = "Enable exclusive audio playback",
|
||||
val `Enable exclusive audio playback` by creatingBytecodePatch(
|
||||
description = "Enables the option to play audio without video.",
|
||||
) {
|
||||
dependsOn(
|
||||
|
||||
@@ -3,7 +3,7 @@ package app.revanced.patches.music.interaction.permanentrepeat
|
||||
import app.revanced.patcher.extensions.ExternalLabel
|
||||
import app.revanced.patcher.extensions.addInstructionsWithLabels
|
||||
import app.revanced.patcher.extensions.instructions
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.patches.all.misc.resources.addResources
|
||||
import app.revanced.patches.all.misc.resources.addResourcesPatch
|
||||
import app.revanced.patches.music.misc.extension.sharedExtensionPatch
|
||||
@@ -15,8 +15,7 @@ import app.revanced.util.findFreeRegister
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/music/patches/PermanentRepeatPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val permanentRepeatPatch = bytecodePatch(
|
||||
name = "Permanent repeat",
|
||||
val `Permanent repeat` by creatingBytecodePatch(
|
||||
description = "Adds an option to always repeat even if the playlist ends or another track is played."
|
||||
) {
|
||||
dependsOn(
|
||||
|
||||
@@ -3,7 +3,7 @@ package app.revanced.patches.music.layout.buttons
|
||||
import app.revanced.patcher.extensions.addInstruction
|
||||
import app.revanced.patcher.extensions.addInstructions
|
||||
import app.revanced.patcher.extensions.getInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.patches.all.misc.resources.addResources
|
||||
import app.revanced.patches.all.misc.resources.addResourcesPatch
|
||||
import app.revanced.patches.music.misc.extension.sharedExtensionPatch
|
||||
@@ -32,8 +32,7 @@ internal var topBarMenuItemImageView = -1L
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/music/patches/HideButtonsPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val hideButtons = bytecodePatch(
|
||||
name = "Hide buttons",
|
||||
val `Hide buttons` by creatingBytecodePatch(
|
||||
description = "Adds options to hide the cast, history, notification, and search buttons.",
|
||||
) {
|
||||
dependsOn(
|
||||
|
||||
@@ -2,7 +2,7 @@ package app.revanced.patches.music.layout.compactheader
|
||||
|
||||
import app.revanced.patcher.extensions.addInstruction
|
||||
import app.revanced.patcher.extensions.getInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.patches.all.misc.resources.addResources
|
||||
import app.revanced.patches.all.misc.resources.addResourcesPatch
|
||||
import app.revanced.patches.music.misc.extension.sharedExtensionPatch
|
||||
@@ -18,8 +18,7 @@ internal var chipCloud = -1L
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/music/patches/HideCategoryBarPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val hideCategoryBar = bytecodePatch(
|
||||
name = "Hide category bar",
|
||||
val `Hide category bar` by creatingBytecodePatch(
|
||||
description = "Adds an option to hide the category bar at the top of the homepage.",
|
||||
) {
|
||||
dependsOn(
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
package app.revanced.patches.music.layout.miniplayercolor
|
||||
|
||||
import app.revanced.patcher.extensions.getInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.patches.all.misc.resources.addResources
|
||||
import app.revanced.patches.all.misc.resources.addResourcesPatch
|
||||
import app.revanced.patches.music.misc.extension.sharedExtensionPatch
|
||||
@@ -11,11 +11,7 @@ import app.revanced.patches.music.misc.settings.PreferenceScreen
|
||||
import app.revanced.patches.music.misc.settings.settingsPatch
|
||||
import app.revanced.patches.shared.misc.mapping.resourceMappingPatch
|
||||
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
|
||||
import app.revanced.util.addInstructionsAtControlFlowLabel
|
||||
import app.revanced.util.findFreeRegister
|
||||
import app.revanced.util.getReference
|
||||
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||
import app.revanced.util.indexOfFirstInstructionReversedOrThrow
|
||||
import app.revanced.util.*
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction
|
||||
@@ -25,8 +21,7 @@ import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/music/patches/ChangeMiniplayerColorPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val changeMiniplayerColor = bytecodePatch(
|
||||
name = "Change miniplayer color",
|
||||
val `Change miniplayer color` by creatingBytecodePatch(
|
||||
description = "Adds an option to change the miniplayer background color to match the fullscreen player."
|
||||
) {
|
||||
dependsOn(
|
||||
|
||||
@@ -3,7 +3,7 @@ package app.revanced.patches.music.layout.navigationbar
|
||||
import app.revanced.patcher.extensions.addInstruction
|
||||
import app.revanced.patcher.extensions.getInstruction
|
||||
import app.revanced.patcher.patch.PatchException
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.patcher.patch.resourcePatch
|
||||
import app.revanced.patches.all.misc.resources.addResources
|
||||
import app.revanced.patches.all.misc.resources.addResourcesPatch
|
||||
@@ -27,8 +27,7 @@ internal var text1 = -1L
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/music/patches/NavigationBarPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val navigationBarPatch = bytecodePatch(
|
||||
name = "Navigation bar",
|
||||
val `Navigation bar` by creatingBytecodePatch(
|
||||
description = "Adds options to hide navigation bar, labels and buttons.",
|
||||
) {
|
||||
dependsOn(
|
||||
|
||||
@@ -4,7 +4,7 @@ import app.revanced.patcher.extensions.addInstruction
|
||||
import app.revanced.patcher.extensions.addInstructionsWithLabels
|
||||
import app.revanced.patcher.extensions.getInstruction
|
||||
import app.revanced.patcher.extensions.replaceInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.patches.all.misc.resources.addResources
|
||||
import app.revanced.patches.all.misc.resources.addResourcesPatch
|
||||
import app.revanced.patches.music.misc.extension.sharedExtensionPatch
|
||||
@@ -16,8 +16,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/music/patches/HideGetPremiumPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val hideGetPremiumPatch = bytecodePatch(
|
||||
name = "Hide 'Get Music Premium'",
|
||||
val `Hide 'Get Music Premium'` by creatingBytecodePatch(
|
||||
description = "Adds an option to hide the \"Get Music Premium\" label in the settings and account menu.",
|
||||
) {
|
||||
dependsOn(
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
package app.revanced.patches.music.misc.androidauto
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.patches.music.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.music.misc.settings.settingsPatch
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Suppress("unused")
|
||||
val bypassCertificateChecksPatch = bytecodePatch(
|
||||
name = "Bypass certificate checks",
|
||||
val `Bypass certificate checks` by creatingBytecodePatch(
|
||||
description = "Bypasses certificate checks which prevent YouTube Music from working on Android Auto.",
|
||||
) {
|
||||
dependsOn(
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
package app.revanced.patches.music.misc.backgroundplayback
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.patches.music.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.music.misc.settings.settingsPatch
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
val backgroundPlaybackPatch = bytecodePatch(
|
||||
name = "Remove background playback restrictions",
|
||||
val `Remove background playback restrictions` by creatingBytecodePatch(
|
||||
description = "Removes restrictions on background playback, including playing kids videos in the background.",
|
||||
) {
|
||||
dependsOn(
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
package app.revanced.patches.piccomafr.misc
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.patcher.patch.stringOption
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Suppress("unused")
|
||||
val spoofAndroidDeviceIdPatch = bytecodePatch(
|
||||
name = "Spoof Android device ID",
|
||||
val `Spoof Android device ID` by creatingBytecodePatch(
|
||||
description = "Spoofs the Android device ID used by the app for account authentication." +
|
||||
"This can be used to copy the account to another device.",
|
||||
"This can be used to copy the account to another device.",
|
||||
use = false,
|
||||
) {
|
||||
compatibleWith(
|
||||
|
||||
@@ -3,32 +3,29 @@ package app.revanced.patches.protonvpn.splittunneling
|
||||
import app.revanced.patcher.extensions.getInstruction
|
||||
import app.revanced.patcher.extensions.removeInstruction
|
||||
import app.revanced.patcher.extensions.replaceInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.util.getReference
|
||||
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||
|
||||
@Suppress("unused")
|
||||
val unlockSplitTunnelingPatch =
|
||||
bytecodePatch(
|
||||
name = "Unlock split tunneling",
|
||||
) {
|
||||
compatibleWith("ch.protonvpn.android")
|
||||
val `Unlock split tunneling` by creatingBytecodePatch {
|
||||
compatibleWith("ch.protonvpn.android")
|
||||
|
||||
apply {
|
||||
val registerIndex = enableSplitTunnelingUiMethod.patternMatch!!.endIndex - 1 // TODO
|
||||
apply {
|
||||
val registerIndex = enableSplitTunnelingUiMethod.patternMatch!!.endIndex - 1 // TODO
|
||||
|
||||
enableSplitTunnelingUiMethod.apply {
|
||||
val register = getInstruction<OneRegisterInstruction>(registerIndex).registerA
|
||||
replaceInstruction(registerIndex, "const/4 v$register, 0x0")
|
||||
}
|
||||
|
||||
initializeSplitTunnelingSettingsUIMethod.apply {
|
||||
val initSettingsIndex = indexOfFirstInstructionOrThrow {
|
||||
getReference<MethodReference>()?.name == "getSplitTunneling"
|
||||
}
|
||||
removeInstruction(initSettingsIndex - 1)
|
||||
enableSplitTunnelingUiMethod.apply {
|
||||
val register = getInstruction<OneRegisterInstruction>(registerIndex).registerA
|
||||
replaceInstruction(registerIndex, "const/4 v$register, 0x0")
|
||||
}
|
||||
|
||||
initializeSplitTunnelingSettingsUIMethod.apply {
|
||||
val initSettingsIndex = indexOfFirstInstructionOrThrow {
|
||||
getReference<MethodReference>()?.name == "getSplitTunneling"
|
||||
}
|
||||
removeInstruction(initSettingsIndex - 1)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ fun spoofClientPatch(
|
||||
redirectUri: String,
|
||||
block: BytecodePatchBuilder.(Option<String>) -> Unit = {},
|
||||
) = bytecodePatch(
|
||||
name = "Spoof client",
|
||||
name = "Spoof client", // TODO
|
||||
description = "Restores functionality of the app by using custom client ID.",
|
||||
) {
|
||||
block(
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
package app.revanced.patches.reddit.customclients.sync.ads
|
||||
|
||||
import app.revanced.patcher.patch.BytecodePatchBuilder
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
fun disableAdsPatch(block: BytecodePatchBuilder.() -> Unit = {}) = bytecodePatch(
|
||||
name = "Disable ads",
|
||||
) {
|
||||
fun `Disable ads`(block: BytecodePatchBuilder.() -> Unit = {}) = creatingBytecodePatch {
|
||||
apply {
|
||||
isAdsEnabledMethod.returnEarly(false)
|
||||
}
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
package app.revanced.patches.reddit.customclients.sync.syncforlemmy.ads
|
||||
|
||||
import app.revanced.patches.reddit.customclients.sync.ads.disableAdsPatch
|
||||
import app.revanced.patches.reddit.customclients.sync.ads.`Disable ads`
|
||||
import app.revanced.patches.reddit.customclients.sync.detection.piracy.disablePiracyDetectionPatch
|
||||
|
||||
@Suppress("unused")
|
||||
val disableAdsPatch = disableAdsPatch {
|
||||
val disableAdsPatch = `Disable ads` {
|
||||
dependsOn(disablePiracyDetectionPatch)
|
||||
|
||||
compatibleWith("com.laurencedawson.reddit_sync")
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
package app.revanced.patches.reddit.customclients.sync.syncforreddit.ads
|
||||
|
||||
import app.revanced.patches.reddit.customclients.sync.ads.disableAdsPatch
|
||||
import app.revanced.patches.reddit.customclients.sync.ads.`Disable ads`
|
||||
|
||||
@Suppress("unused")
|
||||
val disableAdsPatch = disableAdsPatch {
|
||||
val disableAdsPatch = `Disable ads` {
|
||||
compatibleWith("io.syncapps.lemmy_sync")
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ import app.revanced.patcher.extensions.removeInstruction
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
|
||||
@Suppress("unused", "ObjectPropertyName")
|
||||
val `Disable Sync for Lemmy bottom sheet` = creatingBytecodePatch(
|
||||
val `Disable Sync for Lemmy bottom sheet` by creatingBytecodePatch(
|
||||
description = "Disables the bottom sheet at the startup that asks you to signup to \"Sync for Lemmy\".",
|
||||
) {
|
||||
compatibleWith(
|
||||
|
||||
@@ -3,12 +3,11 @@ package app.revanced.patches.reddit.customclients.sync.syncforreddit.fix.user
|
||||
import app.revanced.patcher.extensions.getInstruction
|
||||
import app.revanced.patcher.extensions.replaceInstruction
|
||||
import app.revanced.patcher.extensions.stringReference
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
|
||||
@Suppress("unused")
|
||||
val useUserEndpointPatch = bytecodePatch(
|
||||
name = "Use /user/ endpoint",
|
||||
val `Use /user/ endpoint` by creatingBytecodePatch(
|
||||
description = "Replaces the deprecated endpoint for viewing user profiles /u with /user, that used to fix a bug.",
|
||||
use = false,
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ package app.revanced.patches.reddit.customclients.sync.syncforreddit.fix.video
|
||||
|
||||
import app.revanced.patcher.extensions.addInstructions
|
||||
import app.revanced.patcher.extensions.getInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.patches.reddit.customclients.sync.syncforreddit.extension.sharedExtensionPatch
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction35c
|
||||
|
||||
@@ -11,8 +11,7 @@ private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
private const val GET_LINKS_METHOD = "getLinks([B)[Ljava/lang/String;"
|
||||
|
||||
@Suppress("unused")
|
||||
val fixVideoDownloadsPatch = bytecodePatch(
|
||||
name = "Fix video downloads",
|
||||
val `Fix video downloads` by creatingBytecodePatch(
|
||||
description = "Fixes a bug in Sync's MPD parser resulting in only the audio-track being saved.",
|
||||
) {
|
||||
dependsOn(sharedExtensionPatch)
|
||||
|
||||
@@ -4,7 +4,7 @@ package app.revanced.patches.samsung.radio.misc.fix.crash
|
||||
|
||||
import app.revanced.patcher.extensions.addInstructions
|
||||
import app.revanced.patcher.extensions.getInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.patches.samsung.radio.restrictions.device.`Bypass device checks`
|
||||
import app.revanced.util.findInstructionIndicesReversedOrThrow
|
||||
import app.revanced.util.indexOfFirstInstruction
|
||||
@@ -13,8 +13,8 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/samsung/radio/misc/fix/crash/FixCrashPatch;"
|
||||
|
||||
val fixCrashPatch = bytecodePatch(
|
||||
name = "Fix crashes", description = "Prevents the app from crashing because of missing system permissions."
|
||||
val `Fix crashes` by creatingBytecodePatch(
|
||||
description = "Prevents the app from crashing because of missing system permissions."
|
||||
) {
|
||||
dependsOn(addManifestPermissionsPatch, `Bypass device checks`)
|
||||
extendWith("extensions/samsung/radio.rve")
|
||||
|
||||
@@ -39,7 +39,7 @@ internal fun forceOriginalAudioPatch(
|
||||
subclassExtensionClassDescriptor: String,
|
||||
preferenceScreen: BasePreferenceScreen.Screen
|
||||
) = bytecodePatch(
|
||||
name = "Force original audio",
|
||||
name = "Force original audio", // TODO
|
||||
description = "Adds an option to always use the original audio track.",
|
||||
) {
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ internal fun enableDebuggingPatch(
|
||||
preferenceScreen: BasePreferenceScreen.Screen,
|
||||
additionalDebugPreferences: List<BasePreference> = emptyList()
|
||||
) = bytecodePatch(
|
||||
name = "Enable debugging",
|
||||
name = "Enable debugging", // TODO
|
||||
description = "Adds options for debugging and exporting ReVanced logs to the clipboard.",
|
||||
) {
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ internal fun checkWatchHistoryDomainNameResolutionPatch(
|
||||
executeBlock: BytecodePatchContext.() -> Unit = {},
|
||||
getMainActivityMethod: BytecodePatchContext.() -> MutableMethod
|
||||
) = bytecodePatch(
|
||||
name = "Check watch history domain name resolution",
|
||||
name = "Check watch history domain name resolution", // TODO
|
||||
description = "Checks if the device DNS server is preventing user watch history from being saved.",
|
||||
) {
|
||||
block()
|
||||
|
||||
@@ -5,7 +5,7 @@ import app.revanced.patcher.extensions.instructions
|
||||
import app.revanced.patcher.extensions.replaceInstruction
|
||||
import app.revanced.patcher.patch.*
|
||||
import app.revanced.patcher.patch.BytecodePatchContext
|
||||
import app.revanced.patches.all.misc.packagename.changePackageNamePatch
|
||||
import app.revanced.patches.all.misc.packagename.`Change package name`
|
||||
import app.revanced.patches.all.misc.packagename.setOrGetFallbackPackageName
|
||||
import app.revanced.patches.all.misc.resources.addResources
|
||||
import app.revanced.patches.all.misc.resources.addResourcesPatch
|
||||
@@ -55,7 +55,7 @@ fun gmsCoreSupportPatch(
|
||||
executeBlock: BytecodePatchContext.() -> Unit = {},
|
||||
block: BytecodePatchBuilder.() -> Unit = {},
|
||||
) = bytecodePatch(
|
||||
name = "GmsCore support",
|
||||
name = "GmsCore support", // TODO
|
||||
description = "Allows the app to work without root by using a different package name when patched " +
|
||||
"using a GmsCore instead of Google Play Services.",
|
||||
) {
|
||||
@@ -71,7 +71,7 @@ fun gmsCoreSupportPatch(
|
||||
) { it!!.matches(Regex(PACKAGE_NAME_REGEX_PATTERN)) }
|
||||
|
||||
dependsOn(
|
||||
changePackageNamePatch,
|
||||
`Change package name`,
|
||||
gmsCoreSupportResourcePatchFactory(gmsCoreVendorGroupIdOption),
|
||||
extensionPatch,
|
||||
)
|
||||
@@ -519,7 +519,7 @@ fun gmsCoreSupportResourcePatch(
|
||||
block: ResourcePatchBuilder.() -> Unit = {},
|
||||
) = resourcePatch {
|
||||
dependsOn(
|
||||
changePackageNamePatch,
|
||||
`Change package name`,
|
||||
addResourcesPatch,
|
||||
)
|
||||
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
package app.revanced.patches.shared.misc.pairip.license
|
||||
|
||||
import app.revanced.patcher.extensions.addInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.util.returnEarly
|
||||
import java.util.logging.Logger
|
||||
|
||||
@Suppress("unused")
|
||||
val disableLicenseCheckPatch = bytecodePatch(
|
||||
name = "Disable Pairip license check",
|
||||
val `Disable Pairip license check` by creatingBytecodePatch(
|
||||
description = "Disables Play Integrity API (Pairip) client-side license check.",
|
||||
use = false
|
||||
) {
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
package app.revanced.patches.shared.misc.privacy
|
||||
|
||||
import app.revanced.patcher.patch.resourcePatch
|
||||
import app.revanced.patcher.patch.creatingResourcePatch
|
||||
import app.revanced.util.asSequence
|
||||
import app.revanced.util.getNode
|
||||
import org.w3c.dom.Element
|
||||
|
||||
@Suppress("unused")
|
||||
val disableSentryTelemetryPatch = resourcePatch(
|
||||
name = "Disable Sentry telemetry",
|
||||
val `Disable Sentry telemetry` = creatingResourcePatch(
|
||||
description = "Disables Sentry telemetry. See https://sentry.io/for/android/ for more information.",
|
||||
use = false,
|
||||
) {
|
||||
|
||||
@@ -28,7 +28,7 @@ internal fun sanitizeSharingLinksPatch(
|
||||
preferenceScreen: BasePreferenceScreen.Screen,
|
||||
replaceMusicLinksWithYouTube: Boolean = false,
|
||||
) = bytecodePatch(
|
||||
name = "Sanitize sharing links",
|
||||
name = "Sanitize sharing links", // TODO
|
||||
description = "Removes the tracking query parameters from shared links.",
|
||||
) {
|
||||
block()
|
||||
|
||||
@@ -36,7 +36,7 @@ internal fun spoofVideoStreamsPatch(
|
||||
block: BytecodePatchBuilder.() -> Unit,
|
||||
executeBlock: BytecodePatchContext.() -> Unit = {},
|
||||
) = bytecodePatch(
|
||||
name = "Spoof video streams",
|
||||
name = "Spoof video streams", // TODO
|
||||
description = "Adds options to spoof the client video streams to fix playback.",
|
||||
) {
|
||||
block()
|
||||
|
||||
@@ -2,12 +2,11 @@ package app.revanced.patches.solidexplorer2.functionality.filesize
|
||||
|
||||
import app.revanced.patcher.extensions.getInstruction
|
||||
import app.revanced.patcher.extensions.replaceInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.ThreeRegisterInstruction
|
||||
|
||||
@Suppress("unused")
|
||||
val removeFileSizeLimitPatch = bytecodePatch(
|
||||
name = "Remove file size limit",
|
||||
val `Remove file size limit` by creatingBytecodePatch(
|
||||
description = "Allows opening files larger than 2 MB in the text editor.",
|
||||
) {
|
||||
compatibleWith("pl.solidexplorer2")
|
||||
|
||||
@@ -2,13 +2,12 @@ package app.revanced.patches.songpal.badge
|
||||
|
||||
import app.revanced.patcher.extensions.addInstructions
|
||||
import app.revanced.patcher.extensions.removeInstructions
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
|
||||
internal const val ACTIVITY_TAB_DESCRIPTOR = "Ljp/co/sony/vim/framework/ui/yourheadphones/YhContract\$Tab;"
|
||||
|
||||
@Suppress("unused")
|
||||
val badgeTabPatch = bytecodePatch(
|
||||
name = "Remove badge tab",
|
||||
val `Remove badge tab` by creatingBytecodePatch(
|
||||
description = "Removes the badge tab from the activity tab.",
|
||||
) {
|
||||
compatibleWith("com.sony.songpal.mdr")
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
package app.revanced.patches.songpal.badge
|
||||
|
||||
import app.revanced.patcher.extensions.addInstructions
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
|
||||
@Suppress("unused")
|
||||
val removeNotificationBadgePatch = bytecodePatch(
|
||||
name = "Remove notification badge",
|
||||
val `Remove notification badge` by creatingBytecodePatch(
|
||||
description = "Removes the red notification badge from the activity tab.",
|
||||
) {
|
||||
compatibleWith("com.sony.songpal.mdr"("10.1.0"))
|
||||
|
||||
@@ -1,13 +1,11 @@
|
||||
package app.revanced.patches.soundcloud.ad
|
||||
|
||||
import app.revanced.patcher.extensions.*
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.patches.soundcloud.shared.featureConstructorMethod
|
||||
|
||||
@Suppress("unused")
|
||||
val hideAdsPatch = bytecodePatch(
|
||||
name = "Hide ads",
|
||||
) {
|
||||
val `Hide ads` by creatingBytecodePatch {
|
||||
compatibleWith("com.soundcloud.android"("2025.05.27-release"))
|
||||
|
||||
apply {
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
package app.revanced.patches.soundcloud.analytics
|
||||
|
||||
import app.revanced.patcher.extensions.addInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
|
||||
@Suppress("unused")
|
||||
val disableTelemetryPatch = bytecodePatch(
|
||||
name = "Disable telemetry",
|
||||
val `Disable telemetry` by creatingBytecodePatch(
|
||||
description = "Disables SoundCloud's telemetry system.",
|
||||
) {
|
||||
compatibleWith("com.soundcloud.android"("2025.05.27-release"))
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package app.revanced.patches.soundcloud.offlinesync
|
||||
|
||||
import app.revanced.patcher.extensions.*
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.patches.soundcloud.shared.featureConstructorMethod
|
||||
import app.revanced.util.getReference
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
@@ -9,9 +9,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.reference.FieldReference
|
||||
|
||||
@Suppress("unused")
|
||||
val enableOfflineSync = bytecodePatch(
|
||||
name = "Enable offline sync",
|
||||
) {
|
||||
val `Enable offline sync` by creatingBytecodePatch {
|
||||
compatibleWith("com.soundcloud.android"("2025.05.27-release"))
|
||||
|
||||
apply {
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
package app.revanced.patches.spotify.misc.fix.login
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Suppress("unused")
|
||||
val fixFacebookLoginPatch = bytecodePatch(
|
||||
name = "Fix Facebook login",
|
||||
val `Fix Facebook login` by creatingBytecodePatch(
|
||||
description =
|
||||
"Fix logging in with Facebook when the app is patched by always opening the login in a web browser window.",
|
||||
) {
|
||||
|
||||
@@ -4,9 +4,8 @@ import app.revanced.patcher.extensions.addInstruction
|
||||
import app.revanced.patcher.extensions.getInstruction
|
||||
import app.revanced.patcher.extensions.replaceInstruction
|
||||
import app.revanced.patcher.fingerprint
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.patcher.patch.stringOption
|
||||
import com.android.tools.smali.dexlib2.mutable.MutableMethod
|
||||
import app.revanced.util.getReference
|
||||
import app.revanced.util.indexOfFirstInstruction
|
||||
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||
@@ -15,6 +14,7 @@ import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction35c
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||
import com.android.tools.smali.dexlib2.immutable.reference.ImmutableMethodReference
|
||||
import com.android.tools.smali.dexlib2.mutable.MutableMethod
|
||||
import java.net.InetAddress
|
||||
import java.net.URI
|
||||
import java.net.URISyntaxException
|
||||
@@ -22,8 +22,7 @@ import java.net.UnknownHostException
|
||||
import java.util.logging.Logger
|
||||
|
||||
@Suppress("unused")
|
||||
val changeLyricsProviderPatch = bytecodePatch(
|
||||
name = "Change lyrics provider",
|
||||
val `Change lyrics provider` by creatingBytecodePatch(
|
||||
description = "Changes the lyrics provider to a custom one.",
|
||||
use = false,
|
||||
) {
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
package app.revanced.patches.spotify.misc.widgets
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.creatingBytecodePatch
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Suppress("unused")
|
||||
val fixThirdPartyLaunchersWidgets = bytecodePatch(
|
||||
name = "Fix third party launchers widgets",
|
||||
val `Fix third party launchers widgets` by creatingBytecodePatch(
|
||||
description = "Fixes Spotify widgets not working in third party launchers, like Nova Launcher.",
|
||||
) {
|
||||
compatibleWith("com.spotify.music")
|
||||
|
||||
@@ -1,13 +1,11 @@
|
||||
package app.revanced.patches.stocard.layout
|
||||
|
||||
import app.revanced.patcher.patch.resourcePatch
|
||||
import app.revanced.patcher.patch.creatingResourcePatch
|
||||
import app.revanced.util.childElementsSequence
|
||||
import app.revanced.util.getNode
|
||||
|
||||
@Suppress("unused")
|
||||
val hideOffersTabPatch = resourcePatch(
|
||||
name = "Hide offers tab",
|
||||
) {
|
||||
val `Hide offers tab` by creatingResourcePatch {
|
||||
compatibleWith("de.stocard.stocard")
|
||||
|
||||
apply {
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
package app.revanced.patches.stocard.layout
|
||||
|
||||
import app.revanced.patcher.patch.resourcePatch
|
||||
import app.revanced.patcher.patch.creatingResourcePatch
|
||||
import app.revanced.util.getNode
|
||||
|
||||
@Suppress("unused")
|
||||
val hideStoryBubblesPatch = resourcePatch(
|
||||
name = "Hide story bubbles",
|
||||
) {
|
||||
val `Hide story bubbles` by creatingResourcePatch {
|
||||
compatibleWith("de.stocard.stocard")
|
||||
|
||||
apply {
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user