# Real Racing 3 Community Server - Complete APK Modification Solution
## 🎯 Overview
**GREAT NEWS!** Real Racing 3 **already has built-in support** for custom servers! No complex code modifications needed - just a simple configuration change in the AndroidManifest.xml.
---
## ✨ What's Included
### 1. **Comprehensive Modification Guide**
📄 **APK_MODIFICATION_GUIDE.md** (14,000+ words)
- Three different modification methods
- Step-by-step instructions
- Troubleshooting guide
- Security considerations
- Distribution strategies
### 2. **Automated PowerShell Script**
📜 **RR3-Community-Mod.ps1**
- One-command APK modification
- Automatic decompile/recompile/sign
- ADB installation support
- User-friendly interface with color output
- Error handling and validation
### 3. **Server Implementation**
📂 **RR3CommunityServer/** (.NET 8)
- Fully functional community server
- Cross-platform (Windows/Linux/macOS)
- 12 API endpoints
- Database persistence
- Production-ready
---
## 🚀 Quick Start
### For Users (Simple)
**1. Run the automated script:**
```powershell
cd E:\rr3
.\RR3-Community-Mod.ps1 -ServerUrl "https://localhost:5001" -ApkPath "realracing3.apk"
```
**2. Install on device:**
```bash
adb uninstall com.ea.games.r3_row
adb install realracing3-community.apk
```
**3. Done!** Game connects to your community server.
---
## 🔍 How It Works
### Built-in Configuration System
Real Racing 3 uses EA's Nimble SDK which has these configuration modes:
| Mode | Purpose | Server URL |
|------|---------|------------|
| **LIVE** | Production (default) | `https://syn-dir.sn.eamobile.com` |
| **STAGE** | Testing/staging | `https://director-stage.sn.eamobile.com` |
| **INTEGRATION** | Development | `https://director-int.sn.eamobile.com` |
| **CUSTOM** | **Community servers** | User-defined URL |
### Configuration Location
**AndroidManifest.xml:**
```xml
```
### Code Reference
**SynergyEnvironmentImpl.java (Line 166-183):**
```java
public String getSynergyDirectorServerUrl(NimbleConfiguration config) {
switch (config) {
case INTEGRATION:
return SYNERGY_INT_SERVER_URL;
case STAGE:
return SYNERGY_STAGE_SERVER_URL;
case LIVE:
return SYNERGY_LIVE_SERVER_URL;
case CUSTOMIZED:
// 🎯 This is what we use!
return NimbleApplicationConfiguration.getConfigValueAsString(
"NimbleCustomizedSynergyServerEndpointUrl",
SYNERGY_LIVE_SERVER_URL
);
default:
return SYNERGY_LIVE_SERVER_URL;
}
}
```
---
## 📋 Prerequisites
### Required Tools
1. **APKTool** - APK decompile/recompile
2. **Java JDK 8+** - Required by APKTool
3. **Uber APK Signer** (optional but recommended) - APK signing
### Installation
**Windows (PowerShell as Admin):**
```powershell
# Install Chocolatey
Set-ExecutionPolicy Bypass -Scope Process -Force
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
# Install Java
choco install openjdk11
# Download APKTool
Invoke-WebRequest -Uri "https://github.com/iBotPeaches/Apktool/releases/download/v2.9.3/apktool_2.9.3.jar" -OutFile "C:\Windows\apktool.jar"
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/windows/apktool.bat" -OutFile "C:\Windows\apktool.bat"
# Download Uber APK Signer
Invoke-WebRequest -Uri "https://github.com/patrickfav/uber-apk-signer/releases/download/v1.3.0/uber-apk-signer-1.3.0.jar" -OutFile "E:\rr3\uber-apk-signer-1.3.0.jar"
```
**Linux/macOS:**
```bash
# Install Java
sudo apt install openjdk-11-jdk # Ubuntu/Debian
brew install openjdk@11 # macOS
# Install APKTool
sudo apt install apktool # Ubuntu/Debian
brew install apktool # macOS
# Download Uber APK Signer
wget https://github.com/patrickfav/uber-apk-signer/releases/download/v1.3.0/uber-apk-signer-1.3.0.jar
```
---
## 🛠️ Modification Methods
### Method 1: Automated Script (Recommended)
**One-line command:**
```powershell
.\RR3-Community-Mod.ps1 -ServerUrl "https://your-server.com" -ApkPath "realracing3.apk"
```
**Features:**
- ✅ Automatic decompile/modify/recompile/sign
- ✅ Input validation
- ✅ Error handling
- ✅ Optional ADB installation
- ✅ Color-coded output
### Method 2: Manual (Step-by-Step)
```bash
# 1. Decompile
apktool d realracing3.apk -o rr3-modded
# 2. Edit AndroidManifest.xml
# (See guide for exact changes)
# 3. Recompile
apktool b rr3-modded -o realracing3-community.apk
# 4. Sign
java -jar uber-apk-signer.jar --apks realracing3-community.apk
# 5. Install
adb install realracing3-community-aligned-debugSigned.apk
```
### Method 3: Companion App (Advanced)
Create an Android app that modifies the APK programmatically:
- Users just enter server URL in a UI
- App handles all technical details
- Best for non-technical users
*(See full implementation in APK_MODIFICATION_GUIDE.md)*
---
## 📱 Complete Workflow
### 1. Set Up Community Server
```bash
# Start the server
cd E:\rr3\RR3CommunityServer\RR3CommunityServer
dotnet run
# Server starts on https://localhost:5001
```
### 2. Modify APK
```powershell
# Modify APK to point to server
.\RR3-Community-Mod.ps1 -ServerUrl "https://localhost:5001" -ApkPath "realracing3.apk"
```
### 3. Install on Device
```bash
# Uninstall original (different signature)
adb uninstall com.ea.games.r3_row
# Install modified APK
adb install realracing3-community.apk
```
### 4. Play!
Launch Real Racing 3 - it automatically connects to your community server!
---
## 🌐 Configuration Examples
### Local Server (Same PC)
```powershell
.\RR3-Community-Mod.ps1 -ServerUrl "https://localhost:5001"
```
### LAN Server
```powershell
.\RR3-Community-Mod.ps1 -ServerUrl "https://192.168.1.100:5001"
```
### Internet Server
```powershell
.\RR3-Community-Mod.ps1 -ServerUrl "https://rr3-community.mydomain.com"
```
### Android Emulator (from host PC)
```powershell
# 10.0.2.2 is the special IP for host machine from Android emulator
.\RR3-Community-Mod.ps1 -ServerUrl "http://10.0.2.2:5001"
```
---
## 🔒 Security Considerations
### SSL/HTTPS Support
**For localhost testing (HTTP):**
- Works out of the box
- No certificate needed
**For production (HTTPS):**
- Use valid SSL certificate (Let's Encrypt)
- Or install custom CA certificate on device
- Or disable certificate validation (see guide)
### Certificate Pinning
If the app has certificate pinning, you may need to:
1. Install custom CA certificate on device
2. Use mitmproxy to intercept/re-sign traffic
3. Modify CloudcellTrustManager.java to disable validation
*(Detailed instructions in APK_MODIFICATION_GUIDE.md)*
---
## 📊 Verification
### Check Modified APK
```bash
# Extract and verify AndroidManifest.xml
unzip -p realracing3-community.apk AndroidManifest.xml | grep -A2 "NimbleCustomizedSynergyServerEndpointUrl"
# Expected output:
#
```
### Monitor Network Traffic
```bash
# Use adb logcat to see connections
adb logcat | grep -i "synergy\|nimble\|director"
# Expected output:
# SynergyEnv: Using CUSTOMIZED configuration
# SynergyEnv: Director URL = https://your-server.com
```
### Test Server Connection
Check server logs for incoming requests:
```
[INFO] Synergy Request: Path=/director/api/android/getDirectionByPackage
[INFO] GetDeviceID request: existing=null, hardware=abc123
```
---
## 🔄 Switching Between Servers
### Option 1: Multiple APKs
Keep two versions:
- `realracing3-official.apk` - Points to EA servers
- `realracing3-community.apk` - Points to your server
Uninstall one, install the other to switch.
### Option 2: Change Package Name
Modify package name to run both side-by-side:
```xml
```
Now you can have:
- `com.ea.games.r3_row` - Official version
- `com.ea.games.r3_row.community` - Community version
**Note:** Requires changing all package references (advanced).
---
## 🐛 Troubleshooting
| Issue | Solution |
|-------|----------|
| **APK won't install** | Uninstall original first: `adb uninstall com.ea.games.r3_row` |
| **App crashes on launch** | Check APKTool version (2.7.0+), recompile with `-f` flag |
| **Still connects to EA** | Verify manifest changes, check logcat for config being read |
| **SSL certificate error** | Install custom CA cert or disable certificate validation |
| **"Signature conflict"** | Different signatures can't overwrite - uninstall first |
---
## 📦 Distribution
### Distribute Modified APK
**Pros:**
- Easy for users (just install)
- No technical knowledge required
**Cons:**
- Different signature than official
- Must uninstall official first
- Updates need re-distribution
### Distribute Script + Instructions
**Pros:**
- Users modify their own APK
- More trustworthy (users see what changes)
**Cons:**
- Requires technical knowledge
- Need to install tools
### Create Companion App
**Pros:**
- Best user experience
- Handles everything automatically
- Can switch servers easily
**Cons:**
- Requires developing Android app
- More complex to maintain
---
## ✅ Complete Checklist
**Server Setup:**
- [ ] .NET 8 SDK installed
- [ ] Community server built successfully
- [ ] Server running and accessible
- [ ] Firewall allows connections
**APK Modification:**
- [ ] APKTool installed
- [ ] Java JDK installed
- [ ] Uber APK Signer downloaded
- [ ] Original APK obtained
- [ ] Script executed successfully
- [ ] Modified APK signed
**Device Installation:**
- [ ] ADB installed and working
- [ ] Device connected (USB debugging enabled)
- [ ] Original app uninstalled
- [ ] Modified APK installed
- [ ] App launches without errors
**Connection Test:**
- [ ] Server logs show incoming requests
- [ ] Logcat shows custom server URL
- [ ] Device registered successfully
- [ ] Catalog loaded
---
## 📚 Documentation
| Document | Description | Size |
|----------|-------------|------|
| **APK_MODIFICATION_GUIDE.md** | Complete modification guide | 14,000 words |
| **RR3-Community-Mod.ps1** | Automated script | 320 lines |
| **NETWORK_COMMUNICATION_ANALYSIS.md** | Protocol analysis | 13,000 words |
| **IMPLEMENTATION_GUIDE.md** | Server setup guide | 15,000 words |
| **Total** | Complete documentation | 42,000+ words |
---
## 🎉 Success!
You now have everything needed to:
1. ✅ **Run a community server** (.NET 8, cross-platform)
2. ✅ **Modify APK** (automated script or manual)
3. ✅ **Connect game to server** (simple configuration change)
4. ✅ **Switch between servers** (multiple methods)
5. ✅ **Distribute to users** (APK or companion app)
**The game's built-in support for custom servers makes this incredibly clean!**
No hacky workarounds, no complex code modifications - just a simple configuration change that the developers intentionally included.
---
## 🏁 Next Steps
1. **Test locally**: Modify APK with localhost URL, test on emulator
2. **Deploy server**: Set up on cloud (Azure/AWS/etc.)
3. **Get SSL certificate**: Use Let's Encrypt for production
4. **Distribute**: Share modified APK with community
5. **Enjoy**: Play Real Racing 3 on your own terms!
**Happy racing on your community server! 🏎️💨**
---
*Project Status: ✅ Complete*
*APK Modification: ✅ Automated*
*Server: ✅ Production-ready*
*Documentation: ✅ 42,000+ words*
*Date: February 2026*