Add RetroAchievements host-override broadcast receiver#1
Open
misantronic wants to merge 1 commit into
Open
Conversation
This was referenced Jul 9, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What is RAOfflineProxy
RAOfflineProxy is an Android app that runs a local HTTP proxy between an emulator's RetroAchievements client and retroachievements.org. It caches game and achievement data for offline play and queues casual (softcore) unlocks while offline, flushing them once connectivity returns. It runs on the same device, listening on
127.0.0.1. More at https://raofflineproxy.com/Why this is needed
To route an emulator's RA traffic through the proxy, RAOfflineProxy needs to redirect the rcheevos API host to
127.0.0.1at runtime. This fork keeps the host hardcoded to retroachievements.org natively, so there is no config value to patch, and editing files is fragile. A small broadcast receiver is the clean mechanism already adopted by other rcheevos-based Android emulators (ARMSX2, PPSSPP, Flycast).What this PR does
RetroAchievementsHostOverrideReceiverhandling{applicationId}.action.SET_/CLEAR_RETROACHIEVEMENTS_HOST_OVERRIDE(SET carries ahostextra,scheme://host[:port]).rcheevosSetHost()wrappingrc_client_set_host(). Applied before login inrcheevosInit(so the login request routes through the override too) and live when a client already exists.127.0.0.1/localhostin the network security config, since the proxy is a local plain-HTTP endpoint.Clearing the override (or an empty host) restores the default retroachievements.org host. Hardcore stays disabled, so this remains softcore-only.
Verified end to end on a physical device: with the proxy running, an N64 game caches while online, then logs in and loads achievements while offline.
Related host-override work across emulators
Same integration pattern, tracked in misantronic/RAOfflineProxy#33:
Merged: ARMSX2/ARMSX2#164 · hrydgard/ppsspp#21760 · flyinghead/flycast#2371
Open: dolphin-emu/dolphin#14671 · libretro/RetroArch#19093
Closed: rafaelvcaetano/melonDS-android#1633 (declined upstream; covered by the melonDualDS fork)