feat(GmsCore support): Match with ReVanced

This commit is contained in:
inotia00 2025-01-03 22:53:25 +09:00
parent 9265303a29
commit a5c808652e
2 changed files with 239 additions and 181 deletions

View File

@ -25,15 +25,6 @@ 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 = "castContextFetchFingerprint",
returnType = "I", returnType = "I",
@ -53,42 +44,9 @@ internal val serviceCheckFingerprint = legacyFingerprint(
strings = listOf("Google Play Services not available") strings = listOf("Google Play Services not available")
) )
internal val primesApiFingerprint = legacyFingerprint( internal val primeMethodFingerprint = legacyFingerprint(
name = "primesApiFingerprint", name = "primeMethodFingerprint",
returnType = "V", strings = listOf("com.google.android.GoogleCamera", "com.android.vending")
strings = listOf("PrimesApiImpl.java"),
customFingerprint = { method, _ ->
MethodUtil.isConstructor(method)
}
)
internal val primesBackgroundInitializationFingerprint = legacyFingerprint(
name = "primesBackgroundInitializationFingerprint",
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
}
) )
internal val certificateFingerprint = legacyFingerprint( internal val certificateFingerprint = legacyFingerprint(

View File

@ -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,15 +25,12 @@ 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.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
@ -233,41 +230,18 @@ fun gmsCoreSupportPatch(
} }
} }
fun transformPrimeMethod() { fun transformPrimeMethod(packageName: String) {
setOf( primeMethodFingerprint.methodOrThrow().apply {
primesBackgroundInitializationFingerprint, var register = 2
primesLifecycleEventFingerprint
).forEach { fingerprint -> val index = instructions.indexOfFirst {
fingerprint.methodOrThrow().apply { if (it.getReference<StringReference>()?.string != fromPackageName) return@indexOfFirst false
val exceptionIndex = indexOfFirstInstructionReversedOrThrow {
opcode == Opcode.NEW_INSTANCE && register = (it as OneRegisterInstruction).registerA
(this as? ReferenceInstruction)?.reference?.toString() == "Ljava/lang/IllegalStateException;" return@indexOfFirst true
}
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\"")
} }
} }
@ -293,14 +267,12 @@ 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,
).forEach { it.methodOrThrow().returnEarly() } ).forEach { it.methodOrThrow().returnEarly() }
// Specific method that needs to be patched. // Specific method that needs to be patched.
transformPrimeMethod() transformPrimeMethod(packageName)
// 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 {
@ -358,134 +330,262 @@ private object Constants {
* All permissions. * 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.gtalkservice.permission.GTALK_SERVICE", "com.google.android.gms.auth.api.phone.permission.SEND",
"com.google.android.providers.gsf.permission.READ_GSERVICES", "com.google.android.gms.permission.AD_ID",
"com.google.android.gms.permission.AD_ID_NOTIFICATION",
// GAuth "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",
"com.google.android.googleapps.permission.GOOGLE_AUTH.cp", "com.google.android.googleapps.permission.GOOGLE_AUTH.cp",
"com.google.android.googleapps.permission.GOOGLE_AUTH.local", "com.google.android.googleapps.permission.GOOGLE_AUTH.local",
"com.google.android.googleapps.permission.GOOGLE_AUTH.mail", "com.google.android.googleapps.permission.GOOGLE_AUTH.mail",
"com.google.android.googleapps.permission.GOOGLE_AUTH.writely", "com.google.android.googleapps.permission.GOOGLE_AUTH.writely",
"com.google.android.gtalkservice.permission.GTALK_SERVICE",
// Ad "com.google.android.providers.gsf.permission.READ_GSERVICES",
"com.google.android.gms.permission.AD_ID_NOTIFICATION",
"com.google.android.gms.permission.AD_ID",
) )
/** /**
* All intent actions. * All intent actions.
*/ */
val ACTIONS = setOf( val ACTIONS = setOf(
// location "com.google.android.c2dm.intent.RECEIVE",
"com.google.android.gms.location.places.ui.PICK_PLACE",
"com.google.android.gms.location.places.GeoDataApi",
"com.google.android.gms.location.places.PlacesApi",
"com.google.android.gms.location.places.PlaceDetectionApi",
"com.google.android.gms.wearable.MESSAGE_RECEIVED",
"com.google.android.gms.checkin.BIND_TO_SERVICE",
// 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.UNREGISTER",
"com.google.android.c2dm.intent.RECEIVE", "com.google.android.contextmanager.service.ContextManagerService.START",
"com.google.iid.TOKEN_REQUEST",
"com.google.android.gcm.intent.SEND", "com.google.android.gcm.intent.SEND",
"com.google.android.gms.accounts.ACCOUNT_SERVICE",
// car "com.google.android.gms.accountsettings.ACCOUNT_PREFERENCES_SETTINGS",
"com.google.android.gms.car.service.START", "com.google.android.gms.accountsettings.action.BROWSE_SETTINGS",
"com.google.android.gms.accountsettings.action.VIEW_SETTINGS",
// people "com.google.android.gms.accountsettings.MY_ACCOUNT",
"com.google.android.gms.people.service.START", "com.google.android.gms.accountsettings.PRIVACY_SETTINGS",
"com.google.android.gms.accountsettings.SECURITY_SETTINGS",
// wearable "com.google.android.gms.ads.gservice.START",
"com.google.android.gms.wearable.BIND", "com.google.android.gms.ads.identifier.service.EVENT_ATTESTATION",
"com.google.android.gms.ads.service.CACHE",
// auth "com.google.android.gms.ads.service.CONSENT_LOOKUP",
"com.google.android.gsf.login", "com.google.android.gms.ads.service.HTTP",
"com.google.android.gsf.action.GET_GLS", "com.google.android.gms.analytics.service.START",
"com.google.android.gms.common.account.CHOOSE_ACCOUNT", "com.google.android.gms.app.settings.GoogleSettingsLink",
"com.google.android.gms.auth.login.LOGIN", "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.PICKER",
"com.google.android.gms.auth.api.credentials.service.START", "com.google.android.gms.auth.api.credentials.service.START",
"com.google.android.gms.auth.service.START", "com.google.android.gms.auth.api.identity.service.authorization.START",
"com.google.firebase.auth.api.gms.service.START", "com.google.android.gms.auth.api.identity.service.credentialsaving.START",
"com.google.android.gms.auth.be.appcert.AppCertService",
"com.google.android.gms.credential.manager.service.firstparty.START",
"com.google.android.gms.auth.GOOGLE_SIGN_IN",
"com.google.android.gms.signin.service.START",
"com.google.android.gms.auth.api.signin.service.START",
"com.google.android.gms.auth.api.identity.service.signin.START", "com.google.android.gms.auth.api.identity.service.signin.START",
"com.google.android.gms.accountsettings.action.VIEW_SETTINGS", "com.google.android.gms.auth.api.phone.service.InternalService.START",
"com.google.android.gms.auth.api.signin.service.START",
// fido "com.google.android.gms.auth.be.appcert.AppCertService",
"com.google.android.gms.fido.fido2.privileged.START", "com.google.android.gms.auth.blockstore.service.START",
"com.google.android.gms.auth.config.service.START",
// gass "com.google.android.gms.auth.cryptauth.cryptauthservice.START",
"com.google.android.gms.gass.START", "com.google.android.gms.auth.GOOGLE_SIGN_IN",
"com.google.android.gms.auth.login.LOGIN",
// games "com.google.android.gms.auth.proximity.devicesyncservice.START",
"com.google.android.gms.games.service.START", "com.google.android.gms.auth.proximity.securechannelservice.START",
"com.google.android.gms.games.PLAY_GAMES_UPGRADE", "com.google.android.gms.auth.proximity.START",
"com.google.android.gms.games.internal.connect.service.START", "com.google.android.gms.auth.service.START",
"com.google.android.gms.backup.ACTION_BACKUP_SETTINGS",
// help "com.google.android.gms.backup.G1_BACKUP",
"com.google.android.gms.googlehelp.service.GoogleHelpService.START", "com.google.android.gms.backup.G1_RESTORE",
"com.google.android.gms.googlehelp.HELP", "com.google.android.gms.backup.GMS_MODULE_RESTORE",
"com.google.android.gms.feedback.internal.IFeedbackService", "com.google.android.gms.beacon.internal.IBleService.START",
"com.google.android.gms.car.service.START",
// cast "com.google.android.gms.carrierauth.service.START",
"com.google.android.gms.cast.firstparty.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.service.BIND_CAST_DEVICE_CONTROLLER_SERVICE",
"com.google.android.gms.cast_mirroring.service.START",
// fonts "com.google.android.gms.checkin.BIND_TO_SERVICE",
"com.google.android.gms.fonts", "com.google.android.gms.chromesync.service.START",
// phenotype
"com.google.android.gms.phenotype.service.START",
// location
"com.google.android.gms.location.reporting.service.START",
// misc
"com.google.android.gms.gmscompliance.service.START",
"com.google.android.gms.oss.licenses.service.START",
"com.google.android.gms.tapandpay.service.BIND",
"com.google.android.gms.measurement.START",
"com.google.android.gms.languageprofile.service.START",
"com.google.android.gms.clearcut.service.START", "com.google.android.gms.clearcut.service.START",
"com.google.android.gms.icing.LIGHTWEIGHT_INDEX_SERVICE", "com.google.android.gms.common.account.CHOOSE_ACCOUNT",
"com.google.android.gms.icing.INDEX_SERVICE", "com.google.android.gms.common.download.START",
"com.google.android.gms.mdm.services.START", "com.google.android.gms.common.service.START",
"com.google.android.gms.common.telemetry.service.START",
// potoken "com.google.android.gms.config.START",
"com.google.android.gms.potokens.service.START", "com.google.android.gms.constellation.service.START",
"com.google.android.gms.credential.manager.service.firstparty.START",
// droidguard, safetynet "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.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.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.android.gms.location.places.ui.PICK_PLACE",
) )
/** /**
* All content provider authorities. * All content provider authorities.
*/ */
val AUTHORITIES = setOf( val AUTHORITIES = setOf(
// gsf "com.google.android.gms.auth.accounts",
"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", "com.google.settings",
// auth
"com.google.android.gms.auth.accounts",
// fonts
"com.google.android.gms.fonts",
// phenotype
"com.google.android.gms.phenotype",
) )
} }