From 36141d05394bfd935c5c6c0f9be7f0c2f0307ef3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ho=C3=A0ng=20Gia=20B=E1=BA=A3o?= <70064328+YT-Advanced@users.noreply.github.com> Date: Wed, 15 Jan 2025 19:36:19 +0700 Subject: [PATCH] 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> --- .../shared/patches/GmsCoreSupport.java | 49 --- .../patches/shared/ads/BaseAdsPatch.kt | 15 + .../patches/shared/ads/Fingerprints.kt | 25 ++ .../patches/shared/gms/Fingerprints.kt | 79 +++- .../patches/shared/gms/GmsCoreSupportPatch.kt | 380 +++++------------- 5 files changed, 207 insertions(+), 341 deletions(-) diff --git a/extensions/shared/src/main/java/app/revanced/extension/shared/patches/GmsCoreSupport.java b/extensions/shared/src/main/java/app/revanced/extension/shared/patches/GmsCoreSupport.java index f0c5cd391..201bf2612 100644 --- a/extensions/shared/src/main/java/app/revanced/extension/shared/patches/GmsCoreSupport.java +++ b/extensions/shared/src/main/java/app/revanced/extension/shared/patches/GmsCoreSupport.java @@ -36,9 +36,6 @@ public class GmsCoreSupport { private static final String DONT_KILL_MY_APP_LINK = "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) { Intent intent; try { @@ -178,52 +175,6 @@ public class GmsCoreSupport { 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) { return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE); } diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/ads/BaseAdsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/ads/BaseAdsPatch.kt index 02cf1f243..c2d7d85f0 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/ads/BaseAdsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/ads/BaseAdsPatch.kt @@ -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 + """ + ) } } diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/ads/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/shared/ads/Fingerprints.kt index 9ec138962..350fb2715 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/ads/Fingerprints.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/ads/Fingerprints.kt @@ -1,9 +1,34 @@ package app.revanced.patches.shared.ads import app.revanced.util.fingerprint.legacyFingerprint +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionReversed import app.revanced.util.or 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.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() + opcode == Opcode.INVOKE_VIRTUAL && + reference?.returnType == "V" && + reference.parameterTypes.isEmpty() + } + internal val musicAdsFingerprint = legacyFingerprint( name = "musicAdsFingerprint", diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/gms/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/shared/gms/Fingerprints.kt index 1cff11b8f..952b0c350 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/gms/Fingerprints.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/gms/Fingerprints.kt @@ -5,8 +5,11 @@ import app.revanced.util.getReference import app.revanced.util.indexOfFirstInstruction import app.revanced.util.or 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.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" @@ -22,14 +25,24 @@ internal val castContextFetchFingerprint = legacyFingerprint( 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( - name = "castContextFetchFingerprint", + name = "googlePlayUtilityFingerprint", returnType = "I", accessFlags = AccessFlags.PUBLIC or AccessFlags.STATIC, parameters = listOf("L", "I"), strings = listOf( "This should never happen.", - "MetadataValueReader" + "MetadataValueReader", ) ) @@ -41,23 +54,57 @@ internal val serviceCheckFingerprint = legacyFingerprint( strings = listOf("Google Play Services not available") ) -internal val primeMethodFingerprint = legacyFingerprint( - name = "primeMethodFingerprint", - strings = listOf("com.google.android.GoogleCamera", "com.android.vending") +internal val sslGuardFingerprint = legacyFingerprint( + name = "sslGuardFingerprint", + returnType = "V", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + strings = listOf("Cannot initialize SslGuardSocketFactory will null"), ) -internal val certificateFingerprint = legacyFingerprint( - name = "certificateFingerprint", - returnType = "Ljava/lang/String;", - accessFlags = AccessFlags.PROTECTED or AccessFlags.FINAL, - parameters = emptyList(), - strings = listOf("X.509", "user", "S"), +internal val eCatcherFingerprint = legacyFingerprint( + name = "eCatcherFingerprint", + returnType = "V", + opcodes = listOf(Opcode.NEW_ARRAY), + strings = listOf("ECatcher disabled: level: %s, category: %s, message: %s"), 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) = - method.indexOfFirstInstruction { - getReference()?.toString() == "Landroid/content/Context;->getPackageName()Ljava/lang/String;" - } \ No newline at end of file +internal val primesBackgroundInitializationFingerprint = legacyFingerprint( + name = "primesBackgroundInitializationFingerprint", + opcodes = listOf(Opcode.NEW_INSTANCE), + customFingerprint = { method, _ -> + method.indexOfFirstInstruction { + opcode == Opcode.CONST_STRING && + getReference() + ?.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() + ?.string.toString() + .startsWith("Primes did not observe lifecycle events in the expected order.") + } >= 0 + } +) diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/gms/GmsCoreSupportPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/gms/GmsCoreSupportPatch.kt index 57d27416f..9c673e4c9 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/gms/GmsCoreSupportPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/gms/GmsCoreSupportPatch.kt @@ -1,9 +1,9 @@ package app.revanced.patches.shared.gms 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.getInstruction -import app.revanced.patcher.extensions.InstructionExtensions.instructions import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction import app.revanced.patcher.patch.BytecodePatchBuilder 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.getReference import app.revanced.util.indexOfFirstInstruction +import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstInstructionReversedOrThrow import app.revanced.util.returnEarly import app.revanced.util.valueOrThrow import com.android.tools.smali.dexlib2.Opcode 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.ReferenceInstruction 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.StringReference @@ -230,18 +232,41 @@ fun gmsCoreSupportPatch( } } - fun transformPrimeMethod(packageName: String) { - primeMethodFingerprint.methodOrThrow().apply { - var register = 2 - - val index = instructions.indexOfFirst { - if (it.getReference()?.string != fromPackageName) return@indexOfFirst false - - register = (it as OneRegisterInstruction).registerA - return@indexOfFirst true + fun transformPrimeMethod() { + setOf( + primesBackgroundInitializationFingerprint, + primesLifecycleEventFingerprint + ).forEach { fingerprint -> + fingerprint.methodOrThrow().apply { + val exceptionIndex = indexOfFirstInstructionReversedOrThrow { + opcode == Opcode.NEW_INSTANCE && + (this as? ReferenceInstruction)?.reference?.toString() == "Ljava/lang/IllegalStateException;" + } + val index = + indexOfFirstInstructionReversedOrThrow(exceptionIndex, Opcode.IF_EQZ) + val register = getInstruction(index).registerA + addInstruction( + index, + "const/4 v$register, 0x1" + ) + } + } + primesApiFingerprint.mutableClassOrThrow().methods.filter { method -> + method.name != "" && + method.returnType == "V" + }.forEach { method -> + method.apply { + val index = if (MethodUtil.isConstructor(method)) + indexOfFirstInstructionOrThrow { + opcode == Opcode.INVOKE_DIRECT && + getReference()?.name == "" + } + 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. setOf( castContextFetchFingerprint, + castDynamiteModuleFingerprint, + castDynamiteModuleV2Fingerprint, googlePlayUtilityFingerprint, serviceCheckFingerprint, + sslGuardFingerprint, ).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. - transformPrimeMethod(packageName) + transformPrimeMethod() // Verify GmsCore is installed and whitelisted for power optimizations and background usage. mainActivityOnCreateFingerprint.method.apply { @@ -299,22 +333,6 @@ fun gmsCoreSupportPatch( .single { it.name == GET_GMS_CORE_VENDOR_GROUP_ID_METHOD_NAME } .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() } @@ -326,266 +344,76 @@ fun gmsCoreSupportPatch( * that are present in GmsCore which need to be transformed. */ private object Constants { - /** - * All permissions. - */ val PERMISSIONS = setOf( + // C2DM / GCM "com.google.android.c2dm.permission.RECEIVE", "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", ) - /** - * All intent actions. - */ val ACTIONS = setOf( - "com.google.android.c2dm.intent.RECEIVE", + // C2DM / GCM "com.google.android.c2dm.intent.REGISTER", "com.google.android.c2dm.intent.REGISTRATION", - "com.google.android.c2dm.intent.UNREGISTER", - "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.android.c2dm.intent.RECEIVE", "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( - "com.google.android.gms.auth.accounts", - "com.google.android.gms.chimera", - "com.google.android.gms.fonts", - "com.google.android.gms.phenotype", + // gsf "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", ) }