Added comprehensive 'Code Location Reference' section: - Network communication files with exact line numbers - Encryption/security code locations - Server URL configuration logic - All game features and managers - EA Nimble SDK components - CloudCell API structure - Android components - Third-party SDKs - Search tips and code flow diagrams Now people can find EXACTLY where code is instead of asking!
22 KiB
RR3 Community Server - Frequently Asked Questions (FAQ)
Last Updated: February 23, 2026
Project: Real Racing 3 Community Server + APK Mod
🤔 "Just Read The Code" - Common Questions
Before asking, check here first! All code is public on Gitea - but here are the most common questions answered quickly.
🔐 Security & Encryption
Q: Is the network communication encrypted?
A: Yes AND No - it depends what you mean:
- Transport (HTTPS/TLS): ✅ YES - data is encrypted in transit
- Application-level encryption: ❌ NO - payloads are plaintext over HTTPS
- Certificate validation: ❌ DISABLED - accepts any SSL certificate
Details: The game uses HTTPS but disables certificate validation, making it vulnerable to MITM attacks but also allowing self-signed certificates for community servers.
Read More: NETWORK-SECURITY-ANALYSIS.md (16 KB full analysis)
Q: Are the APK network files/code encrypted or obfuscated?
A: ❌ NO - completely readable
- Code obfuscation: NONE (no ProGuard/R8)
- Class names: Readable (Http.java, HttpRequest.java, etc.)
- Method names: Readable (sendRequest, postData, etc.)
- Strings: Plaintext in smali files
What IS encrypted: Local save data on device (AES-256) - NOT network traffic
Why it matters: Made reverse engineering easy! If EA had obfuscated the code, this project would be 10x harder.
See for yourself:
smali_classes2/com/firemint/realracing/Http.smali- readable class namessmali_classes2/com/ea/nimble/SynergyEnvironmentImpl.smali- readable methods
Q: What encryption DOES the game use?
A: Only for local storage:
- Algorithm: AES/CBC/PKCS5Padding (256-bit keys)
- Key derivation: PBKDF2WithHmacSHA1 (997 rounds)
- Used for:
- Saved game data on device
- Cached authentication tokens
- SharedPreferences persistence
Code location: smali_classes2/com/ea/nimble/Encryptor.smali
Network payloads: NOT encrypted (plaintext over HTTPS)
🌐 Network & Server
Q: Will the game contact EA servers?
A: ❌ NO - EA URLs eliminated in v14 APK
What we changed:
- AndroidManifest.xml:
configuration="live"→"customized" - EA production URLs unreachable (only if both user config AND manifest fail)
- URL Priority: SharedPreferences > Manifest fallback > Never EA
Details: EA-URL-ELIMINATION.md (11 KB)
Test it yourself:
- Install APK
- Monitor with
adb logcat | grep eamobile - Should see ZERO EA domain connections
Q: How does the server URL configuration work?
A: 3-tier priority system:
Priority 1 (Highest): SharedPreferences
- File:
/data/data/com.ea.games.r3_row/shared_prefs/rr3_community_server.xml - Key:
"server_url" - Set by: User input in ServerSetupActivity (first launch)
Priority 2: AndroidManifest.xml
- Meta-data:
NimbleCustomizedSynergyServerEndpointUrl - Default:
http://localhost:5001 - Used if SharedPreferences empty
Priority 3: EA URLs (UNREACHABLE)
- Only accessible if both Priority 1 AND 2 fail
- With
configuration="customized", this never happens
Code: Lines 959-985 in SynergyEnvironmentImpl.smali
Q: What server endpoints are required?
A: 73 Synergy API endpoints total
Status:
- Implemented: 58/73 (79%)
- Missing: 15 endpoints
Critical missing:
- Events Service: 0/4 (blocks career mode)
- Time Trials: 0/5
- Leaderboards: 3/4
- Multiplayer: 0/10+
Full list: SERVER-ENDPOINTS-ANALYSIS.md (12.7 KB)
Q: Can I use self-signed SSL certificates?
A: ✅ YES - the APK accepts ANY certificate
Why: Certificate validation is disabled (ALLOW_ALL_HOSTNAME_VERIFIER)
Options:
- Let's Encrypt (recommended) - free, valid certificates
- Self-signed - works perfectly, free
- No SSL (HTTP) - works but not recommended for production
Generate self-signed:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
🛠️ APK Modifications
Q: What was changed in the v14 APK?
A: Minimal changes to eliminate EA servers:
File: AndroidManifest.xml
- Line 126:
android:value="live"→android:value="customized" - Lines 127-128: Added fallback URL
http://localhost:5001
Code added:
CommunityServerManager.smali- manages server URL preferencesServerSetupActivity.smali- first-launch server input dialogOfflineModeManager.smali- online/offline toggle
That's it! No other game code modified.
Q: How do I build the APK myself?
A: 3-step process:
# 1. Decompile
apktool d RealRacing3.apk -o rr3-apk
# 2. Make changes (edit AndroidManifest.xml, etc.)
# 3. Rebuild
apktool b rr3-apk -o RR3-modified-unsigned.apk
# 4. Sign
apksigner sign --ks your-keystore.jks \
--out RR3-modified-signed.apk \
RR3-modified-unsigned.apk
Full guide: APK-BUILD-AND-TESTING-GUIDE.md (10 KB)
Requirements:
- Java 11+ (OpenJDK recommended)
- apktool 2.10.0+
- Android SDK build-tools
Q: Why isn't ProGuard/obfuscation used?
A: EA/Firemonkeys chose not to obfuscate
Likely reasons:
- Easier debugging/crash reports
- Faster build times
- Game logic not "secret" (offline mobile game)
- Anti-cheat handled server-side (when servers existed)
Result: Made our community server project MUCH easier! 🎉
🎮 Gameplay & Features
Q: Can I play offline?
A: ✅ YES - offline mode implemented
How to enable:
- Settings menu → Toggle "Offline Mode"
- Saves to:
rr3_offline_settings.xml - Key:
offline_mode_enabled
Limitations:
- No leaderboards
- No multiplayer
- No cloud save sync
- Career mode works (if Events Service implemented)
Code: smali_classes2/com/firemint/realracing/OfflineModeManager.smali
Q: Does multiplayer work?
A: ❌ NOT YET
Status: 0/10+ multiplayer endpoints implemented
Blockers:
- Real-time matchmaking system needed
- Race synchronization logic required
- Anti-cheat server-side validation
- P2P or relay server architecture decision
Priority: LOW (Phase 3+) - single-player first
Q: Can I charge for in-app purchases?
A: ❌ NO - EA's legal restriction
EA's Terms:
- ✅ Community servers allowed
- ✅ Donations for server costs allowed
- ❌ Cannot charge for in-app purchases (real money)
- ❌ Cannot charge for the APK itself
Why: EA retains the game IP and rights
Alternative: Accept donations for server hosting (PayPal, Patreon, etc.)
🐛 Troubleshooting
Q: APK won't install - "App not installed"
A: Common fixes:
1. Uninstall existing RR3:
adb uninstall com.ea.games.r3_row
2. Check signature:
apksigner verify --verbose your-apk.apk
3. Enable "Unknown Sources":
- Settings → Security → Allow unknown sources
4. Check architecture:
- APK supports: armeabi-v7a, arm64-v8a
- Won't work on x86 devices without translation
Q: Game crashes on startup
A: Debug steps:
1. Check logcat:
adb logcat -s AndroidRuntime:E
2. Common causes:
- Missing native libraries (lib/ folder)
- Wrong Android version (need 5.0+)
- Corrupted APK (re-download/rebuild)
3. Clear app data:
adb shell pm clear com.ea.games.r3_row
Q: "Cannot connect to server" error
A: Checklist:
✅ Server is running: curl http://localhost:5001/health
✅ Server URL configured in app
✅ Network connectivity exists
✅ Firewall allows connection
✅ For emulator: Use http://10.0.2.2:5001 not localhost
Port forwarding (emulator):
adb reverse tcp:5001 tcp:5001
📚 Documentation
Q: Where is all the documentation?
A: APK Repository (GitHub) - rr3-apk branch v14:
Main Docs:
README.md- Project overviewFAQ.md- This document!NETWORK-SECURITY-ANALYSIS.md(16 KB) - Security deep diveEA-URL-ELIMINATION.md(11 KB) - How EA URLs were eliminatedRR3-NETWORK-ANALYSIS-AND-CONFIG-SYSTEM.md(16 KB) - Network architectureAPK-BUILD-AND-TESTING-GUIDE.md(10 KB) - Build instructionsSERVER-ENDPOINTS-ANALYSIS.md(12.7 KB) - All 73 endpoints mapped
Server Repository (GitHub) - RR3CommunityServer branch main:
- Controllers/*.cs - Server endpoint implementations
- PHASE-1-IMPLEMENTATION-COMPLETE.md - Phase 1 completion docs
Q: How do I contribute?
A: Multiple ways to help:
1. Code:
- Implement missing endpoints (Events, Time Trials, etc.)
- Fix bugs
- Add features
2. Documentation:
- Improve guides
- Write tutorials
- Translate to other languages
3. Testing:
- Test on different devices/Android versions
- Report bugs with detailed logs
- Verify endpoint functionality
4. Assets:
- Extract game assets (cars, tracks, textures)
- Document asset formats
- Create custom content tools
Process:
- Fork repository on GitHub/Gitea
- Create feature branch
- Make changes
- Submit pull request
- Describe what you changed and why
🔧 Development
Q: What tools do I need?
A: APK Development:
- apktool 2.10.0+ - APK decompilation/recompilation
- Java 11+ - Build environment
- Android SDK - Signing & verification
- Text editor - VS Code, Sublime, etc.
Server Development:
- .NET 8 SDK - ASP.NET Core
- PostgreSQL (or SQL Server, SQLite) - Database
- Visual Studio or VS Code - IDE
Q: How long did this project take?
A: ~25 checkpoints (sessions) so far
Breakdown:
- Checkpoint 1-5: Initial analysis, asset systems, modding
- Checkpoint 6-10: Server browser, daily rewards, progression
- Checkpoint 11-15: Killswitch removal, dual APK variants, settings
- Checkpoint 16-20: Server auth, asset management, APK fixes
- Checkpoint 21-24: Version system, URL configuration, network analysis
Current Status: 79% complete (58/73 endpoints)
💬 Contact & Community
Q: Where can I ask questions?
A: Check these resources first:
- This FAQ - Common questions answered
- Documentation - Deep technical details
- Code - All source code public on Gitea/GitHub
- Issues - GitHub Issues for bug reports
Still stuck? Open a GitHub Issue with:
- Detailed description
- Steps to reproduce
- Logcat output
- Device/Android version
🎯 Quick Reference
Essential File Locations
APK (E:\rr3\rr3-apk):
AndroidManifest.xml - App configuration
smali_classes2/
com/firemint/realracing/
Http.smali - Network client
CommunityServerManager.smali - Server URL storage
ServerSetupActivity.smali - First-launch dialog
com/ea/nimble/
SynergyEnvironmentImpl.smali - URL priority logic
Encryptor.smali - AES encryption
Server (E:\rr3\RR3CommunityServer):
Controllers/
ConfigController.cs - Config endpoints
ProgressionController.cs - Save/load, progression
UserController.cs - Authentication
appsettings.json - Server configuration
📂 Complete Code Location Reference
"Where is [feature] in the code?" - Here's EVERYTHING:
🌐 Network Communication
HTTP/HTTPS Clients:
-
smali_classes2/com/firemint/realracing/Http.smali(189 lines)- Main HTTP client (POST-only)
- Lines 179-181: ALLOW_ALL_HOSTNAME_VERIFIER (disables SSL validation)
- Lines 38-42: Empty TrustManager (no certificate validation)
- Line 120: URL connection setup
- Lines 158-165: POST data writing
-
smali_classes2/com/firemonkeys/cloudcellapi/HttpRequest.smali(116 lines)- CloudCell HTTP client (GET/POST)
- Lines 108-111: SSL context setup with custom TrustManager
- Line 111: ALLOW_ALL_HOSTNAME_VERIFIER enabled
- Lines 45-70: Request execution
-
smali_classes2/com/firemonkeys/cloudcellapi/HttpThread.smali- Async HTTP execution
- Chunk-based streaming callbacks
SSL/TLS Configuration:
smali_classes2/com/firemonkeys/cloudcellapi/CloudcellTrustManager.smali- Lines 24:
m_bSSLCheckflag (default: false) - Lines 56-76:
checkServerTrusted()- validation logic (disabled by default) - Lines 78-89: Certificate chain validation (when enabled)
- Lines 24:
🔐 Encryption & Security
Data Encryption (Local Storage):
smali_classes2/com/ea/nimble/Encryptor.smali(286 lines)- Lines 7-10: Encryption constants (256-bit key, 997 rounds)
- Lines 36-50: Version headers (NEV1, NEV2)
- Lines 62-160: Legacy decryption (PBEWithMD5AndDES)
- Lines 200-270: Modern decryption (AES/CBC/PKCS5Padding)
- Lines 246-260: AES cipher initialization
- Lines 286-320: Key derivation (PBKDF2WithHmacSHA1)
Persistence:
smali_classes2/com/ea/nimble/PersistenceServiceImpl.smali- Uses Encryptor for save data
- Lines 150-200: Save file encryption
- Lines 250-300: Load file decryption
🌍 Server URL Configuration
URL Priority System:
smali_classes2/com/ea/nimble/SynergyEnvironmentImpl.smali(1800+ lines)- Lines 953-1049:
getSynergyDirectorServerUrl()- MAIN URL LOGIC - Lines 959-985: SharedPreferences check (Priority 1)
- Lines 990-1048: Configuration mode switch
- Lines 1008: EA Integration URL (unreachable with CUSTOMIZED)
- Lines 1041: EA Staging URL (unreachable with CUSTOMIZED)
- Lines 1046: EA Production URL (unreachable with CUSTOMIZED)
- Lines 953-1049:
Community Server Manager:
smali_classes2/com/firemint/realracing/CommunityServerManager.smali(136 lines)- Lines 24-58:
checkServerUrl()- returns boolean if URL exists - Lines 60-96:
getServerUrl()- retrieves URL from SharedPreferences - Lines 98-136:
saveServerUrl()- saves URL to SharedPreferences - SharedPreferences file:
"rr3_community_server" - SharedPreferences key:
"server_url"
- Lines 24-58:
Server Setup Dialog:
smali_classes2/com/firemint/realracing/ServerSetupActivity.smali- First-launch UI for server URL input
- Test connection button logic
- Save and continue functionality
⚙️ Configuration Files
App Manifest:
AndroidManifest.xml- Line 126:
com.ea.nimble.configuration- "customized" (was "live") - Lines 127-128:
NimbleCustomizedSynergyServerEndpointUrl- fallback URL - Lines 32-35: Permissions (INTERNET, NETWORK_STATE, etc.)
- Lines 45-120: EA Nimble SDK meta-data
- Line 210:
networkSecurityConfigreference - Line 215:
usesCleartextTraffic="false"(HTTPS enforced)
- Line 126:
Network Security Config:
res/xml/network_security_config.xml- Trust settings for HTTPS
- Certificate configuration
🎮 Game Features
Offline Mode:
smali_classes2/com/firemint/realracing/OfflineModeManager.smali(131 lines)- Lines 36-77:
init()- loads preference on startup - Lines 79-86:
isOfflineMode()- getter - Lines 88-131:
setOfflineMode()- setter with persistence - SharedPreferences file:
"rr3_offline_settings" - SharedPreferences key:
"offline_mode_enabled"
- Lines 36-77:
Settings Activity:
smali_classes2/com/firemint/realracing/SettingsActivity.smali- Offline mode toggle UI
- Server URL change option
- Game settings management
🚗 EA Nimble SDK (Core Services)
Synergy (Authentication/Backend):
-
smali_classes2/com/ea/nimble/SynergyEnvironmentImpl.smali- Main Synergy implementation
- Lines 1-100: Constants and initialization
- Lines 953-1049: Server URL selection logic
- Lines 1100-1200: Director API calls
-
smali_classes2/com/ea/nimble/SynergyIdManager.smali- Synergy ID generation/storage
- User identification system
-
smali_classes2/com/ea/nimble/SynergyNetwork.smali- Network request handling
- API endpoint calls
Application Environment:
smali_classes2/com/ea/nimble/ApplicationEnvironmentImpl.smali- App bundle ID
- Version information
- Device info
Tracking/Analytics:
smali_classes2/com/ea/nimble/Tracking*.smali- Analytics event tracking
- Synergy event logging
💰 CloudCell API (Billing/Social)
Billing:
-
smali_classes2/com/firemonkeys/cloudcellapi/GooglePlayWorker.smali- Google Play IAB integration
- Purchase handling
- Inventory management
-
smali_classes2/com/firemonkeys/cloudcellapi/AmazonStoreWorker.smali- Amazon Appstore integration
-
smali_classes2/com/firemonkeys/cloudcellapi/FacebookWorker.smali- Facebook payments
Inventory/Purchases:
-
smali_classes2/com/firemonkeys/cloudcellapi/util/Inventory.smali- IAB inventory management
-
smali_classes2/com/firemonkeys/cloudcellapi/util/Purchase.smali- Purchase data handling
Security:
smali_classes2/com/firemonkeys/cloudcellapi/Security.smali- Signature verification (Google Play)
- Base64 encoding/decoding
📱 Android Components
Main Activity:
smali_classes2/com/firemint/realracing/MainActivity.smali- App entry point
- Launches ServerSetupActivity on first run
Splash Screen:
smali_classes2/com/firemint/realracing/SplashActivity.smali- Initial loading screen
- Asset check trigger
JNI Bridge:
smali_classes2/com/firemint/realracing/JNI*.smali- Native code bridge
- C++ game engine communication
🗂️ Assets & Resources
Asset Locations:
assets/- Game data files
- Car models, tracks, textures
- Configuration files
- Audio files
Resources:
res/layout/- UI layoutsres/drawable/- Imagesres/values/strings.xml- String resourcesres/xml/network_security_config.xml- Network config
📊 Third-Party SDKs
Firebase:
smali_classes2/com/google/firebase/- Analytics
- Crashlytics
- Performance monitoring
Facebook SDK:
smali_classes2/com/facebook/- Login integration
- Graph API
- Share functionality
Ad Networks:
smali_classes2/com/ironsource/- IronSource adssmali_classes2/com/vungle/- Vungle adssmali_classes2/com/fyber/- Fyber adssmali_classes2/com/tapjoy/- Tapjoy reward ads
🔧 Build Files
Build Configuration:
apktool.yml- APK metadata- Version info
- SDK versions
- Compression settings
Native Libraries:
lib/armeabi-v7a/- 32-bit ARM librarieslib/arm64-v8a/- 64-bit ARM librarieslib/x86/- x86 libraries (if present)
📝 Documentation Files
Security & Network:
-
NETWORK-SECURITY-ANALYSIS.md(16 KB)- Complete security audit
- SSL/TLS analysis
- Attack vectors
- Mitigation strategies
-
EA-URL-ELIMINATION.md(11 KB)- URL priority system
- Code flow analysis
- EA URL removal proof
-
RR3-NETWORK-ANALYSIS-AND-CONFIG-SYSTEM.md(16 KB)- Network stack architecture
- CloudCell API docs
- Config system design
Build & Testing:
APK-BUILD-AND-TESTING-GUIDE.md(10 KB)- Build instructions
- Testing procedures
- Troubleshooting
Implementation Status:
SERVER-ENDPOINTS-ANALYSIS.md(12.7 KB)- All 73 endpoints mapped
- Implementation status
- Priority assignments
🗺️ Code Navigation Tips
Finding Specific Features:
1. Search by functionality:
# Find network-related code
grep -r "http\|Http\|network" smali_classes2/com/firemint/realracing/
# Find encryption code
grep -r "encrypt\|Encrypt\|cipher\|Cipher" smali_classes2/com/ea/nimble/
# Find server URL logic
grep -r "server.*url\|ServerUrl" smali_classes2/
2. Search by string:
# Find EA URLs
grep -r "eamobile.com" smali_classes2/
# Find configuration keys
grep -r "rr3_community_server\|offline_mode" smali_classes2/
# Find SharedPreferences usage
grep -r "SharedPreferences" smali_classes2/
3. Search by method name:
# Find URL getter
grep -r "getSynergyDirectorServerUrl" smali_classes2/
# Find encryption methods
grep -r "checkServerTrusted\|init.*Cipher" smali_classes2/
Understanding Code Flow:
Server URL Resolution:
1. Game starts → MainActivity.smali
2. Check config → CommunityServerManager.checkServerUrl()
3. Get URL → SynergyEnvironmentImpl.getSynergyDirectorServerUrl()
├─ Priority 1: SharedPreferences ("rr3_community_server.xml")
├─ Priority 2: AndroidManifest.xml (NimbleCustomizedSynergyServerEndpointUrl)
└─ Priority 3: EA URLs (UNREACHABLE with configuration="customized")
4. Make API call → Http.smali or HttpRequest.smali
First Launch Flow:
1. MainActivity.smali → onCreate()
2. Check if first launch (no SharedPreferences)
3. Launch → ServerSetupActivity.smali
4. User inputs server URL
5. Save → CommunityServerManager.saveServerUrl()
6. Restart → MainActivty with URL configured
Network Request Flow:
1. Game needs data → SynergyNetwork.smali
2. Build request → URL + parameters
3. Send via → Http.smali (POST) or HttpRequest.smali (GET/POST)
4. TLS handshake → CloudcellTrustManager (accepts all certs)
5. Receive response → Parse JSON
6. If save needed → Encryptor.smali (AES-256)
Quick Commands
Build APK:
apktool b rr3-apk -o RR3-unsigned.apk
Sign APK:
apksigner sign --ks keystore.jks --out RR3-signed.apk RR3-unsigned.apk
Install APK:
adb install -r RR3-signed.apk
Monitor Logs:
adb logcat | grep -i "rr3\|synergy\|community"
Check Server URL:
adb shell cat /data/data/com.ea.games.r3_row/shared_prefs/rr3_community_server.xml
Run Server:
cd RR3CommunityServer
dotnet run
🎉 Did This Help?
If this FAQ answered your question, consider:
- ⭐ Starring the repository
- 📖 Reading the detailed documentation
- 🤝 Contributing improvements
- 💬 Helping others in Issues
Remember: All code is public! When in doubt, read the source. 😊
FAQ Version: 1.0
Last Updated: February 23, 2026
Maintainer: Community Server Project Team
Repository Links:
- APK: https://github.com/supermegamestre/Project-Real-Resurrection-3 (v14 branch)
- Server: https://github.com/supermegamestre/RR3CommunityServer (main branch)