mirror of
https://github.com/inotia00/revanced-patches.git
synced 2025-05-09 11:04:36 +02:00
refactor(GmsCore support): Remove unnecessary constants and disable unused services (#119)
* fix(GmsCore support): Firebase installations error * feat: Remove unnecessary Constants (Match with uDrop) * feat: Remove signature spoofing that degrades performance (No longer resolves playback issues) * Move `SSLGuard disabler` to `GmsCore support` patch * feat: Disable `PrimeApi` * revert: Do not disable Cast V2 * feat: Disable ECatcher spam logging * revert: Disable Advertising Id (Advertising Id can no longer be fetched from GmsCore) --------- Co-authored-by: inotia00 <108592928+inotia00@users.noreply.github.com>
This commit is contained in:
parent
3604e92aa1
commit
36141d0539
@ -36,9 +36,6 @@ public class GmsCoreSupport {
|
|||||||
private static final String DONT_KILL_MY_APP_LINK
|
private static final String DONT_KILL_MY_APP_LINK
|
||||||
= "https://dontkillmyapp.com";
|
= "https://dontkillmyapp.com";
|
||||||
|
|
||||||
private static final String META_SPOOF_PACKAGE_NAME =
|
|
||||||
GMS_CORE_PACKAGE_NAME + ".SPOOFED_PACKAGE_NAME";
|
|
||||||
|
|
||||||
private static void open(Activity mActivity, String queryOrLink) {
|
private static void open(Activity mActivity, String queryOrLink) {
|
||||||
Intent intent;
|
Intent intent;
|
||||||
try {
|
try {
|
||||||
@ -178,52 +175,6 @@ public class GmsCoreSupport {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Injection point.
|
|
||||||
*/
|
|
||||||
public static String spoofPackageName(Context context) {
|
|
||||||
// Package name of ReVanced.
|
|
||||||
final String packageName = context.getPackageName();
|
|
||||||
|
|
||||||
try {
|
|
||||||
final PackageManager packageManager = context.getPackageManager();
|
|
||||||
|
|
||||||
// Package name of YouTube or YouTube Music.
|
|
||||||
String originalPackageName;
|
|
||||||
|
|
||||||
try {
|
|
||||||
originalPackageName = packageManager
|
|
||||||
.getPackageInfo(packageName, PackageManager.GET_META_DATA)
|
|
||||||
.applicationInfo
|
|
||||||
.metaData
|
|
||||||
.getString(META_SPOOF_PACKAGE_NAME);
|
|
||||||
} catch (PackageManager.NameNotFoundException exception) {
|
|
||||||
Logger.printDebug(() -> "Failed to parsing metadata");
|
|
||||||
return packageName;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (StringUtils.isBlank(originalPackageName)) {
|
|
||||||
Logger.printDebug(() -> "Failed to parsing spoofed package name");
|
|
||||||
return packageName;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
packageManager.getPackageInfo(originalPackageName, PackageManager.GET_ACTIVITIES);
|
|
||||||
} catch (PackageManager.NameNotFoundException exception) {
|
|
||||||
Logger.printDebug(() -> "Original app '" + originalPackageName + "' was not found");
|
|
||||||
return packageName;
|
|
||||||
}
|
|
||||||
|
|
||||||
Logger.printDebug(() -> "Package name of '" + packageName + "' spoofed to '" + originalPackageName + "'");
|
|
||||||
|
|
||||||
return originalPackageName;
|
|
||||||
} catch (Exception ex) {
|
|
||||||
Logger.printException(() -> "spoofPackageName failure", ex);
|
|
||||||
}
|
|
||||||
|
|
||||||
return packageName;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static boolean isAndroidAutomotive(Context context) {
|
private static boolean isAndroidAutomotive(Context context) {
|
||||||
return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE);
|
return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE);
|
||||||
}
|
}
|
||||||
|
@ -61,6 +61,21 @@ fun baseAdsPatch(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val getAdvertisingIdMethod = with (advertisingIdFingerprint.methodOrThrow()) {
|
||||||
|
val getAdvertisingIdIndex = indexOfGetAdvertisingIdInstruction(this)
|
||||||
|
getWalkerMethod(getAdvertisingIdIndex)
|
||||||
|
}
|
||||||
|
|
||||||
|
getAdvertisingIdMethod.addInstructionsWithLabels(
|
||||||
|
0, """
|
||||||
|
invoke-static {}, $classDescriptor->$methodDescriptor()Z
|
||||||
|
move-result v0
|
||||||
|
if-nez v0, :ignore
|
||||||
|
return-void
|
||||||
|
:ignore
|
||||||
|
nop
|
||||||
|
"""
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,9 +1,34 @@
|
|||||||
package app.revanced.patches.shared.ads
|
package app.revanced.patches.shared.ads
|
||||||
|
|
||||||
import app.revanced.util.fingerprint.legacyFingerprint
|
import app.revanced.util.fingerprint.legacyFingerprint
|
||||||
|
import app.revanced.util.getReference
|
||||||
|
import app.revanced.util.indexOfFirstInstructionReversed
|
||||||
import app.revanced.util.or
|
import app.revanced.util.or
|
||||||
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.iface.Method
|
||||||
|
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||||
|
import com.android.tools.smali.dexlib2.util.MethodUtil
|
||||||
|
|
||||||
|
internal val advertisingIdFingerprint = legacyFingerprint(
|
||||||
|
name = "advertisingIdFingerprint",
|
||||||
|
returnType = "V",
|
||||||
|
strings = listOf("a."),
|
||||||
|
customFingerprint = { method, classDef ->
|
||||||
|
MethodUtil.isConstructor(method) &&
|
||||||
|
classDef.fields.find { it.type == "Ljava/util/Random;" } != null &&
|
||||||
|
indexOfGetAdvertisingIdInstruction(method) >= 0
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
internal fun indexOfGetAdvertisingIdInstruction(method: Method) =
|
||||||
|
method.indexOfFirstInstructionReversed {
|
||||||
|
val reference = getReference<MethodReference>()
|
||||||
|
opcode == Opcode.INVOKE_VIRTUAL &&
|
||||||
|
reference?.returnType == "V" &&
|
||||||
|
reference.parameterTypes.isEmpty()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
internal val musicAdsFingerprint = legacyFingerprint(
|
internal val musicAdsFingerprint = legacyFingerprint(
|
||||||
name = "musicAdsFingerprint",
|
name = "musicAdsFingerprint",
|
||||||
|
@ -5,8 +5,11 @@ import app.revanced.util.getReference
|
|||||||
import app.revanced.util.indexOfFirstInstruction
|
import app.revanced.util.indexOfFirstInstruction
|
||||||
import app.revanced.util.or
|
import app.revanced.util.or
|
||||||
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.iface.Method
|
import com.android.tools.smali.dexlib2.iface.Method
|
||||||
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||||
|
import com.android.tools.smali.dexlib2.iface.reference.StringReference
|
||||||
|
import com.android.tools.smali.dexlib2.util.MethodUtil
|
||||||
|
|
||||||
const val GET_GMS_CORE_VENDOR_GROUP_ID_METHOD_NAME = "getGmsCoreVendorGroupId"
|
const val GET_GMS_CORE_VENDOR_GROUP_ID_METHOD_NAME = "getGmsCoreVendorGroupId"
|
||||||
|
|
||||||
@ -22,14 +25,24 @@ internal val castContextFetchFingerprint = legacyFingerprint(
|
|||||||
strings = listOf("Error fetching CastContext.")
|
strings = listOf("Error fetching CastContext.")
|
||||||
)
|
)
|
||||||
|
|
||||||
|
internal val castDynamiteModuleFingerprint = legacyFingerprint(
|
||||||
|
name = "castDynamiteModuleFingerprint",
|
||||||
|
strings = listOf("com.google.android.gms.cast.framework.internal.CastDynamiteModuleImpl")
|
||||||
|
)
|
||||||
|
|
||||||
|
internal val castDynamiteModuleV2Fingerprint = legacyFingerprint(
|
||||||
|
name = "castDynamiteModuleV2Fingerprint",
|
||||||
|
strings = listOf("Failed to load module via V2: ")
|
||||||
|
)
|
||||||
|
|
||||||
internal val googlePlayUtilityFingerprint = legacyFingerprint(
|
internal val googlePlayUtilityFingerprint = legacyFingerprint(
|
||||||
name = "castContextFetchFingerprint",
|
name = "googlePlayUtilityFingerprint",
|
||||||
returnType = "I",
|
returnType = "I",
|
||||||
accessFlags = AccessFlags.PUBLIC or AccessFlags.STATIC,
|
accessFlags = AccessFlags.PUBLIC or AccessFlags.STATIC,
|
||||||
parameters = listOf("L", "I"),
|
parameters = listOf("L", "I"),
|
||||||
strings = listOf(
|
strings = listOf(
|
||||||
"This should never happen.",
|
"This should never happen.",
|
||||||
"MetadataValueReader"
|
"MetadataValueReader",
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -41,23 +54,57 @@ internal val serviceCheckFingerprint = legacyFingerprint(
|
|||||||
strings = listOf("Google Play Services not available")
|
strings = listOf("Google Play Services not available")
|
||||||
)
|
)
|
||||||
|
|
||||||
internal val primeMethodFingerprint = legacyFingerprint(
|
internal val sslGuardFingerprint = legacyFingerprint(
|
||||||
name = "primeMethodFingerprint",
|
name = "sslGuardFingerprint",
|
||||||
strings = listOf("com.google.android.GoogleCamera", "com.android.vending")
|
returnType = "V",
|
||||||
|
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
|
||||||
|
strings = listOf("Cannot initialize SslGuardSocketFactory will null"),
|
||||||
)
|
)
|
||||||
|
|
||||||
internal val certificateFingerprint = legacyFingerprint(
|
internal val eCatcherFingerprint = legacyFingerprint(
|
||||||
name = "certificateFingerprint",
|
name = "eCatcherFingerprint",
|
||||||
returnType = "Ljava/lang/String;",
|
returnType = "V",
|
||||||
accessFlags = AccessFlags.PROTECTED or AccessFlags.FINAL,
|
opcodes = listOf(Opcode.NEW_ARRAY),
|
||||||
parameters = emptyList(),
|
strings = listOf("ECatcher disabled: level: %s, category: %s, message: %s"),
|
||||||
strings = listOf("X.509", "user", "S"),
|
|
||||||
customFingerprint = { method, _ ->
|
customFingerprint = { method, _ ->
|
||||||
indexOfGetPackageNameInstruction(method) >= 0
|
method.parameterTypes.contains("Ljava/util/function/Function;")
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
internal val primesApiFingerprint = legacyFingerprint(
|
||||||
|
name = "primesApiFingerprint",
|
||||||
|
returnType = "V",
|
||||||
|
strings = listOf("PrimesApiImpl.java"),
|
||||||
|
customFingerprint = { method, _ ->
|
||||||
|
MethodUtil.isConstructor(method)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
fun indexOfGetPackageNameInstruction(method: Method) =
|
internal val primesBackgroundInitializationFingerprint = legacyFingerprint(
|
||||||
method.indexOfFirstInstruction {
|
name = "primesBackgroundInitializationFingerprint",
|
||||||
getReference<MethodReference>()?.toString() == "Landroid/content/Context;->getPackageName()Ljava/lang/String;"
|
opcodes = listOf(Opcode.NEW_INSTANCE),
|
||||||
}
|
customFingerprint = { method, _ ->
|
||||||
|
method.indexOfFirstInstruction {
|
||||||
|
opcode == Opcode.CONST_STRING &&
|
||||||
|
getReference<StringReference>()
|
||||||
|
?.string.toString()
|
||||||
|
.startsWith("Primes init triggered from background in package:")
|
||||||
|
} >= 0
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
internal val primesLifecycleEventFingerprint = legacyFingerprint(
|
||||||
|
name = "primesLifecycleEventFingerprint",
|
||||||
|
accessFlags = AccessFlags.PRIVATE or AccessFlags.FINAL,
|
||||||
|
returnType = "V",
|
||||||
|
parameters = emptyList(),
|
||||||
|
opcodes = listOf(Opcode.NEW_INSTANCE),
|
||||||
|
customFingerprint = { method, _ ->
|
||||||
|
method.indexOfFirstInstruction {
|
||||||
|
opcode == Opcode.CONST_STRING &&
|
||||||
|
getReference<StringReference>()
|
||||||
|
?.string.toString()
|
||||||
|
.startsWith("Primes did not observe lifecycle events in the expected order.")
|
||||||
|
} >= 0
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
package app.revanced.patches.shared.gms
|
package app.revanced.patches.shared.gms
|
||||||
|
|
||||||
import app.revanced.patcher.Fingerprint
|
import app.revanced.patcher.Fingerprint
|
||||||
|
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.getInstruction
|
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.instructions
|
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
|
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
|
||||||
import app.revanced.patcher.patch.BytecodePatchBuilder
|
import app.revanced.patcher.patch.BytecodePatchBuilder
|
||||||
import app.revanced.patcher.patch.BytecodePatchContext
|
import app.revanced.patcher.patch.BytecodePatchContext
|
||||||
@ -25,12 +25,14 @@ import app.revanced.util.fingerprint.methodOrThrow
|
|||||||
import app.revanced.util.fingerprint.mutableClassOrThrow
|
import app.revanced.util.fingerprint.mutableClassOrThrow
|
||||||
import app.revanced.util.getReference
|
import app.revanced.util.getReference
|
||||||
import app.revanced.util.indexOfFirstInstruction
|
import app.revanced.util.indexOfFirstInstruction
|
||||||
|
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||||
|
import app.revanced.util.indexOfFirstInstructionReversedOrThrow
|
||||||
import app.revanced.util.returnEarly
|
import app.revanced.util.returnEarly
|
||||||
import app.revanced.util.valueOrThrow
|
import app.revanced.util.valueOrThrow
|
||||||
import com.android.tools.smali.dexlib2.Opcode
|
import com.android.tools.smali.dexlib2.Opcode
|
||||||
import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction21c
|
import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction21c
|
||||||
import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction
|
|
||||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||||
|
import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction
|
||||||
import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction21c
|
import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction21c
|
||||||
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||||
import com.android.tools.smali.dexlib2.iface.reference.StringReference
|
import com.android.tools.smali.dexlib2.iface.reference.StringReference
|
||||||
@ -230,18 +232,41 @@ fun gmsCoreSupportPatch(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun transformPrimeMethod(packageName: String) {
|
fun transformPrimeMethod() {
|
||||||
primeMethodFingerprint.methodOrThrow().apply {
|
setOf(
|
||||||
var register = 2
|
primesBackgroundInitializationFingerprint,
|
||||||
|
primesLifecycleEventFingerprint
|
||||||
val index = instructions.indexOfFirst {
|
).forEach { fingerprint ->
|
||||||
if (it.getReference<StringReference>()?.string != fromPackageName) return@indexOfFirst false
|
fingerprint.methodOrThrow().apply {
|
||||||
|
val exceptionIndex = indexOfFirstInstructionReversedOrThrow {
|
||||||
register = (it as OneRegisterInstruction).registerA
|
opcode == Opcode.NEW_INSTANCE &&
|
||||||
return@indexOfFirst true
|
(this as? ReferenceInstruction)?.reference?.toString() == "Ljava/lang/IllegalStateException;"
|
||||||
|
}
|
||||||
|
val index =
|
||||||
|
indexOfFirstInstructionReversedOrThrow(exceptionIndex, Opcode.IF_EQZ)
|
||||||
|
val register = getInstruction<OneRegisterInstruction>(index).registerA
|
||||||
|
addInstruction(
|
||||||
|
index,
|
||||||
|
"const/4 v$register, 0x1"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
primesApiFingerprint.mutableClassOrThrow().methods.filter { method ->
|
||||||
|
method.name != "<clinit>" &&
|
||||||
|
method.returnType == "V"
|
||||||
|
}.forEach { method ->
|
||||||
|
method.apply {
|
||||||
|
val index = if (MethodUtil.isConstructor(method))
|
||||||
|
indexOfFirstInstructionOrThrow {
|
||||||
|
opcode == Opcode.INVOKE_DIRECT &&
|
||||||
|
getReference<MethodReference>()?.name == "<init>"
|
||||||
|
} + 1
|
||||||
|
else 0
|
||||||
|
addInstruction(
|
||||||
|
index,
|
||||||
|
"return-void"
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
replaceInstruction(index, "const-string v$register, \"$packageName\"")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -267,12 +292,21 @@ fun gmsCoreSupportPatch(
|
|||||||
// Return these methods early to prevent the app from crashing.
|
// Return these methods early to prevent the app from crashing.
|
||||||
setOf(
|
setOf(
|
||||||
castContextFetchFingerprint,
|
castContextFetchFingerprint,
|
||||||
|
castDynamiteModuleFingerprint,
|
||||||
|
castDynamiteModuleV2Fingerprint,
|
||||||
googlePlayUtilityFingerprint,
|
googlePlayUtilityFingerprint,
|
||||||
serviceCheckFingerprint,
|
serviceCheckFingerprint,
|
||||||
|
sslGuardFingerprint,
|
||||||
).forEach { it.methodOrThrow().returnEarly() }
|
).forEach { it.methodOrThrow().returnEarly() }
|
||||||
|
|
||||||
|
// Prevent spam logs.
|
||||||
|
eCatcherFingerprint.methodOrThrow().apply {
|
||||||
|
val index = indexOfFirstInstructionOrThrow(Opcode.NEW_ARRAY)
|
||||||
|
addInstruction(index, "return-void")
|
||||||
|
}
|
||||||
|
|
||||||
// Specific method that needs to be patched.
|
// Specific method that needs to be patched.
|
||||||
transformPrimeMethod(packageName)
|
transformPrimeMethod()
|
||||||
|
|
||||||
// Verify GmsCore is installed and whitelisted for power optimizations and background usage.
|
// Verify GmsCore is installed and whitelisted for power optimizations and background usage.
|
||||||
mainActivityOnCreateFingerprint.method.apply {
|
mainActivityOnCreateFingerprint.method.apply {
|
||||||
@ -299,22 +333,6 @@ fun gmsCoreSupportPatch(
|
|||||||
.single { it.name == GET_GMS_CORE_VENDOR_GROUP_ID_METHOD_NAME }
|
.single { it.name == GET_GMS_CORE_VENDOR_GROUP_ID_METHOD_NAME }
|
||||||
.replaceInstruction(0, "const-string v0, \"$gmsCoreVendorGroupId\"")
|
.replaceInstruction(0, "const-string v0, \"$gmsCoreVendorGroupId\"")
|
||||||
|
|
||||||
certificateFingerprint.second.classDefOrNull?.methods?.forEach { mutableMethod ->
|
|
||||||
mutableMethod.apply {
|
|
||||||
val getPackageNameIndex = indexOfGetPackageNameInstruction(this)
|
|
||||||
|
|
||||||
if (getPackageNameIndex > -1) {
|
|
||||||
val targetRegister =
|
|
||||||
(getInstruction(getPackageNameIndex) as FiveRegisterInstruction).registerC
|
|
||||||
|
|
||||||
replaceInstruction(
|
|
||||||
getPackageNameIndex,
|
|
||||||
"invoke-static {v$targetRegister}, $EXTENSION_CLASS_DESCRIPTOR->spoofPackageName(Landroid/content/Context;)Ljava/lang/String;",
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} // Since it has only been confirmed to work on YouTube and YouTube Music, does not raise an exception even if the fingerprint cannot be solved.
|
|
||||||
|
|
||||||
executeBlock()
|
executeBlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -326,266 +344,76 @@ fun gmsCoreSupportPatch(
|
|||||||
* that are present in GmsCore which need to be transformed.
|
* that are present in GmsCore which need to be transformed.
|
||||||
*/
|
*/
|
||||||
private object Constants {
|
private object Constants {
|
||||||
/**
|
|
||||||
* All permissions.
|
|
||||||
*/
|
|
||||||
val PERMISSIONS = setOf(
|
val PERMISSIONS = setOf(
|
||||||
|
// C2DM / GCM
|
||||||
"com.google.android.c2dm.permission.RECEIVE",
|
"com.google.android.c2dm.permission.RECEIVE",
|
||||||
"com.google.android.c2dm.permission.SEND",
|
"com.google.android.c2dm.permission.SEND",
|
||||||
"com.google.android.gms.auth.api.phone.permission.SEND",
|
|
||||||
"com.google.android.gms.permission.AD_ID",
|
|
||||||
"com.google.android.gms.permission.AD_ID_NOTIFICATION",
|
|
||||||
"com.google.android.gms.permission.CAR_FUEL",
|
|
||||||
"com.google.android.gms.permission.CAR_INFORMATION",
|
|
||||||
"com.google.android.gms.permission.CAR_MILEAGE",
|
|
||||||
"com.google.android.gms.permission.CAR_SPEED",
|
|
||||||
"com.google.android.gms.permission.CAR_VENDOR_EXTENSION",
|
|
||||||
"com.google.android.googleapps.permission.GOOGLE_AUTH",
|
|
||||||
"com.google.android.googleapps.permission.GOOGLE_AUTH.cp",
|
|
||||||
"com.google.android.googleapps.permission.GOOGLE_AUTH.local",
|
|
||||||
"com.google.android.googleapps.permission.GOOGLE_AUTH.mail",
|
|
||||||
"com.google.android.googleapps.permission.GOOGLE_AUTH.writely",
|
|
||||||
"com.google.android.gtalkservice.permission.GTALK_SERVICE",
|
|
||||||
"com.google.android.providers.gsf.permission.READ_GSERVICES",
|
"com.google.android.providers.gsf.permission.READ_GSERVICES",
|
||||||
)
|
)
|
||||||
|
|
||||||
/**
|
|
||||||
* All intent actions.
|
|
||||||
*/
|
|
||||||
val ACTIONS = setOf(
|
val ACTIONS = setOf(
|
||||||
"com.google.android.c2dm.intent.RECEIVE",
|
// C2DM / GCM
|
||||||
"com.google.android.c2dm.intent.REGISTER",
|
"com.google.android.c2dm.intent.REGISTER",
|
||||||
"com.google.android.c2dm.intent.REGISTRATION",
|
"com.google.android.c2dm.intent.REGISTRATION",
|
||||||
"com.google.android.c2dm.intent.UNREGISTER",
|
"com.google.android.c2dm.intent.RECEIVE",
|
||||||
"com.google.android.contextmanager.service.ContextManagerService.START",
|
|
||||||
"com.google.android.gcm.intent.SEND",
|
|
||||||
"com.google.android.gms.accounts.ACCOUNT_SERVICE",
|
|
||||||
"com.google.android.gms.accountsettings.ACCOUNT_PREFERENCES_SETTINGS",
|
|
||||||
"com.google.android.gms.accountsettings.action.BROWSE_SETTINGS",
|
|
||||||
"com.google.android.gms.accountsettings.action.VIEW_SETTINGS",
|
|
||||||
"com.google.android.gms.accountsettings.MY_ACCOUNT",
|
|
||||||
"com.google.android.gms.accountsettings.PRIVACY_SETTINGS",
|
|
||||||
"com.google.android.gms.accountsettings.SECURITY_SETTINGS",
|
|
||||||
"com.google.android.gms.ads.gservice.START",
|
|
||||||
"com.google.android.gms.ads.identifier.service.EVENT_ATTESTATION",
|
|
||||||
"com.google.android.gms.ads.service.CACHE",
|
|
||||||
"com.google.android.gms.ads.service.CONSENT_LOOKUP",
|
|
||||||
"com.google.android.gms.ads.service.HTTP",
|
|
||||||
"com.google.android.gms.analytics.service.START",
|
|
||||||
"com.google.android.gms.app.settings.GoogleSettingsLink",
|
|
||||||
"com.google.android.gms.appstate.service.START",
|
|
||||||
"com.google.android.gms.appusage.service.START",
|
|
||||||
"com.google.android.gms.asterism.service.START",
|
|
||||||
"com.google.android.gms.audiomodem.service.AudioModemService.START",
|
|
||||||
"com.google.android.gms.audit.service.START",
|
|
||||||
"com.google.android.gms.auth.account.authapi.START",
|
|
||||||
"com.google.android.gms.auth.account.authenticator.auto.service.START",
|
|
||||||
"com.google.android.gms.auth.account.authenticator.chromeos.START",
|
|
||||||
"com.google.android.gms.auth.account.authenticator.tv.service.START",
|
|
||||||
"com.google.android.gms.auth.account.data.service.START",
|
|
||||||
"com.google.android.gms.auth.api.credentials.PICKER",
|
|
||||||
"com.google.android.gms.auth.api.credentials.service.START",
|
|
||||||
"com.google.android.gms.auth.api.identity.service.authorization.START",
|
|
||||||
"com.google.android.gms.auth.api.identity.service.credentialsaving.START",
|
|
||||||
"com.google.android.gms.auth.api.identity.service.signin.START",
|
|
||||||
"com.google.android.gms.auth.api.phone.service.InternalService.START",
|
|
||||||
"com.google.android.gms.auth.api.signin.service.START",
|
|
||||||
"com.google.android.gms.auth.be.appcert.AppCertService",
|
|
||||||
"com.google.android.gms.auth.blockstore.service.START",
|
|
||||||
"com.google.android.gms.auth.config.service.START",
|
|
||||||
"com.google.android.gms.auth.cryptauth.cryptauthservice.START",
|
|
||||||
"com.google.android.gms.auth.GOOGLE_SIGN_IN",
|
|
||||||
"com.google.android.gms.auth.login.LOGIN",
|
|
||||||
"com.google.android.gms.auth.proximity.devicesyncservice.START",
|
|
||||||
"com.google.android.gms.auth.proximity.securechannelservice.START",
|
|
||||||
"com.google.android.gms.auth.proximity.START",
|
|
||||||
"com.google.android.gms.auth.service.START",
|
|
||||||
"com.google.android.gms.backup.ACTION_BACKUP_SETTINGS",
|
|
||||||
"com.google.android.gms.backup.G1_BACKUP",
|
|
||||||
"com.google.android.gms.backup.G1_RESTORE",
|
|
||||||
"com.google.android.gms.backup.GMS_MODULE_RESTORE",
|
|
||||||
"com.google.android.gms.beacon.internal.IBleService.START",
|
|
||||||
"com.google.android.gms.car.service.START",
|
|
||||||
"com.google.android.gms.carrierauth.service.START",
|
|
||||||
"com.google.android.gms.cast.firstparty.START",
|
|
||||||
"com.google.android.gms.cast.remote_display.service.START",
|
|
||||||
"com.google.android.gms.cast.service.BIND_CAST_DEVICE_CONTROLLER_SERVICE",
|
|
||||||
"com.google.android.gms.cast_mirroring.service.START",
|
|
||||||
"com.google.android.gms.checkin.BIND_TO_SERVICE",
|
|
||||||
"com.google.android.gms.chromesync.service.START",
|
|
||||||
"com.google.android.gms.clearcut.service.START",
|
|
||||||
"com.google.android.gms.common.account.CHOOSE_ACCOUNT",
|
|
||||||
"com.google.android.gms.common.download.START",
|
|
||||||
"com.google.android.gms.common.service.START",
|
|
||||||
"com.google.android.gms.common.telemetry.service.START",
|
|
||||||
"com.google.android.gms.config.START",
|
|
||||||
"com.google.android.gms.constellation.service.START",
|
|
||||||
"com.google.android.gms.credential.manager.service.firstparty.START",
|
|
||||||
"com.google.android.gms.deviceconnection.service.START",
|
|
||||||
"com.google.android.gms.drive.ApiService.RESET_AFTER_BOOT",
|
|
||||||
"com.google.android.gms.drive.ApiService.START",
|
|
||||||
"com.google.android.gms.drive.ApiService.STOP",
|
|
||||||
"com.google.android.gms.droidguard.service.INIT",
|
|
||||||
"com.google.android.gms.droidguard.service.PING",
|
|
||||||
"com.google.android.gms.droidguard.service.START",
|
|
||||||
"com.google.android.gms.enterprise.loader.service.START",
|
|
||||||
"com.google.android.gms.facs.cache.service.START",
|
|
||||||
"com.google.android.gms.facs.internal.service.START",
|
|
||||||
"com.google.android.gms.feedback.internal.IFeedbackService",
|
|
||||||
"com.google.android.gms.fido.credentialstore.internal_service.START",
|
|
||||||
"com.google.android.gms.fido.fido2.privileged.START",
|
|
||||||
"com.google.android.gms.fido.fido2.regular.START",
|
|
||||||
"com.google.android.gms.fido.fido2.zeroparty.START",
|
|
||||||
"com.google.android.gms.fido.sourcedevice.service.START",
|
|
||||||
"com.google.android.gms.fido.targetdevice.internal_service.START",
|
|
||||||
"com.google.android.gms.fido.u2f.privileged.START",
|
|
||||||
"com.google.android.gms.fido.u2f.thirdparty.START",
|
|
||||||
"com.google.android.gms.fido.u2f.zeroparty.START",
|
|
||||||
"com.google.android.gms.fitness.BleApi",
|
|
||||||
"com.google.android.gms.fitness.ConfigApi",
|
|
||||||
"com.google.android.gms.fitness.GoalsApi",
|
|
||||||
"com.google.android.gms.fitness.GoogleFitnessService.START",
|
|
||||||
"com.google.android.gms.fitness.HistoryApi",
|
|
||||||
"com.google.android.gms.fitness.InternalApi",
|
|
||||||
"com.google.android.gms.fitness.RecordingApi",
|
|
||||||
"com.google.android.gms.fitness.SensorsApi",
|
|
||||||
"com.google.android.gms.fitness.SessionsApi",
|
|
||||||
"com.google.android.gms.fonts.service.START",
|
|
||||||
"com.google.android.gms.freighter.service.START",
|
|
||||||
"com.google.android.gms.games.internal.connect.service.START",
|
|
||||||
"com.google.android.gms.games.PLAY_GAMES_UPGRADE",
|
|
||||||
"com.google.android.gms.games.service.START",
|
|
||||||
"com.google.android.gms.gass.START",
|
|
||||||
"com.google.android.gms.gmscompliance.service.START",
|
|
||||||
"com.google.android.gms.googlehelp.HELP",
|
|
||||||
"com.google.android.gms.googlehelp.service.GoogleHelpService.START",
|
|
||||||
"com.google.android.gms.growth.service.START",
|
|
||||||
"com.google.android.gms.herrevad.services.LightweightNetworkQualityAndroidService.START",
|
|
||||||
"com.google.android.gms.icing.INDEX_SERVICE",
|
|
||||||
"com.google.android.gms.icing.LIGHTWEIGHT_INDEX_SERVICE",
|
|
||||||
"com.google.android.gms.identity.service.BIND",
|
|
||||||
"com.google.android.gms.inappreach.service.START",
|
|
||||||
"com.google.android.gms.instantapps.START",
|
|
||||||
"com.google.android.gms.kids.service.START",
|
|
||||||
"com.google.android.gms.languageprofile.service.START",
|
|
||||||
"com.google.android.gms.learning.internal.dynamitesupport.START",
|
|
||||||
"com.google.android.gms.learning.intservice.START",
|
|
||||||
"com.google.android.gms.learning.predictor.START",
|
|
||||||
"com.google.android.gms.learning.trainer.START",
|
|
||||||
"com.google.android.gms.learning.training.background.START",
|
|
||||||
"com.google.android.gms.location.places.GeoDataApi",
|
|
||||||
"com.google.android.gms.location.places.PlaceDetectionApi",
|
|
||||||
"com.google.android.gms.location.places.PlacesApi",
|
|
||||||
"com.google.android.gms.location.reporting.service.START",
|
|
||||||
"com.google.android.gms.location.settings.LOCATION_HISTORY",
|
|
||||||
"com.google.android.gms.location.settings.LOCATION_REPORTING_SETTINGS",
|
|
||||||
"com.google.android.gms.locationsharing.api.START",
|
|
||||||
"com.google.android.gms.locationsharingreporter.service.START",
|
|
||||||
"com.google.android.gms.lockbox.service.START",
|
|
||||||
"com.google.android.gms.matchstick.lighter.service.START",
|
|
||||||
"com.google.android.gms.mdm.services.DeviceManagerApiService.START",
|
|
||||||
"com.google.android.gms.mdm.services.START",
|
|
||||||
"com.google.android.gms.mdns.service.START",
|
|
||||||
"com.google.android.gms.measurement.START",
|
|
||||||
"com.google.android.gms.nearby.bootstrap.service.NearbyBootstrapService.START",
|
|
||||||
"com.google.android.gms.nearby.connection.service.START",
|
|
||||||
"com.google.android.gms.nearby.fastpair.START",
|
|
||||||
"com.google.android.gms.nearby.messages.service.NearbyMessagesService.START",
|
|
||||||
"com.google.android.gms.nearby.sharing.service.NearbySharingService.START",
|
|
||||||
"com.google.android.gms.nearby.sharing.START_SERVICE",
|
|
||||||
"com.google.android.gms.notifications.service.START",
|
|
||||||
"com.google.android.gms.ocr.service.internal.START",
|
|
||||||
"com.google.android.gms.ocr.service.START",
|
|
||||||
"com.google.android.gms.oss.licenses.service.START",
|
|
||||||
"com.google.android.gms.payse.service.BIND",
|
|
||||||
"com.google.android.gms.people.contactssync.service.START",
|
|
||||||
"com.google.android.gms.people.service.START",
|
|
||||||
"com.google.android.gms.phenotype.service.START",
|
|
||||||
"com.google.android.gms.photos.autobackup.service.START",
|
|
||||||
"com.google.android.gms.playlog.service.START",
|
|
||||||
"com.google.android.gms.plus.service.default.INTENT",
|
|
||||||
"com.google.android.gms.plus.service.image.INTENT",
|
|
||||||
"com.google.android.gms.plus.service.internal.START",
|
|
||||||
"com.google.android.gms.plus.service.START",
|
|
||||||
"com.google.android.gms.potokens.service.START",
|
|
||||||
"com.google.android.gms.pseudonymous.service.START",
|
|
||||||
"com.google.android.gms.rcs.START",
|
|
||||||
"com.google.android.gms.reminders.service.START",
|
|
||||||
"com.google.android.gms.romanesco.MODULE_BACKUP_AGENT",
|
|
||||||
"com.google.android.gms.romanesco.service.START",
|
|
||||||
"com.google.android.gms.safetynet.service.START",
|
|
||||||
"com.google.android.gms.scheduler.ACTION_PROXY_SCHEDULE",
|
|
||||||
"com.google.android.gms.search.service.SEARCH_AUTH_START",
|
|
||||||
"com.google.android.gms.semanticlocation.service.START_ODLH",
|
|
||||||
"com.google.android.gms.sesame.service.BIND",
|
|
||||||
"com.google.android.gms.settings.EXPOSURE_NOTIFICATION_SETTINGS",
|
|
||||||
"com.google.android.gms.setup.auth.SecondDeviceAuth.START",
|
|
||||||
"com.google.android.gms.signin.service.START",
|
|
||||||
"com.google.android.gms.smartdevice.d2d.SourceDeviceService.START",
|
|
||||||
"com.google.android.gms.smartdevice.d2d.TargetDeviceService.START",
|
|
||||||
"com.google.android.gms.smartdevice.directtransfer.SourceDirectTransferService.START",
|
|
||||||
"com.google.android.gms.smartdevice.directtransfer.TargetDirectTransferService.START",
|
|
||||||
"com.google.android.gms.smartdevice.postsetup.PostSetupService.START",
|
|
||||||
"com.google.android.gms.smartdevice.setup.accounts.AccountsService.START",
|
|
||||||
"com.google.android.gms.smartdevice.wifi.START_WIFI_HELPER_SERVICE",
|
|
||||||
"com.google.android.gms.social.location.activity.service.START",
|
|
||||||
"com.google.android.gms.speech.service.START",
|
|
||||||
"com.google.android.gms.statementservice.EXECUTE",
|
|
||||||
"com.google.android.gms.stats.ACTION_UPLOAD_DROPBOX_ENTRIES",
|
|
||||||
"com.google.android.gms.tapandpay.service.BIND",
|
|
||||||
"com.google.android.gms.telephonyspam.service.START",
|
|
||||||
"com.google.android.gms.testsupport.service.START",
|
|
||||||
"com.google.android.gms.thunderbird.service.START",
|
|
||||||
"com.google.android.gms.trustagent.BridgeApi.START",
|
|
||||||
"com.google.android.gms.trustagent.StateApi.START",
|
|
||||||
"com.google.android.gms.trustagent.trustlet.trustletmanagerservice.BIND",
|
|
||||||
"com.google.android.gms.trustlet.bluetooth.service.BIND",
|
|
||||||
"com.google.android.gms.trustlet.connectionlessble.service.BIND",
|
|
||||||
"com.google.android.gms.trustlet.face.service.BIND",
|
|
||||||
"com.google.android.gms.trustlet.nfc.service.BIND",
|
|
||||||
"com.google.android.gms.trustlet.onbody.service.BIND",
|
|
||||||
"com.google.android.gms.trustlet.place.service.BIND",
|
|
||||||
"com.google.android.gms.trustlet.voiceunlock.service.BIND",
|
|
||||||
"com.google.android.gms.udc.service.START",
|
|
||||||
"com.google.android.gms.update.START_API_SERVICE",
|
|
||||||
"com.google.android.gms.update.START_SERVICE",
|
|
||||||
"com.google.android.gms.update.START_SINGLE_USER_API_SERVICE",
|
|
||||||
"com.google.android.gms.update.START_TV_API_SERVICE",
|
|
||||||
"com.google.android.gms.usagereporting.service.START",
|
|
||||||
"com.google.android.gms.userlocation.service.START",
|
|
||||||
"com.google.android.gms.vehicle.cabin.service.START",
|
|
||||||
"com.google.android.gms.vehicle.climate.service.START",
|
|
||||||
"com.google.android.gms.vehicle.info.service.START",
|
|
||||||
"com.google.android.gms.wallet.service.BIND",
|
|
||||||
"com.google.android.gms.walletp2p.service.firstparty.BIND",
|
|
||||||
"com.google.android.gms.walletp2p.service.zeroparty.BIND",
|
|
||||||
"com.google.android.gms.wearable.BIND",
|
|
||||||
"com.google.android.gms.wearable.BIND_LISTENER",
|
|
||||||
"com.google.android.gms.wearable.DATA_CHANGED",
|
|
||||||
"com.google.android.gms.wearable.MESSAGE_RECEIVED",
|
|
||||||
"com.google.android.gms.wearable.NODE_CHANGED",
|
|
||||||
"com.google.android.gsf.action.GET_GLS",
|
|
||||||
"com.google.android.location.settings.LOCATION_REPORTING_SETTINGS",
|
|
||||||
"com.google.android.mdd.service.START",
|
|
||||||
"com.google.android.mdh.service.listener.START",
|
|
||||||
"com.google.android.mdh.service.START",
|
|
||||||
"com.google.android.mobstore.service.START",
|
|
||||||
"com.google.firebase.auth.api.gms.service.START",
|
|
||||||
"com.google.firebase.dynamiclinks.service.START",
|
|
||||||
"com.google.iid.TOKEN_REQUEST",
|
"com.google.iid.TOKEN_REQUEST",
|
||||||
"com.google.android.gms.location.places.ui.PICK_PLACE",
|
|
||||||
|
// people
|
||||||
|
"com.google.android.gms.people.service.START",
|
||||||
|
|
||||||
|
// auth
|
||||||
|
"com.google.android.gsf.login",
|
||||||
|
"com.google.android.gsf.action.GET_GLS",
|
||||||
|
"com.google.android.gms.auth.service.START",
|
||||||
|
"com.google.android.gms.signin.service.START",
|
||||||
|
"com.google.android.gms.accountsettings.action.VIEW_SETTINGS",
|
||||||
|
"com.google.android.gms.auth.account.authapi.START",
|
||||||
|
|
||||||
|
// gass
|
||||||
|
"com.google.android.gms.gass.START",
|
||||||
|
|
||||||
|
// help
|
||||||
|
"com.google.android.gms.googlehelp.service.GoogleHelpService.START",
|
||||||
|
"com.google.android.gms.googlehelp.HELP",
|
||||||
|
"com.google.android.gms.feedback.internal.IFeedbackService",
|
||||||
|
|
||||||
|
// cast
|
||||||
|
"com.google.android.gms.cast.firstparty.START",
|
||||||
|
"com.google.android.gms.cast.service.BIND_CAST_DEVICE_CONTROLLER_SERVICE",
|
||||||
|
|
||||||
|
// fonts
|
||||||
|
"com.google.android.gms.fonts",
|
||||||
|
|
||||||
|
// phenotype
|
||||||
|
"com.google.android.gms.phenotype.service.START",
|
||||||
|
|
||||||
|
// misc
|
||||||
|
"com.google.android.gms.clearcut.service.START",
|
||||||
|
"com.google.android.gms.languageprofile.service.START",
|
||||||
|
"com.google.android.gms.measurement.START",
|
||||||
|
"com.google.android.gms.pseudonymous.service.START",
|
||||||
|
"com.google.android.gms.usagereporting.service.START",
|
||||||
|
"com.google.android.gms.wallet.service.BIND",
|
||||||
|
|
||||||
|
// potoken
|
||||||
|
"com.google.android.gms.potokens.service.START",
|
||||||
|
|
||||||
|
// droidguard
|
||||||
|
"com.google.android.gms.droidguard.service.START",
|
||||||
)
|
)
|
||||||
|
|
||||||
/**
|
|
||||||
* All content provider authorities.
|
|
||||||
*/
|
|
||||||
val AUTHORITIES = setOf(
|
val AUTHORITIES = setOf(
|
||||||
"com.google.android.gms.auth.accounts",
|
// gsf
|
||||||
"com.google.android.gms.chimera",
|
|
||||||
"com.google.android.gms.fonts",
|
|
||||||
"com.google.android.gms.phenotype",
|
|
||||||
"com.google.android.gsf.gservices",
|
"com.google.android.gsf.gservices",
|
||||||
"com.google.settings",
|
|
||||||
|
// auth
|
||||||
|
"com.google.android.gms.auth.accounts",
|
||||||
|
|
||||||
|
// fonts
|
||||||
|
"com.google.android.gms.fonts",
|
||||||
|
|
||||||
|
// phenotype
|
||||||
|
"com.google.android.gms.phenotype",
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user