self package targeting for side by side install revanced coregms#308
self package targeting for side by side install revanced coregms#308zappybiby wants to merge 8 commits intoReVanced:mainfrom
Conversation
This can be optimized with a compile time constant, sparing resolving the package name dynamically. Check if this reduces the amount of code changes needed. (BuildConfig.APPLICATION_ID like you already used works well) |
play-services-auth-api-phone/core/src/main/kotlin/org/microg/gms/auth/phone/SmsRetrieverCore.kt
Outdated
Show resolved
Hide resolved
play-services-base/core/src/main/java/org/microg/gms/common/PackageUtils.java
Outdated
Show resolved
Hide resolved
play-services-core/src/main/java/com/google/android/gms/chimera/DynamiteContextFactory.java
Outdated
Show resolved
Hide resolved
play-services-core/src/main/java/org/microg/gms/auth/login/LoginActivity.java
Outdated
Show resolved
Hide resolved
...rvices-core/src/main/kotlin/org/microg/gms/auth/credentials/identity/AuthorizationService.kt
Outdated
Show resolved
Hide resolved
play-services-maps/src/main/java/org/microg/gms/maps/MapsRemoteContextHolder.java
Outdated
Show resolved
Hide resolved
Stop using canonical package identity at self-targeting call sites that actually mean the installed GmsCore APK, while keeping the Maps change narrowly scoped to the Mapbox backend path. For Maps, keep the loader and other backends unchanged and only stop the Mapbox backend from reconstructing a canonical com.google.android.gms context. Resolve the package context from the serving runtime application id instead, and keep MultiArchLoader version/APK lookup aligned with that Mapbox context. Also drop the transient self-package helpers and use direct package resolution at each call site: BuildConfig.APPLICATION_ID in play-services-core, and inline self-package context resolution in library modules that do not have the app BuildConfig.
The package-rename diagnostics showed that the Vision/MLKit face detector creators were still using the canonical package context even though the actual detector helper and model asset are owned by the serving self APK. Apply that ownership decision to all four remaining Vision/MLKit face detector creators by resolving the installed self package directly from the incoming context instead of going through a shared helper.
Runtime checks showed these LoginActivity package targets are self-owned flows. The signup handoff already resolved to LoginActivity's internal MainActivity component; the remaining issue was that the package field still pointed at canonical com.google.android.gms instead of the serving GmsCore app. The post-login ACTION_GCM_REGISTER_ACCOUNT broadcast also needs to target the receiver in the serving GmsCore app, not a separate canonical GMS package. Because LoginActivity is in the app module, BuildConfig.APPLICATION_ID is the simplest self-package constant for both call sites.
5934c9d to
3fb21f2
Compare
|
Was this supposed to be closed? |
play-services-core/src/main/java/org/microg/gms/games/GamesStubService.java
Outdated
Show resolved
Hide resolved
play-services-core/src/main/kotlin/org/microg/gms/accountsettings/ui/MainActivity.kt
Outdated
Show resolved
Hide resolved
play-services-maps/core/mapbox/src/main/kotlin/org/microg/gms/maps/mapbox/utils/MapContext.kt
Show resolved
Hide resolved
...ervices-maps/core/mapbox/src/main/kotlin/org/microg/gms/maps/mapbox/utils/MultiArchLoader.kt
Outdated
Show resolved
Hide resolved
|
Should the issues related to this PR be added to it so that they get automatically closed and so that people can more easily find it? |
|
In the opening message of this PR you can add "Closes #number" as many times as you want |
|
Does this PR also solve notifications, apparently people don't receive them currently |
I know but I did not create the PR so I can't edit the opening message. |
|
I don't want to pivot too far off the main focus of the PR, but I did see the patched YTM app did send me this notification, which I believe is remote? You can see in my screenshot that both the stock app and the patched app sent it (YT Music Revanced is the 9:34 notification) I'm not sure what exactly notification-wise wasn't working for users, I don't normally have notifications on. Remote notification diagnostic excerptIs there an existing issue for notifications to discuss that part more? And @oSumAtrIX do you have thoughts on the microg package constant I mentioned in my comments? The PR functionally is essentially complete for the scope I wanted to cover, I verified the call sites resolve to correct package. |
...re/src/main/kotlin/com/google/android/gms/vision/client/DynamiteNativeFaceDetectorCreator.kt
Outdated
Show resolved
Hide resolved
...-vision/core/src/main/kotlin/com/google/android/gms/vision/face/mlkit/FaceDetectorCreator.kt
Outdated
Show resolved
Hide resolved
.../core/src/main/kotlin/com/google/android/gms/vision/face/ChimeraNativeFaceDetectorCreator.kt
Outdated
Show resolved
Hide resolved
...re/src/main/kotlin/com/google/mlkit/vision/face/bundled/internal/ThickFaceDetectorCreator.kt
Outdated
Show resolved
Hide resolved
oSumAtrIX
left a comment
There was a problem hiding this comment.
Apart from the review, rest lgtm. I would like to understand a last question apart from those:
How did you determine the completeness of the changes in this PR? If you just did it by skimming the code, there is possibilty that we missed changing something. Is there maybe a systematic approach to verify, that the fix is applied correctly everywhere where applicable?
Users dont receive notifications, i am not sure if this PR solves it, but since you receive notifications (with this PR) I assume it'll fix it too. |
Using androguard, Common package rename sinks reviewedStrings reviewedI looked at strings containing: Code paths reviewed for possible package renamingI looked at code that could possibly relate to package renaming There were only two exercised runtime buckets that did not immediately collapse to a simple “app targeted ReVanced GmsCore and Android resolved ReVanced GmsCore” result. After investigating them, they do not currently look like missed rename call sites where ReVanced functionality already exists, and I don't see further changes that need to be made. Cronet HTTP-flags probeThe first is the Cronet HTTP-flags probe, which is a stock-only external probe: {"package":"app.revanced.android.youtube","label":"rename-sink-pm-resolve-service","payload":{"intent":{"action":"android.net.http.FLAGS_FILE_PROVIDER"},"match":{"package":"com.google.android.gms","name":"com.google.android.gms.chimera.GmsApiService"},"callSite":"bgrj#run:78"}}Media-route discoveryThe second is media-route discovery. It was worth mentioning because the discovery query returns both stock and ReVanced matches, which is exactly the kind of output that could hide a missed rename if the app later chose the wrong target. In the exercised path here, that is not what happened: discovery is dual at query time, but the later bind is still ReVanced GmsCore: {"package":"app.revanced.android.youtube","label":"rename-sink-pm-query-intent-services","payload":{"intent":{"action":"android.media.MediaRouteProviderService"},"matches":[{"package":"com.google.android.gms","name":"com.google.android.gms.cast.media.CastMediaRoute2ProviderService_Persistent"},{"package":"app.revanced.android.gms","name":"com.google.android.gms.cast.media.CastMediaRouteProviderService"}],"callSite":"dfy#b:93"}}
{"package":"app.revanced.android.youtube","label":"rename-sink-intent-set-component","payload":{"requestedComponent":"app.revanced.android.gms/com.google.android.gms.cast.media.CastMediaRouteProviderService","emittedIntent":{"action":"android.media.MediaRouteProviderService","component":"app.revanced.android.gms/com.google.android.gms.cast.media.CastMediaRouteProviderService"},"callSite":"dfw#f:14"}}Missing-endpoint casesSeparately from those two live runtime exceptions, there are also a few missing-endpoint cases ReVanced GmsCore does not currently expose the corresponding endpoint/module.
NotificationsLastly, for notifications:
YouTube: YT Music: The only currently stock pointing notification related call site is ACTION_SCHEDULE. ACTION_SCHEDULE is for GcmNetworkManager, which is an old background job scheduler API.
My Analysis found no broadcast receiver in app.revanced.android.gms that can handle I do not see any references to ACTION_SCHEDULE in YouTube or YouTube Music apk, so I do not think this finding has any relevance. Summary: With the few stock-only call sites known, I don't see further missed renamed sites that aren't part of the few niche call sites that don't have a matching Revanced component we could switch them to. |
e0eef99 to
12227d7
Compare
Just to understand, you believe this is complete, but you can't verify it is? It's fine though, i think this second review you did should give enough confidence for completeness. |
What I did was the static analysis with androguard as I described. I also attached runtime probes to GmsCore and a diagnostic patch for Revanced YT/YTMusic to ensure call sites are being correctly resolved. I feel quite confident that all potential call sites have been addressed. Im not worried about the small things I saw that only have a stock gms functionality as I don't think they have any significant impact. I already verified that one notification finding is essentially an older API that isnt used in either YT or YTMusic. I am not familiar with tools like Frida so that kind of dynamic analysis is not something I could do. |
0195ac8 to
f294571
Compare
f294571 to
62ab6b5
Compare
In my testing, we don't need setpackage here at all, its redudant and removing it allows us to avoid the need for flavoring (compile time) or switching it to runtime compilation. In my diagnostic probe tool, I tested three scenarios: ``` component-only = keep the explicit component, but do not call setPackage(...) component + self package = keep the same explicit component, and set the package to the renamed/local package (BuildConfig.APPLICATION_ID) component + canonical com.google.android.gms package = keep the same explicit component, but set the package field to the canonical Google package instead ``` all three intent variants still resolved to the same UserConsentPromptActivity. This is because the component itself is doing the routing work. ``` 03-12 13:13:54.342 I PkgRenameDiag: Consent prompt component-only -> action=null | package=null | component=app.revanced.android.gms/org.microg.gms.auth.phone.UserConsentPromptActivity | activities=1 match(es): app.revanced.android.gms/org.microg.gms.auth.phone.UserConsentPromptActivity 03-12 13:13:54.342 I PkgRenameDiag: Consent prompt component+self package -> action=null | package=app.revanced.android.gms | component=app.revanced.android.gms/org.microg.gms.auth.phone.UserConsentPromptActivity | activities=1 match(es): app.revanced.android.gms/org.microg.gms.auth.phone.UserConsentPromptActivity 03-12 13:13:54.342 I PkgRenameDiag: Consent prompt component+canonical package -> action=null | package=com.google.android.gms | component=app.revanced.android.gms/org.microg.gms.auth.phone.UserConsentPromptActivity | activities=1 match(es): app.revanced.android.gms/org.microg.gms.auth.phone.UserConsentPromptActivity ``` I also looked at how PackageManager resolves intents: ``` 1. SmsRetrieverCore creates an explicit intent for UserConsentPromptActivity. 2. It attaches the google.messenger extra. 3. It places that intent into SmsRetriever.EXTRA_CONSENT_INTENT. 4. That extra is returned to the client app as part of the SMS User Consent API result. 5. Later, the client app launches that consent intent. ``` So for an explicit local activity intent, the component itself is already doing the main routing work.
|
With a specific commit or unrelated to this PR? |
|
I received that while having my PR Coregms installed to commit 12227d7 With Revanced Patches 6.1.0, Revanced YouTube 20.14.43 |
|
thats really good, hopefully its what fixes the notifications again, great work thanks! |



Several call sites were still using GMS_PACKAGE_NAME even when they were really trying to target the currently installed GmsCore APK. This change switches those sites to runtime self-package resolution, while keeping the remaining explicit package cases unchanged.
Goals of the patch:
If a call site means "this installed GmsCore APK", use the runtime self package.
If a call site means the canonical Google package identity for protocol, network, spoofing, or compatibility, keep Constants.GMS_PACKAGE_NAME.
Do not use USER_MICROG_PACKAGE_NAME as a generic stand-in for "self".
Do not derive remote Maps / Dynamite resource contexts from a caller or embedding-app Context.
As part of the changes, the identified issue affecting patched YT Music app and Android Auto (DynamiteContextFactory) is fixed. DynamiteContextFactory no longer resolves the GmsCore package context through GMS_PACKAGE_NAME, and now uses BuildConfig.APPLICATION_ID instead. That keeps the YT Music on Android Auto Dynamite path working for renamed/repackaged installs.
Closes https://github.com/ReVanced/revanced-patches/issues/6602