MAJOR UPDATE - In-game server management without rebuilding APK! SERVER BROWSER UI: - Beautiful WebView-based interface - Add/edit/delete unlimited servers - Real-time online/offline status - One-click server switching - Favorites system - Connection testing before save - Professional UX with racing theme HTML ASSETS: + assets/community_servers_list.html - Main server browser interface - Server cards with status indicators - Connect/Edit/Delete actions - Empty state and loading states + assets/community_server_edit.html - Add/edit server form - URL validation and testing - Favorite marking - Professional form design INSTALLATION TOOL: + RR3-Server-Browser-Installer.ps1 - Automated installation script - Decompiles APK with apktool - Injects HTML assets - Updates AndroidManifest.xml - Rebuilds and signs APK - Pre-configure default servers - Full error handling DOCUMENTATION: + docs/SERVER_BROWSER_GUIDE.md - Complete user guide - Adding/editing/deleting servers - Connection flow - Troubleshooting - Developer integration + docs/SMALI_REFERENCE.md - Java bridge code reference - CommunityServerManager class - WebView activity hosts - Smali conversion guide - Testing & debugging tips UPDATED README: * Comprehensive overview * Quick start examples * Feature highlights * Use cases (players/owners/devs) * Architecture explanation * Screenshots in ASCII art ARCHITECTURE: - HTML/CSS/JS UI layer (assets/) - JavascriptInterface bridge (smali) - SharedPreferences storage - SynergyEnvironmentImpl patch - WebView activities for hosting USER FLOW: 1. Open Server Browser from game 2. Add server (name + URL) 3. Test connection 4. Save server 5. Tap Connect 6. Restart game -> Active! BENEFITS: ✓ One APK for unlimited servers ✓ No rebuild needed to change servers ✓ Users can add servers themselves ✓ Server owners can share one APK ✓ Professional UI experience ✓ Local + LAN + public servers ✓ Favorites and status tracking TECHNICAL DETAILS: - Data stored in SharedPreferences - JavaScript <-> Android bridge - Async server pinging - URL validation - Toast notifications - File:// asset loading This enables true community server ecosystem! Users can maintain their own server list without technical knowledge or APK rebuilding. Perfect companion to rr3-server project! Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
6.4 KiB
6.4 KiB
🌐 RR3 Community Server Browser
Overview
This is a Server Browser UI system for the Real Racing 3 modded APK that allows users to manage multiple community servers without reinstalling the APK.
🎯 Features
- ✅ Multiple Server Profiles - Add unlimited servers
- ✅ Easy Management - Add, edit, delete servers via UI
- ✅ Server Status - See which servers are online/offline
- ✅ One-Click Connect - Switch servers instantly
- ✅ Favorites - Mark frequently used servers
- ✅ Connection Testing - Test before saving
- ✅ No Reinstalls - One APK for all servers
📱 User Guide
How to Access
- Launch the modded APK
- From the main menu, tap "Community Servers"
- The server browser will open
Adding a Server
- Tap "+ Add New Server"
- Enter:
- Server Name: A friendly name (e.g., "My Local Server")
- Server URL: Full URL with port (e.g.,
http://192.168.1.100:5001)
- Tap "🔍 Test Connection" to verify it works
- Tap "💾 Save"
Connecting to a Server
- Find the server in your list
- Check the status indicator:
- 🟢 Green = Online
- 🔴 Red = Offline
- 🟠 Orange = Checking...
- Tap "Connect"
- Restart the game to apply
The active server will show (Active) and have a green border.
Editing a Server
- Tap the ✏️ Edit button on any server card
- Modify the name or URL
- Tap "💾 Save"
Deleting a Server
- Tap the 🗑️ Delete button on any server card
- Confirm deletion
🔧 Technical Details
Data Storage
Server configurations are stored in Android SharedPreferences at:
com.ea.games.r3_row_preferences
└── community_servers (JSON array)
└── active_server_id (String)
Server Data Format
{
"id": "uuid-1234",
"name": "My Local Server",
"url": "http://localhost:5001",
"addedDate": "2026-02-18T10:30:00Z",
"lastUsed": "2026-02-18T15:20:00Z",
"isFavorite": false
}
How It Works
- UI Layer: HTML/CSS/JavaScript interfaces in
assets/ - Bridge Layer:
CommunityServerManager.smaliwith JavascriptInterface - Storage: Android SharedPreferences
- Game Integration:
SynergyEnvironmentImplpatched to read active URL
Connection Flow
User taps "Connect"
↓
JavaScript calls AndroidInterface.setActiveServer(id)
↓
CommunityServerManager saves active_server_id to SharedPreferences
↓
User restarts game
↓
SynergyEnvironmentImpl.getEnvironmentUrls() called
↓
Reads active_server_url from SharedPreferences
↓
Uses community server instead of EA servers
🎨 UI Components
1. Server List (community_servers_list.html)
- Displays all saved servers
- Shows online/offline status
- Connect/Edit/Delete buttons
- Add new server button
2. Server Editor (community_server_edit.html)
- Add/edit server form
- URL validation
- Connection testing
- Save/Delete/Cancel actions
🔌 Server URL Examples
Local Development
http://localhost:5001
http://127.0.0.1:5001
LAN Server
http://192.168.1.100:5001
http://10.0.0.50:5001
Public Server
https://rr3-community.example.com
https://rr3.mydomain.org:8080
🚀 Developer Integration
Adding to Main Menu
Add a button to the game's main menu that launches:
Intent intent = new Intent(this, CommunityServersActivity.class);
startActivity(intent);
Accessing from ADB
adb shell am start -n com.ea.games.r3_row/com.community.CommunityServersActivity
Programmatic Server Management
CommunityServerManager manager = new CommunityServerManager(context);
// Add server
String serverJson = "{\"id\":\"...\", \"name\":\"...\", \"url\":\"...\"}";
manager.addServer(serverJson);
// Set active
manager.setActiveServer("uuid-1234");
// Get active URL
String url = manager.getActiveServerUrl();
📝 Files Included
HTML Assets (assets/)
community_servers_list.html- Main server browsercommunity_server_edit.html- Add/edit form
Smali Patches (smali-patches/)
CommunityServerManager.smali- Core logic + JavascriptInterfaceCommunityServersActivity.smali- WebView host for listServerEditActivity.smali- WebView host for edit form
Scripts
RR3-Server-Browser-Installer.ps1- Automated installation script
🛠️ Installation
Automatic (PowerShell Script)
.\RR3-Server-Browser-Installer.ps1 -ApkPath "realracing3.apk" -OutputPath "realracing3-community.apk"
Manual
- Decompile APK with apktool
- Copy
assets/folder contents to APK's assets - Copy
smali-patches/files tosmali/com/community/ - Patch
SynergyEnvironmentImpl.smali(see patch guide) - Update
AndroidManifest.xmlto register activities - Rebuild and sign APK
🔒 Security Notes
- Only use HTTPS for public servers
- Local/LAN servers can use HTTP
- URL validation prevents code injection
- No user credentials are stored
🐛 Troubleshooting
Server shows Offline
- Check URL is correct (including http:// or https://)
- Verify server is running
- Check firewall/network settings
- For LAN servers, ensure devices are on same network
Can't Connect
- Make sure you restarted the game after connecting
- Check server URL is saved correctly
- Verify server responds to
/directorendpoint
Game Crashes
- Ensure smali files are properly installed
- Check AndroidManifest has activity declarations
- Verify assets are in correct location
🎮 Tips
- Test Connection before saving to avoid typos
- Use Favorites for frequently used servers
- Keep URLs Short - use domain names instead of IPs when possible
- Restart After Switching - always restart game when changing servers
- Backup Server List - export before reinstalling
📚 For Server Owners
Want users to easily add your server? Share:
Server Name: [Your Server Name]
Server URL: https://your-server.com
Users can copy-paste directly into the add server form!
💡 Future Enhancements
Potential additions:
- Server discovery/public list
- Import/export server configs
- Server statistics (ping, uptime)
- Auto-reconnect on failure
- Server categories/tags
- QR code server sharing
Built for the RR3 Community 🏎️💨
This system enables one APK to work with unlimited servers - no more rebuilding APKs for different URLs!